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

Вот код:

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)

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

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

Даже если бот выполняет функцию, он останавливается с ошибкой. Бот падает, и он говорит, что поле пусто, хотя оно пишет все и, конечно, не пусто.

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

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

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

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

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

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

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

0
lawliet

1 ответ

bot.on('messageUpdate', (oldMessage, newMessage) => {
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 , я добавил . тег ) Надеюсь, это помогло.

58583449