Discord. js - setStatus не вызывается внутри .then - PullRequest
1 голос
/ 26 апреля 2020

В настоящее время я работаю над ботом Discord и запрашиваю статус сервера и пытаюсь установить статус бота в статус сервера (онлайн = онлайн, полный = бездействующий, оффлайн = не беспокоить ).

Я проверял множество вещей. Вызваны setStatus методы , и я проверил это, но статус бота не обновляется. Кроме того, метод setActivity ниже работает каждый раз. res.status и res.playerCount также отображают допустимые значения. Кроме того, установка состояния, например, dnd в верхней части функции, до запроса состояния сервера работает. Это проблема с .then?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Я ценю помощь!

function updatePresence() {
    utils.getServerStatus(config.serverIp, config.serverPort)
        .then(res => {
            if(res.status == 'online') {
                client.user.setStatus('online');
            } else if(res.status == 'full') {
                client.user.setStatus('idle');
            } else {
                client.user.setStatus('dnd');
            }

            client.user.setActivity(res.status == 'offline' ? 'server OFFLINE' : `${res.playerCount} players online`, { type: 'WATCHING' });
        });
}

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Вы можете попробовать использовать .catch(console.error), чтобы посмотреть, что он выводит. Попробуйте это, так как вы должны вызывать catch только один раз:

function updatePresence() {
    utils.getServerStatus(config.serverIp, config.serverPort)
        .then(res => {
            const data = { online: "online", full: "idle" };
            return client.user.setPresence({
                activity: {
                    name: res.status == 'offline' ? 'server OFFLINE' : `${res.playerCount} players online`,
                    type: "WATCHING"
                },
                status: data[res.status] || "dnd"
            })
        }).catch(console.error);;
}
0 голосов
/ 27 апреля 2020

Это JavaScript.

Не используйте двойное уравнение ==, а тройное ===, поэтому ваш код должен выглядеть следующим образом:


function updatePresence() {
    utils.getServerStatus(config.serverIp, config.serverPort)
        .then(res => {
            if(res.status === 'online') {
                client.user.setStatus('online');
            } else if(res.status === 'full') {
                client.user.setStatus('idle');
            } else {
                client.user.setStatus('dnd');
            }

            client.user.setActivity(res.status === 'offline' ? 'server OFFLINE' : `${res.playerCount} players online`, { type: 'WATCHING' });
        });
}
...