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 命令的主要内容,如果未能解决你的问题,请参考以下文章