简体   繁体   English

使Discord bot命令不区分大小写?

[英]Making Discord bot command case insensitive?

I created a "roleinfo" command for my discord bot. 我为我的不和谐机器人创建了一个“ roleinfo”命令。 I'm not sure how to make the role search case insensitive. 我不确定如何使角色搜索不区分大小写。 See my code below: 请参阅下面的代码:

 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", } 

I know I have to use .toLowerCase() or .toUpperCase() but i'm not sure how/where in this scenario. 我知道我必须使用.toLowerCase()或.toUpperCase(),但是我不确定在这种情况下如何/在哪里使用。 Could anyone help me out? 有人可以帮我吗? Will be greatly appreciated. 将不胜感激。 Thanks in advance! 提前致谢!

Maybe something like this would work for you? 也许这样的事情适合您? (Dry-coded, YMMV.) (干编码,YMMV。)

The idea is to use .toLowerCase() in the two filtering statements that look at role names, both in the global list of roles and in the per-member role list. 这个想法是在两个过滤语句中使用.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);
};

As you said yourself, just do 就像你自己说的那样

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

That would make out of : 那将导致:

'Role-name' === 'Role-NAME'

'role-name' === 'role-name'

Using .toLowerCase() or .toUpperCase() can produce issues about special Unicode characters. 使用.toLowerCase()或.toUpperCase()可能会产生有关特殊Unicode字符的问题。

So, use : String.prototype.localeCompare() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare 因此,请使用:String.prototype.localeCompare() https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

And for the change you juste need to edit the delegate roles => roles.name === roleName 对于更改,您只需编辑roles => roles.name === roleName

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM