В настоящее время я работаю над ботом-нарушителем, и одна из команд, которые я хотел бы реализовать, - это редактирование сообщения, которое бот ранее отправил с помощью команды edit
- я использую discord.js чтобы сделать это и из документации, похоже, мне нужно будет использовать цепочку обещаний, чтобы достичь того, чего я хочу, но я немного запутался в некоторых маленьких кусочках. Мой текущий код выглядит следующим образом:
module.exports = {
name: 'edit',
description: 'Edit one of the bot\'s messages',
args: true, // does the command have arguments?
guildOnly: true, // can this command be used outside of the discord channel?
execute(message, args) {
if (args.length < 2) {
console.log("Insufficient arguments provided");
return;
}
const server = message.guild;
let id = args.shift();
let newMessage = args.join(' ');
let channels = server.channels;
for (let [, channel] of channels) {
if(channel.type === 'text') {
channel.fetchMessage(id)
.then(response => {
return response;
}, _reason => {
console.log("still looking");
})
.then(function (message) {
message.edit(newMessage)
.then(editedMessage => {
console.log(`new message content: ${editedMessage}`);
})
.catch(console.error);
})
}
}
},
};
По сути, мой мыслительный процесс заключается в следующем: команду можно использовать в любом канале для редактирования любых сообщений бота в любом другом канале - чтобы добиться этого, япотребовалось бы перебрать все каналы сервера и проверить соответствующий идентификатор сообщения (как показано выше с помощью цикла for) - здесь я запутался, команда fetchMessage
, замеченная здесь возвращает обещание, но моя главная проблема в том, что если сообщение не в канале, я хочу, чтобы бот продолжал искать, пока не найдет его. Как только это произойдет, я попытаюсь связать другое обещание, чтобы отредактировать сообщение ;в этот момент я отправлю сообщение на дискотеку о том, что процесс успешно завершен - так как он стоит сейчас, мой код в настоящее время выдает ошибку, когда проверяет первый канал и не находит сообщение, возможно, из-за моего условия отклонения в fetchMessage
блок. У меня вопрос: как заставить программу не выдавать ошибку, если она не находит сообщение с первой попытки и если оно находит правильное сообщение, как я могу получить обещание правильно отредактировать его?