node.js / discord.js:TypeError:无法读取null的属性'setPresence'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js / discord.js:TypeError:无法读取null的属性'setPresence'相关的知识,希望对你有一定的参考价值。

尝试一个简单的测试,但此行出现错误:client.user.setPresence('game',{type:'PLAYING'});

VSCode的日志:

C:UsersdvmvgedDocumentsmao>node . whoa.js
C:UsersdvmvgedDocumentsmaowhoa.js:9
client.user.setPresence('game', { type: 'PLAYING' });
            ^

TypeError: Cannot read property 'setPresence' of null
    at Object.<anonymous> (C:UsersdvmvgedDocumentsmaowhoa.js:9:13)
←[90m    at Module._compile (internal/modules/cjs/loader.js:956:30)←[39m
←[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)←[39m
←[90m    at Module.load (internal/modules/cjs/loader.js:812:32)←[39m
←[90m    at Function.Module._load (internal/modules/cjs/loader.js:724:14)←[39m
←[90m    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)←[39m
←[90m    at internal/main/run_main_module.js:17:11←[39m

whoa.js

    const Discord = require('discord.js');
    const client = new Discord.Client();

    client.on('ready', () => {
        console.log("Logged in.");
        client.login("token");
    });

    client.user.setPresence('test', { type: 'PLAYING' });

package.json:

{ 
    "name":"test-bot",
    "version":"1.0.0",
    "description":"simple test",
    "main":"whoa.js",
    "dependencies":{ 
        "discord.js":"^11.5.1"
    },
    "devDependencies":{ 

    },
    "scripts":{ 
        "test":"echo "Error: no test specified" && exit 1"
    },
    "author":"no one",
    "license":"ISC"
}

NPM版本:6.11.3

Node.js版本:12.12.0

Discord.js版本:11.5.1

EDIT:为了让您知道,我尝试了.setActivity和.setGame。同样的错误。

答案

我认为这里发生的是Node.js事件循环的结果。您调用异步函数.login(),并在client.user.setPresence()的响应到达之前立即尝试.login()

尝试

  .login("token")
  .then(client.user.setPresence("game", { type: "PLAYING" }));

请参见Node Event Loop

另一答案

.user尚未给您打电话时被填充。我要注释这里发生的顺序。

const Discord = require('discord.js');
const client = new Discord.Client();

// #1
client.on('ready', () => {
    // #3
    console.log("Logged in.");
    client.login("token");
});

// #2
client.user.setPresence('test', { type: 'PLAYING' });

在客户端准备好之后,您只有.user的保证。

[只要您在节点中使用callback(不仅在节点中!),您都将函数作为参数传递给事物。

该回调可能是scheduling该函数在以后运行。在这种特定情况下,它对具有console.log的函数进行排序,使其在客户端“正在准备好”的将来的event上运行。

以上是关于node.js / discord.js:TypeError:无法读取null的属性'setPresence'的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js + Node.js: SyntaxError: Unexpected token ''

如何隐藏 DiscordAPIError (discord.js) (node.js)

Node.js + Discord.js:无法读取未定义的属性“类”

Node.Js 版本 14 抛出 e;不和谐机器人的错误(discord.js)

异步/等待 Discord.js Node.js Javascript JS

从函数中导出数据 [mysql, node.js, discord.js]