Значения поля Discord.js RichEmbed «пустые», даже если они не являются. messageUpdate - PullRequest
1 голос
/ 28 октября 2019

Так что в основном я делаю журнал для редактирования сообщений. Цель функции - написать в канале 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. Он по-прежнему делает то же самое, выполняет свою работу, но делает ошибку и вылет.

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

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

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

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

1 Ответ

1 голос
/ 28 октября 2019
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) Надеюсь, это помогло.

...