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

Discord.js机器人消息发送异常:内容变代码、数字转字符串

Discord.js长消息发送问题解决指南

问题描述

用Discord.js开发机器人时,调用message.channel.send发送长消息触发了Discord的2000字符限制;拆分消息后又出现新问题:消息被误识别为代码块,数字被转成字符串格式。原代码(已翻译为中文)如下:

if (message.content === "rules") {
   message.channel.send (`**大家好,
欢迎加入Eagle工作室,这里能满足你自由职业阶段的所有需求
我们拥有经验丰富的卖家、代练和程序员……
我们提供哪些服务呢?
1. 覆盖全领域的程序员服务
2. 图片设计与平面设计服务
3. 游戏代练与等级提升(含小号服务),详情可查看#prices频道
4. 为代发货商及初创网站、店铺等提供营销服务
5. 为自由职业者提供项目资源(收取少量费用)
6. 兼职岗位推荐
===========================================================================================================
首先,你必须遵守以下服务器规则:
1. 互相尊重
2. 禁止刷屏
3. 使用恰当的语言和内容
4. 禁止人身攻击或人肉搜索
5. 遵守Discord服务条款
6. 尊重服务器工作人员,无理由请勿@他们
7. 禁止未经授权的广告
8. 禁止NSFW内容,违者立即封禁
9. 禁止发送Discord服务器邀请链接
10. 求职申请中禁止恶意捣乱
===========================================================================================================
接下来是店铺规则:
1. 购买前务必联系服务器中介确认(免费服务)
2. 我们的服务大多由自由职业者提供,若你在交易或价格上与他们产生纠纷,请联系工作人员协调解决
3. 你可以通过创建工单或使用我们在g2g等平台的可信销售页面购买/咨询服务,输入m.links可获取平台链接
4. 确认服务前请务必考虑清楚,我们不提供退款服务
============================================================================================================
以上是服务器通用规则。
各频道的专属规则请查看对应频道说明。
若需要帮助,请创建工单,我们会尽快响应。

祝大家玩得开心!**`)

};

问题原因

  1. 原消息长度远超Discord单条消息2000字符的限制,直接发送会失败
  2. 拆分消息时若破坏了Markdown语法结构(比如在加粗标签**中间拆分、或拆分位置导致Discord误判格式),就会出现代码块识别、格式异常的问题

解决方案

方案1:手动拆分消息(格式可控,推荐)

根据原消息的自然分隔点(比如分割线),将长消息拆分为多个长度不超过2000字符的完整片段,确保每个片段的Markdown语法完整:

if (message.content === "rules") {
  // 拆分后的消息片段,每个片段独立且语法完整
  const msgParts = [
    `**大家好,
欢迎加入Eagle工作室,这里能满足你自由职业阶段的所有需求
我们拥有经验丰富的卖家、代练和程序员……
我们提供哪些服务呢?
1. 覆盖全领域的程序员服务
2. 图片设计与平面设计服务
3. 游戏代练与等级提升(含小号服务),详情可查看#prices频道
4. 为代发货商及初创网站、店铺等提供营销服务
5. 为自由职业者提供项目资源(收取少量费用)
6. 兼职岗位推荐**`,
    `**===========================================================================================================
首先,你必须遵守以下服务器规则:
1. 互相尊重
2. 禁止刷屏
3. 使用恰当的语言和内容
4. 禁止人身攻击或人肉搜索
5. 遵守Discord服务条款
6. 尊重服务器工作人员,无理由请勿@他们
7. 禁止未经授权的广告
8. 禁止NSFW内容,违者立即封禁
9. 禁止发送Discord服务器邀请链接
10. 求职申请中禁止恶意捣乱**`,
    `**===========================================================================================================
接下来是店铺规则:
1. 购买前务必联系服务器中介确认(免费服务)
2. 我们的服务大多由自由职业者提供,若你在交易或价格上与他们产生纠纷,请联系工作人员协调解决
3. 你可以通过创建工单或使用我们在g2g等平台的可信销售页面购买/咨询服务,输入m.links可获取平台链接
4. 确认服务前请务必考虑清楚,我们不提供退款服务**`,
    `**============================================================================================================
以上是服务器通用规则。
各频道的专属规则请查看对应频道说明。
若需要帮助,请创建工单,我们会尽快响应。

祝大家玩得开心!**`
  ];

  // 依次发送每个片段,添加短暂延迟避免触发速率限制
  for (const part of msgParts) {
    await message.channel.send(part);
    await new Promise(resolve => setTimeout(resolve, 500));
  }
};

方案2:自动拆分通用函数(适合动态生成的内容)

如果消息内容是动态生成的,可使用通用拆分函数,按2000字符拆分的同时优先保证段落完整,避免破坏Markdown语法:

// 通用长消息拆分函数
function splitLongMessage(content, maxLength = 2000) {
  const parts = [];
  let currentPart = '';
  // 按空行分割段落,优先保证段落完整性
  const paragraphs = content.split('\n\n');

  for (const para of paragraphs) {
    // 若当前段落加入后超过限制,先保存当前片段
    if (currentPart.length + para.length + 2 > maxLength) {
      parts.push(currentPart.trim());
      currentPart = para;
    } else {
      // 否则将段落加入当前片段
      currentPart += (currentPart ? '\n\n' : '') + para;
    }
  }

  // 加入最后一段未保存的内容
  if (currentPart) parts.push(currentPart.trim());
  return parts;
}

// 使用示例
if (message.content === "rules") {
  const fullMessage = `**大家好,
欢迎加入Eagle工作室,这里能满足你自由职业阶段的所有需求
我们拥有经验丰富的卖家、代练和程序员……
我们提供哪些服务呢?
1. 覆盖全领域的程序员服务
2. 图片设计与平面设计服务
3. 游戏代练与等级提升(含小号服务),详情可查看#prices频道
4. 为代发货商及初创网站、店铺等提供营销服务
5. 为自由职业者提供项目资源(收取少量费用)
6. 兼职岗位推荐
===========================================================================================================
首先,你必须遵守以下服务器规则:
1. 互相尊重
2. 禁止刷屏
3. 使用恰当的语言和内容
4. 禁止人身攻击或人肉搜索
5. 遵守Discord服务条款
6. 尊重服务器工作人员,无理由请勿@他们
7. 禁止未经授权的广告
8. 禁止NSFW内容,违者立即封禁
9. 禁止发送Discord服务器邀请链接
10. 求职申请中禁止恶意捣乱
===========================================================================================================
接下来是店铺规则:
1. 购买前务必联系服务器中介确认(免费服务)
2. 我们的服务大多由自由职业者提供,若你在交易或价格上与他们产生纠纷,请联系工作人员协调解决
3. 你可以通过创建工单或使用我们在g2g等平台的可信销售页面购买/咨询服务,输入m.links可获取平台链接
4. 确认服务前请务必考虑清楚,我们不提供退款服务
============================================================================================================
以上是服务器通用规则。
各频道的专属规则请查看对应频道说明。
若需要帮助,请创建工单,我们会尽快响应。

祝大家玩得开心!**`;

  const messageParts = splitLongMessage(fullMessage);
  // 依次发送拆分后的片段
  for (const part of messageParts) {
    await message.channel.send(part);
    await new Promise(resolve => setTimeout(resolve, 500));
  }
};

注意事项

  • 拆分时尽量在段落、分割线等自然位置拆分,避免打断Markdown语法(比如不要在**标签中间拆分)
  • 添加500ms左右的延迟,避免触发Discord的消息发送速率限制
  • 确保每个拆分后的片段Markdown语法完整,比如加粗标签要配对

内容的提问来源于stack exchange,提问作者Punisher_Ku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:17:51