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

Я уже пытался использовать переменную message в функции, которая выполняется в моем файле index.js из командного файла, но когда он запускается, он говорит, что «message» не определено. Я подозреваю, что это может быть где я положил .catch(). Вот код, который я использую.

//This is the area in my index that handles errors
bot.on('error', (err, message) => {
  console.error();
  message.reply("error here, possibly a rich presence");
});

//Heres the function with the .catch()
http.request(options, function(res) {
    var body = '';

    res.on('data', function (chunk) {
        body+= chunk;
    });

    res.on('end', function() {
       var jsondata = JSON.parse(body);
       var converteddate = new Date(jsondata.toTimestamp*1000)
       console.log(converteddate)
       var hours = converteddate.getHours();
       var minutes = "0" + converteddate.getMinutes();
       var finishedtime = hours + ':' + minutes.substr(-2);
        message.reply(finishedtime + " EST.")
})
}).end()
.catch(err => bot.emit('error', err, message));
}

Ожидаемый результат - запустить команду и, если возникнут какие-либо ошибки, уведомить пользователя о них. Спасибо за помощь!

0
Sbss1111 27 Май 2019 в 23:15

2 ответа

Лучший ответ

Итак, сначала у вас есть проблема с вашим '}' (есть одна, которая не должна быть здесь в конце)

Тогда простой пример как поймать:

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function error() {
  await sleep(3000); // wait 5 sec for the sake of the example
  throw 'I have a problem';
}
console.log('starting')
error().catch((err) => console.log('The error:',err))

Я не уверен, что .end(), но я думаю, что вам это не нужно

Итак, здесь вы хотите сделать:

http.request(options, function(){
    // do something
    return 'text message'; // what you want to reply
}).catch((err) => err).then((msg) => message.reply(msg))
0
JackRed 29 Май 2019 в 05:29

Вы можете получить доступ к сообщению, потому что в http.request не закрывается должным образом. Убедитесь, что вы запустили линтер и украсили свой код, чтобы легко обнаружить дополнительные или незакрытые разделы в вашем коде.

Что касается ответа пользователю, вы можете просто сделать:

message.author.send("There was an error: "+err);

Я бы попробовал что-то вроде этого:

http.request(options, (res) => {
    let body = '';
    res.on('data', (chunk) => {
        body+= chunk;
    });
    res.on('end', () => {
       const jsondata = JSON.parse(body);
       const converteddate = new Date(jsondata.toTimestamp*1000)
       console.log(converteddate)
       const hours = converteddate.getHours();
       const minutes = "0" + converteddate.getMinutes();
       const finishedtime = hours + ':' + minutes.substr(-2);
        message.reply(finishedtime + " EST.")
    })
}).catch(err => message.author.send("There was an error: "+err.toString()));

Если вы хотите использовать более глобальный подход, я бы создал errorHandler и импортировал его. Однако я не вижу какой-либо конкретной причины иметь общую, поскольку вы не выполняете никаких конкретных действий с ней.

0
Mederic 29 Май 2019 в 07:05