【问题标题】:How to get all non bot users in discord js using a discord bot in nodejs如何使用nodejs中的discord bot获取discord js中的所有非bot用户
【发布时间】:2021-03-15 03:06:41
【问题描述】:

我通过引用 digital ocean link 创建了一个不和谐机器人。
现在我可以使用机器人向任何频道发送消息,但我的要求是将 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>');

它给了我未定义的输出。

我的配置,
节点版本:10.16.3
discord.js 版本:12.5.1

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

【问题讨论】:

标签: node.js discord discord.js


【解决方案1】:

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,因为它可能会减慢您的机器人并使用大量内存。

【讨论】:

  • 赞成,虽然你也提供了答案和其他有用的东西。
  • 很高兴知道:D
【解决方案2】:

我认为问题与更新不和谐的机器人策略有关。您是否在机器人设置中选中了此复选框? https://discord.com/developers/applications

关于client.users.cache的一些信息: 它是一个缓存集合,因此如果您重新启动机器人,或者机器人以前从未处理过用户消息或操作,则此集合将为空。更好用guild.members.cache.get('')

【讨论】:

  • 是的,你是对的。我早些时候找到了这个解决方案,并准备给出答案,但无论如何,你提供了正确的答案。谢谢。
猜你喜欢
  • 2019-10-31
  • 2019-01-12
  • 2021-05-22
  • 2020-12-26
  • 2018-08-10
  • 2020-10-04
  • 2021-10-18
  • 2021-01-03
相关资源
最近更新 更多