我一定错过了一些东西,因为我相当确定这应该有效,因为我之前在同一个机器人的不同命令中使用过相同的方法......
我有一个连接到 mysql 数据库的机器人。在数据库中存储我正在制作的游戏的比赛信息的表中,我存储了每个玩家的 Discord ID。从表中提取这些 ID,指定我想要检索的用户对象,并尝试使用 .get()
(也尝试将 .find()
与用户名一起使用),两者都会导致“未定义”...我有一种感觉,机器人找不到整个用户集合,因为当我 console.log(client.users)
时,我得到 Collection [Map] {}
所以,看起来是空的?我还输入了 ID 本身而不是变量,但仍然找不到它。所以,我有一种感觉,机器人由于某种原因无法获取用户集合。
在下面的代码中:
playerIDArray = 我在比赛开始时存储的玩家 ID,从 mysql 表中提取它们。以数组格式存储(“玩家1的ID”作为索引0,“玩家2的ID”作为索引1,“玩家3的ID”作为索引2,等等)
playerIndex =playerIDArray 中目标玩家的索引,在以下代码运行之前的较早步骤中找到,我知道它会返回我所期望的内容。
const Discord = require('discord.js');
const client = new Discord.Client();
const mysql = require("mysql2/promise");
...
...
var targetUserID = playerIDArray[playerIndex]
var targetUser = client.users.get(targetUserID)
console.log(targetUser)
每次我运行这个,我都会得到“未定义”,我一生都无法弄清楚为什么......我只是想检索用户组,这样我就可以向该用户发送一条消息,让他们有机会在我修改mysql表并移动卡片之前进行反击,然后需要立即再次更改以恢复刚刚通过计数器卡删除的内容。
我一定是愚蠢的,错过了一些东西,但我不知道现在该尝试什么...提前感谢您的帮助。
最佳答案
您只能在 ready
事件触发后使用 client.users
(和其他 discord.js 集合)。
所以你需要将使用client.users
的代码放入
client.on('ready', () => {/* 代码 */});
ready
将在成功 client.login('token');
后被触发。
关于node.js - Discord 机器人无法通过 ID 获取用户集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57337704/