使Discord Bot命令案例不敏感



我为我的Discord bot创建了一个" roominfo"命令。我不确定如何使角色搜索案例不敏感。请参阅下面的代码:

const Discord = require("discord.js");
module.exports.run = async (bot, message, args) => {
    //Message checks
    if (!args[0]) return message.channel.send("You must specify a role name");
    //Grab args and specify as rolename
    let roleName = `${args[0]}`
    //@rolename
    let roleMention = message.guild.roles.find(roles => roles.name === roleName)
    let rolefind = message.guild.roles.find(roles => roles.name === roleName)
    if (!rolefind) return message.channel.send(`Can't find role ${args[0]}`);
    //Filter members for role
    let membersWithRole = message.guild.members.filter(member => {
        return member.roles.find(roles => roles.name === roleName);
    }).map(member => {
        return member.user.username;
    })
    let serverembed = new Discord.RichEmbed()
        .setColor("#FFD700")
        .addField("Role name", roleMention)
        .addField("Number of users with the role", rolefind.members.size)
        .addField("Users with the role", membersWithRole.join("n"))
    message.channel.send(serverembed);
}
module.exports.help = {
    name: "roleinfo",
    usage: "``prefix`` roleinfo or ``prefix`` roleinfo rolename",
    description: "Displays detailed role information",
}

我知道我必须使用.tolowercase()或.touppercase(),但我不确定在这种情况下如何/位置。有人可以帮我吗?将不胜感激。预先感谢!

也许类似的东西对您有用吗?(干编码,YMMV。)

这个想法是在两个查看角色名称的过滤语句中使用.toLowerCase(),包括在全局角色列表和每成员的角色列表中。

module.exports.run = async (bot, message, args) => {
  const roleName = args[0];
  //Message checks
  if (!roleName) return message.channel.send("You must specify a role name");
  const roleFind = message.guild.roles.find(roles => roles.name.toLowerCase() === roleName.toLowerCase());
  if (!roleFind) return message.channel.send(`Can't find role ${roleName}`);
  const memberNamesWithRole = [];
  message.guild.members.forEach(member => {
    if (member.roles.some(memberRole => memberRole.name.toLowerCase() === roleName.toLowerCase())) {
      memberNamesWithRole.push(member.user.username);
    }
  });
  const serverembed = new Discord.RichEmbed()
    .setColor("#FFD700")
    .addField("Role name", roleName)
    .addField("Number of users with the role", memberNamesWithRole.length)
    .addField("Users with the role", memberNamesWithRole.join("n"));
  message.channel.send(serverembed);
};

正如您所说的,只需做

roleMention = message.guild.roles.find(roles => roles.name.toLowerCase() === roleName.toLowerCase())

将由:

做出
'Role-name' === 'Role-NAME'
'role-name' === 'role-name'

使用.tolowercase()或.touppercase()可以产生有关特殊Unicode字符的问题。

所以,使用:string.prototype.localecompare()https://developer.mozilla.org/en-us/docs/web/javascript/Reference/global_objects/string/localecompare

为了进行更改,您需要编辑委托roles => roles.name === roleName

最新更新