Discord 机器人存在

新手上路,请多包涵

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

这是代码:

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

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

原文由 Yasir 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 339
2 个回答

如果您在这里阅读 客户端 类文档,您可以看到 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(...)

原文由 Oliver 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试在 client.on('ready', () => {}) 部分设置存在:

 client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);

    client.user.setPresence({
        status: 'online',
        activity: {
            name: ".help",
            type: "PLAYING"
        }
    });
});

快速解释:

存在是你正在设置的,它由多个变量组成。

The status can be online , idle , dnd , or invisible . (dnd 是请勿打扰)

这里的另一个变量是 activity 。它是一组两个变量: nametype

name 是机器人正在做的事情。这是您选择的字符串。 type 是另一个可以帮助它显示为的东西。 It can be "PLAYING" , "STREAMING" , "WATCHING" , "LISTENING" , and "CUSTOM_STATUS" .

原文由 GabRio Blu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题