我想发出一个命令,以便我可以为我的 Discord 服务器中的所有用户分配一个角色。
现在的问题是我的代码,他不是给所有成员指定的角色,因为成员太多,它会向 discord api 发送垃圾邮件。
我怎样才能做到在我执行命令后,机器人会给所有成员指定的角色,但不是直接防止垃圾邮件 API,但例如每 10 分钟他给 5 个成员角色,直到所有成员成员得到了角色。
希望有人能帮我
这就是我现在拥有的:
module.exports = {
name: "give-roles",
aliases: ["gr"],
category: "roles",
description: "Give's all members the Verified-Member role",
usage: `${prefix}give-roles`,
run: async (Client, message) => {
message.guild.members.fetch()
.then(console.log)
.catch(console.error);
let role = message.guild.roles.cache.find(r => r.name === 'Verified-Member')
if (!role) return message.channel.send(`**${message.author.username}**, role not found`)
message.guild.members.cache.filter(m => !m.user.bot).forEach(member => member.roles.add(role))
message.channel.send(`**${message.author.username}**, role **${role.name}** was added to all members`)
},
}```
答案 0 :(得分:0)
解决这个问题的一种方法是在成员加入时添加一个角色而不是一次加入(这将永远不会起作用,因为并非所有成员都将被缓存)
<client>.on('guildMemberAdd', member => {
var memberRole = member.guild.roles.cache.find(role => role.name === "<role name here>");
member.roles.add(memberRole); //auto assign role on join
});
<块引用>
更改 <>
中的代码以满足您的需要
无法为所有成员添加角色的原因是 v12 添加了缓存。
管理器/缓存
<块引用>v12 引入了管理器的概念,你将不能再直接在 Client#users 这样的数据结构上使用 Collection#get 等集合方法。在尝试使用收集方法之前,您现在必须直接请求管理器上的缓存。任何直接在管理器上调用的方法都会调用 API,例如 GuildMemberManager#fetch 和 MessageManager#delete。
我建议您阅读文档以进一步了解机器人的工作原理here