我如何使漫游器向所有服务器的每个成员发送消息?
我想让机器人成为on_ready
答案 0 :(得分:0)
根据您的漫游器所在的服务器数量以及该服务器中的用户数量,您的漫游器很可能会被禁止。我丝毫不推荐这样做。
您可以使用GuildMemberManager.fetch()
,它将与几个for... of
循环一起获取服务器中的所有成员。
// const client = new Discord.Client();
client.on('ready', async () => {
for (const guild of client.guilds.cache)
for (const user of await guild.members.fetch())
user.send('message').catch(() => console.log('User had DMs disabled'));
});
此方法的一个问题是,如果某些用户位于这些服务器中的多个服务器中,则可能会多次DMd(除了明显的问题是,这会占用大量内存,并且您的漫游器可能会被禁止)
您还可以在初始化客户端时启用fetchAllMembers
选项。
在启动时以及在加入公会时是否缓存所有公会成员和用户(应尽可能避免)
再次,如描述所言,应尽可能避免这种情况(我只是为了说明清楚)。
// const client = new Discord.Client({ fetchAllMembers: true });
client.on('ready', () => {
for (const user of client.users.cache)
user.send('message').catch(() => console.log('User had DMs disabled'));
});
我不能足够强调这个想法有多糟糕。