Discord.js为提到的用户添加自定义角色

时间:2020-08-17 20:18:41

标签: javascript discord.js

我在向用户添加自定义角色时遇到问题。该命令应如下所示:${prefix}addrole @user <role name>。用户应收到一个自定义角色,而漫游器应发送一条确认消息。这是我的代码:

client.on('message', (message) => {
  if (message.content.startsWith(`${prefix}addrole`)) {
    module.exports.run = async (bot, message, args) => {
      if (!message.member.hasPermissions('MANAGE_MEMBERS'))
        return message.reply("You don't have acces!");
      const rMember =
        message.guild.member(message.mentions.user.first()) ||
        message.guild.members.get(args[0]);
      if (!rMember) return message.reply("I couldn't find that user!");
      const role = args.join(' ').slice(22);
      if (!role) return message.reply('Please type a role!');
      const gRole = message.guild.roles.find(`name`, role);
      if (!gRole) return message.reply("I couldn't find that role!");

      if (nMember.roles.has(gRole.id));
      await nMember.addRole(gRole.id);

      try {
        nMember.send(`You received ${gRole.name}`);
      } catch (e) {
        message.channel.send(
          `The user <@${rMember.id}>, received the role ${gRole.name}. We tried to dm him but he disabled them.`
        );
      }
    };
    module.exports.help = {
      name: 'addrole',
    };
  }
});

1 个答案:

答案 0 :(得分:1)

我发现的第一个问题来自以下两行:

if(nMember.roles.has(gRole.id));
    await(nMember.addRole(gRole.id));

首先:

await不是函数,因此不需要括号。如果确实加上括号,则会出现错误。相反,只需使用:

await nMember.addRole(gRole.id)

第二个:

GuildMember.roles.has已过时。 discord.js v12 +使用Managers,因此您必须添加cache属性。写:

if (nMember.roles.cache.has(gRole.id))

这也适用于代码中的上一行:

let gRole=message.guild.roles.find(`name`, role);

替换为

let gRole = message.guild.roles.cache.find(r => r.name = role)

第三个:

在我引用的第二行代码中,出现了这个问题:

await nMember.addRole(gRole.id)

addRole()也已弃用,请使用:

await nMember.roles.cache.add(gRole.id)

第四,我几乎不明白这一点:

MANAGE_MEMBERS不再是权限标志。而是使用MANAGE_ROLES


总的来说,代码可能会被清除,但是我认为那是我发现的所有错误。