node.js / discord.js: TypeError: Невозможно прочитать свойство 'setPresence' из null - PullRequest
0 голосов
/ 20 октября 2019

Попытка простого теста, но я получаю сообщение об ошибке из этой строки: 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

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"
}

*Версия 1018 * NPM: 6.11.3

Версия Node.js: 12.12.0

Версия Discord.js: 11.5.1

РЕДАКТИРОВАТЬ: Просто чтобы вы знали, я попробовал .setActivity и .setGame. та же ошибка.

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

.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 только после того, как клиент готов.

Всякий раз, когда вы используете обратный вызов в узле (не только в узле!), вы передаете функцию в качестве аргумента чему-либо.

Этот обратный вызов может быть планированием этой функции для запуска в более позднее время. В этом конкретном случае он замыкает функцию, которая должна console.log запускаться в будущем событии , когда клиент «готов».

0 голосов
/ 20 октября 2019

Я думаю, что то, что здесь происходит, является следствием цикла событий Node.js. Вы вызываете асинхронную функцию .login() и сразу же пытаетесь client.user.setPresence() до получения ответа от .login().

Попробуйте

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

См. Узловая петля событий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...