You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:12:00