Так что в основном я делал журнал для редактирования сообщений. Цель функции - записать в канал модлога, если кто-то редактирует сообщение. Также я хотел, чтобы бот писал сообщение до и после обновления.

Вот код:

bot.on('messageUpdate', (oldMessage, newMessage) => {
    var msgup = new Discord.RichEmbed()
    .setTitle(`**MESSAGE EDIT**`)
    .addField(`Old Message:` , `${oldMessage.content}`)
    .addField(`New Message:` , `${newMessage.content}`)
    .addField(`In channel:` , oldMessage.channel)
    .addField(`By` , oldMessage.author)
    .setTimestamp()
    newMessage.channel.send(msgup).catch(console.error);

 });

Ошибка консоли:

C:\Users\grofg\desktop\discordbot\node_modules\discord.js\src\structures\RichEmbed.js:166
    if (!/\S/.test(value)) throw new RangeError('RichEmbed field values may not be empty.');
                           ^

RangeError: RichEmbed field values may not be empty.
    at RichEmbed.addField (C:\Users\grofg\desktop\discordbot\node_modules\discord.js\src\structures\RichEmbed.js:166:34)
    at Client.bot.on (C:\Users\grofg\desktop\discordbot\index.js:455:6)
    at Client.emit (events.js:198:13)
    at MessageUpdateAction.handle (C:\Users\grofg\desktop\discordbot\node_modules\discord.js\src\client\actions\MessageUpdate.js:13:16)
    at MessageUpdateHandler.handle (C:\Users\grofg\desktop\discordbot\node_modules\discord.js\src\client\websocket\packets\handlers\MessageUpdate.js:7:34)
    at WebSocketPacketManager.handle (C:\Users\grofg\desktop\discordbot\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:105:65)
    at WebSocketConnection.onPacket (C:\Users\grofg\desktop\discordbot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
    at WebSocketConnection.onMessage (C:\Users\grofg\desktop\discordbot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
    at WebSocket.onMessage (C:\Users\grofg\desktop\discordbot\node_modules\ws\lib\event-target.js:120:16)
    at WebSocket.emit (events.js:198:13)

Что делает бот:

-Бот выполняет функцию точно так, как планировалось. У меня есть все компоненты (заголовок, 4xFields и временная метка). Во всех полях все написано правильно (старое сообщение, новое сообщение, канал и автор) Но что происходит?

-Хотя бот выполняет свою функцию, он останавливается с ошибкой. Бот аварийно завершает работу и сообщает, что поле пусто, хотя он пишет все и не является пустым.

Что я пробовал?

Во-первых, я попытался удалить содержимое как из oldMessage.content, так и из newMessage.content. В любом случае он делает то же самое.

Во-вторых, я попытался сделать это как .addField('Old Message:' , oldMessage) без '${}'. Также я пытался сделать то же самое, но с .content. Он по-прежнему делает то же самое, он выполняет свою работу, но выдает ошибку и дает сбой.

Из-за ошибки консоли:

at Client.bot.on (C:\Users\grofg\desktop\discordbot\index.js:455:6) Я думал, что это проблема встраивания, потому что строка 455 в точности совпадает с .addField('Old Message:' , '${oldMessage.content}')

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

С уважением, -Люк

1
lawliet 28 Окт 2019 в 00:18

1 ответ

Лучший ответ
bot.on('messageUpdate', (oldMessage, newMessage) => {

if (oldMessage.author.bot) return;
if (oldMessage.content === newMessage.content) return;
if(!oldMessage.partial) {

var msgup = new Discord.RichEmbed()
.setTitle(`**MESSAGE EDIT**`)
.addField(`Old Message:` , `${oldMessage.content.slice(0, 950)}\n\u200B`)
.addField(`New Message:` , `${newMessage.content.slice(0, 950)}\n\u200B`)
.addField(`In channel:` , oldMessage.channel.name)
.addField(`By` , oldMessage.author.tag)
.setTimestamp()
newMessage.channel.send(msgup).catch(console.error);
};    
});

Я считаю, что причиной этого может быть oldMessage. Вот что я сделал, поэтому он не может быть пустым. (Также добавлен .name к вашему message.channel, чтобы имя отображалось правильно, то же самое с oldMessage.author, я добавил .tag) Надеюсь, это помогло.

1
chills 28 Окт 2019 в 22:32