Discord.js个人机器人Embed长度过短、cm命令输出异常问题求助
问题原因
你的代码核心问题出在对入参args的处理逻辑错误:
discord.js 中传入命令执行函数的args是将用户输入的消息内容按空格切割后生成的字符串数组,直接将数组传入setDescription时,JS会自动调用Array.toString()方法把数组转为字符串,所有元素之间会被强行插入逗号,同时用户输入的换行、连续空格、段落格式都会完全丢失,最终导致Embed展示的内容远短于实际输入。
另外你的setFooter用法也存在错误:如果config.SERVER_LOGO是Footer图标的链接,你需要将它作为第二个参数传入,否则链接会被直接作为Footer文本展示,占用Embed空间。
修复方案
1. 调整入参拼接逻辑
不要直接传入args数组,将数组拼接为原始完整文本后再传入setDescription,如果需要完全保留用户输入的段落格式,建议直接从message.content中提取命令后的所有原始内容,避免切割导致的格式丢失。
2. 修正Footer用法
按discord.js的规范传入Footer文本和图标参数。
修正后的参考代码
const Discord = require('discord.js'); let config = require('../config.json'); module.exports = { name: 'cm', description: 'Comando', execute(message, args){ // 提取命令前缀+cm命令后的所有原始内容,保留换行、空格等格式 const rawContent = message.content.slice(config.PREFIX.length + this.name.length).trim(); // 可选:添加Embed长度校验,Discord规定Embed Description最大长度为4096字符 const description = rawContent.length > 4096 ? rawContent.slice(0, 4093) + '...' : rawContent; let embed = new Discord.MessageEmbed() .setColor("#47e10c") .setDescription(description) // 第一个参数为Footer显示文本,第二个参数为图标链接,可根据需求调整文本内容 .setFooter('自定义Footer文本', config.SERVER_LOGO) message.channel.send(embed) } }
额外排查点
如果调整后仍有长度异常,可按以下顺序排查:
- 确认你使用的discord.js版本规则和Carl bot一致,不同版本的Embed长度限制、字段规则存在差异
- 检查是否有其他全局中间件、消息处理函数提前截断了用户输入的内容
- 确认你机器人的Discord应用权限没有被限制发送长Embed内容
内容的提问来源于stack exchange,提问作者FuZz3
相关产品推荐
相关产品推荐

