Я пытаюсь заставить своего бота 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));
}
Ожидаемый результат - запустить команду и, если возникнут какие-либо ошибки, уведомить пользователя о них. Спасибо за помощь!
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))
Вы можете получить доступ к сообщению, потому что в 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 и импортировал его. Однако я не вижу какой-либо конкретной причины иметь общую, поскольку вы не выполняете никаких конкретных действий с ней.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.