当前位置: 首页 > 知识库问答 >
问题:

如何使用nodejs中的discord bot获取discord js中的所有非bot用户

徐焱
2023-03-14

我通过引用这个数字海洋链接创建了一个discord机器人
现在我可以使用bot向任何频道发送消息,但我的要求是向该服务器的用户发送dm
为此,我尝试了许多答案,并通过其他链接进行了访问,但所有的解决方案最终都是相同的
我尝试了两种方法来获取公会用户并将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

通过这种方式,它只返回bot名称本身。虽然会员人数是6。

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

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

它给了我未定义的输出。

我的配置,
节点版本:10.16。3
不和谐。js版本:12.5。1.

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

共有2个答案

姬英耀
2023-03-14

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

关于客户端的一些信息。用户。cache:它是一个缓存集合,因此如果重新启动bot,或者bot以前从未处理过用户消息或操作,则此集合将为空。最好使用guild。成员。隐藏物获取(“”)

陶弘业
2023-03-14

Discord最近添加了特权网关意图。因此,要获取所有成员数据,您需要在开发人员门户中启用这些数据。之后,您需要获取所有可用的成员,为此,我们可以使用fetchAllMembers客户端选项,然后我们需要过滤掉bot用户,这样我们就不会向他们发送消息

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()方法过滤掉所有机器人程序,只提供真正的用户。但是,当bot变大时,应该避免使用fetchAllMembers,因为它可能会减慢bot的速度并占用大量内存。

 类似资料:
  • 问题内容: 我一直在到处寻找它,但仍然找不到解决方案:如何从mySQL列中获取所有值并将它们存储在数组中? 例如:表名称:客户列名称:ID,名称行数:5 我想获得此表中所有5个名称的数组。我该怎么做?我正在使用PHP,而我只是想: 然后使用 PHP函数将这些值存储在数组中。 问题答案: 请注意,此答案已过时! 从PHP7开始,mysql扩展不再可用。如果要在PHP7中使用旧的mysql函数,则必须

  • 我用Discord.js编写了一个不和谐机器人,它曾经获得不和谐服务器的所有用户(我只有一个不和谐服务器中的机器人),但现在它只有59个成员。我在服务器上有300个不和谐的用户。

  • 问题内容: 我希望这将是一件简单的事情,但是我找不到任何能够做到这一点的东西。 我只想获取给定文件夹/目录中的所有文件夹/目录。 因此,例如: 我希望得到一个数组: 或者上面的路径,如果那是它的服务方式… 那么已经有什么可以做以上的事情吗? 问题答案: 这是此答案的较短的同步版本,它可以列出当前目录中的所有目录(是否隐藏): 节点10.10.0+的更新 我们可以使用的新选项来跳过额外的通话:

  • 我正在设置一个SQLite到我的不和谐机器人,我想创建一个数据库文件到每个服务器与服务器的名称,但我找不到公会到每个服务器 我有一个类来创建与sql和main的连接,创建连接的方法很好,但我只需要为每个服务器创建一个db文件 这是我的SQLite连接类: 这是我的主要方法 在

  • 问题内容: 我不知道如何传递复选框的选定值。任何帮助或建议对我都会有很大帮助。 到目前为止,这是我的代码,我一直无法传递复选框的值 问题答案: 试试这个。 HTML代码 loadmore.php代码 在loadmore.php中输出 而已。 干杯。

  • 我尝试了下面给出的代码,但每次运行代码时,都会有一些链接添加到missing。我想在一个列表中获取页面中的所有链接,这样我就可以使用切片来访问我想要的任何链接。 有没有办法在不遗漏任何元素的情况下获得所有元素。