NodeJS 获取discord.js中不共享同一服务器的用户的头像

de90aj5v  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(182)

我的机器人出了点小问题。为了开发我的机器人,我做了一个新的开发机器人,它与我的正常机器人共享相同的代码,但有自己的令牌。但是,我在开发过程中遇到了一个小问题。
我使用以下代码,来获取某人的头像:

client.users.get(event.user.uid).avatarURL

这在我的正常情况下工作正常,但是,在我的Dev-Bot上,我得到这个错误消息:

Error getting documents TypeError: Cannot read property 'AvatarURL' of undefined

我认为这是由于这样的事实,我的机器人不能访问用户的头像,因为它不共享相同的服务器/公会作为这个用户.
是否有任何我可以使用的变通方法?

lyfkaqu1

lyfkaqu11#

由于Discord.js及其缓存方式,并非所有用户都将被缓存在bot中。虽然它实际上不知道用户的任何信息的可能性很小,但Discord API仍有很大的可能性允许您从中获取信息。
要解决这个问题,在最新的master* 中缓存 *,我们必须使用Client.users,它返回一个UserStore。在UserStore中,我们可以使用一个名为fetch的方法来获取有关用户的信息。
为了在最新的稳定版本中修复这个问题,我们必须使用一个名为Client.fetchUser的方法,它做同样的事情,但返回一个User而不是UserStore。
请注意,这仅适用于使用机器人帐户。下面是它的用法示例:

// Using Discord.js Stable
bot.fetchUser(theUsersID).then(myUser => {
    console.log(myUser.avatarURL); // My user's avatar is here!
});

// Using Discord.js Master
bot.users.fetch(theUsersID).then(myUser => {
    console.log(myUser.avatarURL()); // My user's avatar is here!
});

如果在获取用户时出错(比如DiscordAPI权限错误),这意味着在不知道用户是谁(或与用户共享公会)的情况下,机器人无法获取用户的头像。快乐编码!

相关问题