DiscordJS 获取用户不正确

Posted

技术标签:

【中文标题】DiscordJS 获取用户不正确【英文标题】:DiscordJS Incorrect fetch user 【发布时间】:2021-03-13 18:48:57 【问题描述】:

编辑 我想我的问题可以归结为discord js有时在获取时会返回错误的用户。

client.users.fetch(args[0]).then(user => message.reply(user.id));

谁是 187548574697914368

277199585372274689

机器人返回了错误的用户。我认为它与一些奇怪的缓存问题有关,但将 force 参数设置为 true 仍然返回错误的用户。

client.users.fetch(args[0], false, true).then(...);

我不明白这个错误来自哪里。有没有办法刷新缓存,所以我可以正确获取用户?

原帖

我的机器人遇到了一个非常奇怪的问题。 有时,我不明白之后发生了什么,但是当有些人使用机器人时,他们可以切换 id。 机器人开始从 message.author.id 读取错误的值,并将一些消息解释为其他人发送的消息。当某人被“窃听”时,他的 id 总是被另一个值误读(UserA.id 将始终被读取为用户 b 的 id)我不知道用户 A 和用户 B 之间的链接是什么(用户 B 的 id 可以有时还可以,而用户A切换到用户B)

client.on('message', message => 
    console.log("Message recieved : <#" + message.channel.id + "> <@" + message.author.id + "> : " + message.content);
    ...
);

Message recieved : #general @UserB : I'm user A

似乎这个函数是错误的来源(我不确定)

async execute(messageReaction, arg) 

    let users = await messageReaction.users.fetch();
    console.log("Looting gift : " + users.map(user => user.username + ' '));
    users.delete(messageReaction.message.client.user.id);

    Doing stuff ....

    await messageReaction.message.reactions.removeAll();
,

似乎机器人在某些时候损坏了缓存数据,并不断从中加载用户 ID(我不知道是否可能) 所以我尝试在函数末尾添加这个:

    messageReaction.message.guild.members.fetch(users.map(user => user.id))
        .catch(err => console.log('Erreur while fetching members : ' + users.map(user => user.id) + ' : \n ' + err ));

    for(user of messageReaction.message.client.inventory.inventory.keys()) 
        messageReaction.message.client.users.fetch(user).catch(err => console.log('Erreur while fetching user : ' + users.id + ' : \n ' + err ));
    

但问题仍然存在,我不明白为什么。到目前为止,我发现的唯一解决方案是注销机器人并重新启动它。它不是很方便,我还能做些什么来理解该错误或将其删除。

【问题讨论】:

【参考方案1】:

您是否偶然将user.id 作为整数存储在您的表中?我遇到了你的帖子,因为我遇到了类似的问题,storing it as a string solved it for me.

【讨论】:

【参考方案2】:

如果您在使用 .fetch() 时遇到问题,请尝试使用 .cache.get()。例如,在您的情况下,您会执行 await client.users.cache.get(args[0]) 之类的操作。

【讨论】:

以上是关于DiscordJS 获取用户不正确的主要内容,如果未能解决你的问题,请参考以下文章

DiscordJS v12 userinfo 命令不起作用

如何在不使用 Discord Invite Api 的情况下让 DiscordJS Selfbot 加入服务器?

如何使用 nodeJS 和 discordJS 更改 Discord 频道名称?

Discord.js v13,@discordjs/voice 播放音乐命令

使用 DiscordJS 的音乐 Discord 机器人无法正常工作

在普通的 discord.js 上安装 discordjs/opus 有错误