«Значения полей MessageEmbed могут быть не пустыми» discord.js

#javascript #node.js #npm #discord.js

Вопрос:

В настоящее время я создаю бота discord, используя node.js и я обнаружил проблему, когда я делаю команду «пнуть и запретить». Я пытаюсь убедиться, что дискорд встраивается, и у меня все время возникает эта проблема. Кто-нибудь может мне помочь?

Это код встраивания:

 const kickembed = new Discord.MessageEmbed()
.setTitle('Member Kicked')
.setThumbnail(member.user.displayAvatarURL())
.addField('User Kicked', member)
.addField('Kicked by', message.author)
.addField('Reason', reason)
.setFooter('Time Kicked', client.user.displayAvatarURL())
.setTimestamp()

message.channel.send(kickembed);
 

А вот и Журнал ошибок:

(node:2400) UnhandledPromiseRejectionWarning: RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values may not be empty.

     at Function.normalizeField (D:DATADiscord BotTutorial #2node_modulesdiscord.jssrcstructuresMessageEmbed.js:432:23)        
    at D:DATADiscord BotTutorial #2node_modulesdiscord.jssrcstructuresMessageEmbed.js:452:14
    at Array.map (<anonymous>)
    at Function.normalizeFields (D:DATADiscord BotTutorial #2node_modulesdiscord.jssrcstructuresMessageEmbed.js:451:8)        
    at MessageEmbed.addFields (D:DATADiscord BotTutorial #2node_modulesdiscord.jssrcstructuresMessageEmbed.js:266:42)
    at MessageEmbed.addField (D:DATADiscord BotTutorial #2node_modulesdiscord.jssrcstructuresMessageEmbed.js:257:17)
    at Object.run (D:DATADiscord BotTutorial #2commandskick.js:35:6)
    at Client.<anonymous> (D:DATADiscord BotTutorial #2index.js:51:40)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
ated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:2400) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.```
 

Комментарии:

1. Похоже, что кто-то из ваших пользовательских полей получает пустое значение. Убедитесь, что все ваши вызовы addField передают допустимое значение (должна быть строка, а не пустая). Вот функция, вызываемая normalizeField github.com/discordjs/discord.js/blob/…

2. При следующем задании вопроса людям, пытающимся решить вашу проблему, будет полезнее, если вы укажете, где message и member что определено.

Ответ №1:

Discord.js не позволяет вам использовать пустые значения полей, из вашего кода похоже , что ошибка вызвана message.author тем, что он возвращает user объект, а не строку, вместо этого вы должны использовать message.author.username (который вернет имя пользователя, выполнившего команду). Рекомендуется использовать тернарный оператор, чтобы предотвратить возникновение этой ошибки в будущем.

 const member = message.mentions.members.first();
const kickembed = new Discord.MessageEmbed()
.setTitle('Member Kicked')
.setThumbnail(member.user.displayAvatarURL())
.addField('User Kicked', member.user.username ? member.user.username : 'unknown')
.addField('Kicked by', message.author.username ? message.author.username : 'cannot access username')
.addField('Reason', reason ? reason : 'No reason provided')
.setFooter('Time Kicked', client.user.displayAvatarURL())
.setTimestamp()

message.channel.send(kickembed);
 

Поскольку у вас нет user переменной, определенной в вашем вопросе, я добавил ее к ответу.