gpt4 book ai didi

node.js - 如何使用nodejs中的discord bot获取discord js中的所有非机器人用户

转载 作者:行者123 更新时间:2023-12-02 19:05:29 31 4
gpt4 key购买 nike

我引用此 digital ocean link 创建了一个不和谐机器人。 。
现在我可以使用机器人向任何 channel 发送消息,但我的要求是将 dm 发送给该服务器的用户。
为此,我尝试了很多 SO 答案并遵循其他链接,但所有解决方案最终都是相同的。
我尝试过这两种方法来获取公会的用户并将 dm 发送给任何一个选定的用户。
第一种方法 - 获取公会(服务器)的所有用户

const client_notification = new Discord.Client();
client_notification.on('ready', () => {
console.log("Notification manager ready");
let guild = client_notification.guilds.cache.get("Server ID");
guild.members.cache.forEach(member => console.log("===>>>", member.user.username));
});
client_notification.login("login");

输出

Notification manager ready
===>>> discord notification

通过这种方式,它只返回机器人名称本身。虽然membersCount是6个。

第二种方式 - 直接向用户发送 DM(服务器)

client.users.cache.get('<id>').send('<message>');

它给了我未定义的输出。

我的配置,
Node 版本:10.16.3
Discord.js 版本:12.5.1

我的问题是如何获取discord.js中的所有公会成员?

最佳答案

Discord 最近添加了特权网关意图。因此,要获取所有成员数据,您需要在 developer portal 中启用该功能。 。之后,您需要获取所有可用的成员,为此我们可以使用 fetchAllMembers client option ,然后我们需要过滤掉机器人用户,这样我们就不会向他们发送消息。

const client_notification = new Discord.Client({fetchAllMembers:true}); //Fetches all members available on startup.
client_notification.on('ready', () => {
console.log("Notification manager ready");
let guild = client_notification.guilds.cache.get("Server ID");
guild.members.cache.filter(member => !member.user.bot).forEach(member => console.log("===>>>", member.user.username));
});
client_notification.login("login");

.filter() 方法会过滤掉所有机器人,只提供真实用户。当您的机器人变大时,您应该避免使用 fetchAllMembers,因为它可能会减慢您的机器人速度并使用大量内存。

关于node.js - 如何使用nodejs中的discord bot获取discord js中的所有非机器人用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65120234/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com