首页 > 解决方案 > Discord 机器人存在

问题描述

我最近使用 discord.js v12 制作了一个 Discord 机器人,但我无法为该机器人设置存在。

这是代码:

client.user.setPresence({ game: { name: '.help' }, status: 'online' });

错误是:TypeError: Cannot read property 'setPresence' of null

标签: javascriptnode.jsdiscorddiscord.js

解决方案


如果您阅读此处的Client类文档,您可以看到该user属性的类型?ClientUser?没有前面的类型 - 这意味着它可能没有被定义(它是一个可选值)。

如果您访问ClientUser文档,它会显示“代表已登录客户端的 Discord 用户”。

我猜如果客户端还没有完全登录,那么该user属性将是未定义的。先调用client.login(token),这是一个异步函数,然后就可以改变存在了。

这意味着,使用承诺:

client.login(token).then((token) => {
 // client.user is now defined
 client.user.setPresence({
  game: { name: '.help' },
  status: 'online',
 });
});

您可能还想client.user在继续防止崩溃之前查询以任何一种方式定义的。

我怀疑您现有代码不起作用的原因是因为如果您没有在登录函数的回调中设置存在,那么在其余代码运行时您还没有完成登录。以下将导致错误:

client.login(token); // bad - this is async
client.user.setPresence(...)

推荐阅读