Discord.js音乐帮助命令Embed无法正确调用Config前缀的问题求解
问题核心原因
你跑代码出异常、嵌入内容显示不对的核心是Discord.js 的 MessageEmbed.addField() 方法调用语法错了,和自定义前缀的注入逻辑本身没关系。
Discord.js 的 addField() 不支持直接塞带name、value属性的对象数组,官方要求这个方法每次接三个独立参数:
- 字段的展示标题
- 字段的实际内容
- 可选的
inline布尔值,控制字段是不是以内联双列形式展示
你现在把两个命令字段全打包成对象,直接塞到同一个addField的参数里,框架根本识别不了参数结构,自然会报错。
修正后的可用代码
把原来单addField塞两个对象的写法,拆成两次独立的addField调用,字符串拼接也优化得更整洁,保证config里存的自定义前缀能正常嵌到每个命令示例前面:
const Discord = require('discord.js'); const config = require('../config/config.json') module.exports = { name: 'musichelp', aliases: ['mhelp'], description: "Shows you all the music commands!", async execute(client, message, args, Discord, cmd) { const musicEmbed = new Discord.MessageEmbed() .setColor('#8c88fc') .setTitle("Music Help") // 播放命令字段 .addField( "Play Command!", `${config.prefix}play **Aliases** = 'p' ***Description*** The play command plays music in a voice channel (You need to be in a vc to be able to use this command!)`, true ) // 离队命令字段 .addField( "Leave Command!", `${config.prefix}leave **Aliases** = 'dc', 'disconnect' The leave command leaves the current voice channel it's in (You need to be in a vc to be able to use this command)`, true ) .setFooter("It's recommended to set the volume of the bot to between 35 - 50!"); await message.reply(musicEmbed); } }
后续适配提示
- 现在的结构里,每个命令示例的前缀都是直接从config取的,等你后续做完整的自定义前缀系统时,只要把这里的
config.prefix替换成读取当前服务器专属前缀的逻辑就行,不用大改嵌入的整体排版 - 两次
addField都传了true作为第三个参数,会保持原来的双列内联布局,不会因为拆分调用打乱你之前设计的展示效果
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

