Discord.js Bot的大规模角色分配器命令

时间:2020-07-20 10:33:12

标签: javascript discord bots discord.js

我一直在discord.js中开发一个discord机器人,该机器人将角色分配给此框架中提到的人员:

$ {prefix} assignrole $ {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!")
  }
  
}

有人可以通过向我展示分配多个用户角色的方法来帮助我。

感谢您的任何回答或帮助,谢谢:)

-约书亚

2 个答案:

答案 0 :(得分:2)

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(", ")}.`);
}

答案 1 :(得分:1)

除了@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 + ".");
}