#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
переменной, определенной в вашем вопросе, я добавил ее к ответу.