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
相关产品推荐
相关产品推荐

