不和谐机器人的存在

时间:2020-09-24 10:25:51

标签: javascript node.js discord discord.js

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

这是代码:

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

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

4 个答案:

答案 0 :(得分:0)

如果您在此处阅读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(...)

答案 1 :(得分:0)

这不是相当的答案,但是太大了,无法发表评论。如果您想在机器人联机时立即设置其状态,则可以通过Discord.Client()构造器本身来定义该机器人的状态。 Client() constructer's options之一是presence

// at the beginning of your code:
const client = new Discord.Client({
 presence: {
  status: 'online',
  activity: {
   name: '.help',
   type: 'PLAYING',
  },
 },
});

答案 2 :(得分:0)

您可以使用.setActivity()函数

client.user.setActivity(".help" {type: "PLAYING"}) //the type can be "PLAYING", "WATCHING", "STREAMING", "LISTENING"

在您的

中使用它
client.on('ready' () => {
  client.user.setActivity(".help" {type: "PLAYING"}) 
})

答案 3 :(得分: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"
        }
    });
});

快速说明:

存在状态是您要设置的,它由多个变量组成。

status可以是onlineidledndinvisible。 (不要打扰)

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

机器人正在做name。这是您选择的字符串。 type是另一回事,可以帮助显示为。可以是"PLAYING""STREAMING""WATCHING""LISTENING""CUSTOM_STATUS"

希望我有帮助!! ???

相关问题