我一直在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!")
}
}
有人可以通过向我展示分配多个用户角色的方法来帮助我。
感谢您的任何回答或帮助,谢谢:)
-约书亚
答案 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 + ".");
}