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

Discord.js 调用Util.splitMessage()拆分长消息功能异常问题求助

Discord.js splitMessage 代码错误修复

你的代码存在两个明确的可运行错误,同时需要注意版本兼容问题:

  • 语法错误:非法链式赋值
    你写的const chunks = [] = Util.splitMessage(list.toString(), { maxLength: 1000 });属于无效写法。Util.splitMessage本身执行后就会返回拆分完成的字符串数组,不需要额外在中间插入= [],这段代码运行时会直接抛出语法异常。
  • 逻辑错误:forEach 不支持异步等待
    Array.forEach的回调函数即使标记为async,也不会等待内部异步操作执行完成,会导致消息发送顺序错乱,甚至触发Discord的消息发送频率限制。
  • 版本兼容提示
    如果你使用的是Discord.js v14及以上版本,Util.splitMessage方法已经被官方移除,仅v13及更早版本支持该API。

修复后代码(v13及更早版本适用)

const chunks = Util.splitMessage(list.toString(), { maxLength: 1000 });
// 用for...of替代forEach实现异步等待
for (const chunk of chunks) {
  await message.channel.send(chunk);
}

v14及以上版本替代方案

高版本可以自行实现拆分逻辑,示例如下:

// 自定义长消息拆分方法
function splitLongMessage(text, maxLength = 1000) {
  const chunks = [];
  let currentChunk = '';
  text.split('\n').forEach(line => {
    if (currentChunk.length + line.length + 1 > maxLength) {
      chunks.push(currentChunk);
      currentChunk = '';
    }
    currentChunk += currentChunk ? `\n${line}` : line;
  });
  if (currentChunk) chunks.push(currentChunk);
  return chunks;
}

// 调用逻辑
const chunks = splitLongMessage(list.toString(), 1000);
for (const chunk of chunks) {
  await message.channel.send(chunk);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:03