Я пытаюсь заставить своего бота Discord отвечать пользователю, сообщая ему, что произошла ошибка, если она произошла при выполнении команды. Я не уверен, как я должен получить свою переменную сообщения из командного сообщения в моем индексном файле из команды.
Я уже пытался использовать переменную сообщения в функции, которая запускается в моем файле index.js из командного файла, но когда она запускается, она говорит, что «сообщение» не определено. Я подозреваю, что это может быть то место, где я поставил свой .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.info(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));
}
Ожидаемый результат — запустить команду и, если есть какие-либо ошибки, уведомить о них пользователя. Спасибо за помощь!
Он прослушивает сообщение, затем делает HTTP-запрос, а затем отвечает на сообщение его выводом.
в своем улове вы можете просто сделать: message.author.send("There was an error: "+err);
Итак, во-первых, у вас возникла проблема с '}' (в конце ее не должно быть)
Затем простой пример, как поймать:
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.info('starting')
error().catch((err) => console.info('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.info(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()));
Если вы хотите использовать более глобальный подход, я бы создал обработчик ошибок и импортировал его. Однако я не вижу особой причины иметь общий, поскольку вы не выполняете с ним никаких конкретных действий.
Какова форма ввода («команда», которую он выполняет)? Если вы просто хотите напечатать ошибку, просто сделайте
message.channel.send(err)
в частиbot.on
. Но если вам нужно что-то еще, пожалуйста, добавьте детали к вашему вопросу. См. Как спросить и Минимальный пример