Discord.js 机器人的 Mass Role Assigner 命令

Posted

技术标签:

【中文标题】Discord.js 机器人的 Mass Role Assigner 命令【英文标题】:Mass Role Assigner Command for a Discord.js Bot 【发布时间】:2020-11-09 14:14:28 【问题描述】:

我一直在处理 discord.js 中的一个不和谐机器人,它为这个框架中提到的人分配一个角色:

$prefixassignrole $role $user1 $user2 $user3 ...

我想出了一种将角色分配给一个人的方法,但我找不到将它分配给许多人的方法。这是我的代码:

if(command === "assignrole")
  if(!message.member.roles.some(r=>["Defenestration Administration", "Moderator", "Admin", "Administrator/Creator"].includes(r.name)) )
      return message.reply("Sorry, you don't have permissions to use this!");
  var role = message.mentions.roles.first();
  var roleId = message.mentions.roles.first().id

  message.mentions.members.first().addRole(roleId)

  if(!role) 
    return message.channel.send("Wrong Input, Must Type a Valid Role After the Command!")
  
  

谁能帮助我,向我展示一种为多个用户分配角色的方法。

感谢任何答案或帮助,谢谢:)

-约书亚

【问题讨论】:

【参考方案1】:

message.mentions.members 是一个集合。它包含您在消息中提到的所有成员。您可以遍历上述集合并添加角色。


if (command === "assignrole") 
    const Role = message.mentions.roles.first();

    message.mentions.members.forEach(member => 
        member.roles.add(Role).catch(e => console.error(e));
    );

    message.channel.send(`Added role $Role.name to $message.mentions.members.map(member => member.user.tag).join(", ").`);

【讨论】:

感谢您的回答,但我必须将 member.roles.add 修复为 member.addRole,这样我才能真正运行机器人,因为它显示错误,并且当我运行命令时它只分配角色只发给提到的两个成员中的一个(最后一个)。但是当它超过两个时它起作用,而当它提到它的 2 或 1 个角色时它不起作用。谢谢。【参考方案2】:

除了@Jakye,您还可以使用 for 循环来避免异步系统的速率限制。

client.on("message", async message => 

  let membersArray = message.mentions.members.array();

  for(var guildMemberId in membersArray) 
    await membersArray[guildMemberId].roles.add(message.mentions.roles.first());
  

  message.channel.send("All members have received the role " + message.mentions.roles.first().name + ".");

【讨论】:

以上是关于Discord.js 机器人的 Mass Role Assigner 命令的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 discord.js 获得角色

如何从提及 discord.js 添加角色

如何向所有具有角色的成员发送消息(discord.js)

JS Discord 机器人获取角色

Discord.js 机器人不会执行 .then

Discord.js 与机器人的集成角色