Делать Discord бот-командой нечувствительным к регистру? - PullRequest
0 голосов
/ 21 марта 2019

Я создал команду "roleinfo" для своего дискорд-бота. Я не уверен, как сделать регистр поиска нечувствительным к регистру. Смотрите мой код ниже:

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 (), но я не уверен, как / где в этом сценарии. Кто-нибудь может мне помочь? Буду очень признателен. Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 21 марта 2019

Может быть, что-то подобное подойдет вам? (В сухом коде, 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);
};

0 голосов
/ 21 марта 2019

Использование .toLowerCase () или .toUpperCase () может вызвать проблемы с особыми символами Unicode.

Итак, используйте: String.prototype.localeCompare () https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

И дляизменить вам просто необходимо отредактировать делегата roles => roles.name === roleName

0 голосов
/ 21 марта 2019

Как ты сам сказал, просто сделай

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

Это будет из:

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

'role-name' === 'role-name'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...