簡體   English   中英

node.js/discord.js:類型錯誤:無法讀取 null 的屬性“setPresence”

[英]node.js/discord.js: TypeError: Cannot read property 'setPresence' of null

嘗試一個簡單的測試,但我從這一行得到一個錯誤:client.user.setPresence('game', { type: 'PLAYING' });

VSCode 的日志:

C:\Users\dvmvged\Documents\mao>node . whoa.js
C:\Users\dvmvged\Documents\mao\whoa.js:9
client.user.setPresence('game', { type: 'PLAYING' });
            ^

TypeError: Cannot read property 'setPresence' of null
    at Object.<anonymous> (C:\Users\dvmvged\Documents\mao\whoa.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

哇.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

編輯:只是為了讓你知道,我試過.setActivity 和.setGame。 同樣的錯誤。

我認為這里發生的事情是 Node.js 事件循環的結果。 您調用異步 function, .login() ,並在.login()的響應到達之前立即嘗試client.user.setPresence()

嘗試

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

請參閱節點事件循環

當您呼叫他時, .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 存在的保證。

每當您在節點中使用回調時(不僅僅是在節點中)。 您將 function 作為參數傳遞給某些東西。

該回調可能正在安排function 稍后運行。 在這個特定的案例中,它安排了 function,它有console.log在客戶端“准備好”的未來事件上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM