Discord服务器表情列表命令触发字符超限错误求解决
嘿,我完全懂你碰到的这个麻烦——当服务器里的自定义表情数量一多,把它们全拼在一条消息里发送肯定会触发Discord的2000字符上限。这里有几个实用的修复方案,你可以根据自己的需求来选:
方案1:拆分消息成多个片段发送
最直接的思路就是把表情列表切割成多个不超过2000字符的块,逐个发送。这样既保留了表情的可使用格式,又不会触发超限错误:
// lists all emotes of the current server let emojiRegex = new RegExp('^' + prefix + '((emoji)|(emotes))$', 'gi'); if (emojiRegex.exec(msg)) { const emojiArray = message.guild.emojis.map(e => e.toString()); let currentMessage = ''; for (const emoji of emojiArray) { // 检查添加当前表情后是否会超过字符限制(+1是预留空格的长度) if (currentMessage.length + emoji.length + 1 > 2000) { message.channel.send(currentMessage); currentMessage = emoji; } else { currentMessage += (currentMessage ? ' ' : '') + emoji; } } // 发送最后剩下的表情片段 if (currentMessage) { message.channel.send(currentMessage); } }
方案2:用嵌入消息(Embed)分栏展示
如果觉得拆分多条消息太杂乱,可以用Discord的Embed组件来整理表情,分栏展示的方式既整洁又能高效利用消息空间:
// lists all emotes of the current server let emojiRegex = new RegExp('^' + prefix + '((emoji)|(emotes))$', 'gi'); if (emojiRegex.exec(msg)) { const emojiArray = message.guild.emojis.map(e => e.toString()); const chunks = []; const chunkSize = 50; // 每栏放置的表情数量,可根据实际调整 // 把表情数组分割成多个小片段 for (let i = 0; i < emojiArray.length; i += chunkSize) { chunks.push(emojiArray.slice(i, i + chunkSize).join(' ')); } // 创建嵌入消息 const embed = { title: '服务器表情列表', color: 0x0099ff, fields: chunks.map((chunk, index) => ({ name: `第${index + 1}栏`, value: chunk || '暂无表情', inline: true // 让栏位并排显示,节省空间 })) }; message.channel.send({ embeds: [embed] }); }
方案3:只展示表情名称+图片链接(可选)
如果不需要直接发送可使用的表情格式,也可以只输出表情名称和对应的图片链接,这样字符数会大幅减少:
// lists all emotes of the current server let emojiRegex = new RegExp('^' + prefix + '((emoji)|(emotes))$', 'gi'); if (emojiRegex.exec(msg)) { const emojiInfo = message.guild.emojis.map(e => `${e.name}: ${e.url}`).join('\n'); // 同样做消息拆分避免超限 const messages = []; let current = ''; for (const line of emojiInfo.split('\n')) { if (current.length + line.length + 1 > 2000) { messages.push(current); current = line; } else { current += (current ? '\n' : '') + line; } } if (current) messages.push(current); messages.forEach(msgSegment => message.channel.send(msgSegment)); }
简单解释下:Discord每条消息有2000字符的硬限制,而每个自定义表情的字符串形式(比如<:emojiName:123456789>)大概占20-30个字符,服务器表情数量超过60个左右就会触发超限,所以拆分消息或者用Embed是最常用的解决思路。
内容的提问来源于stack exchange,提问作者Muffinz
相关产品推荐
相关产品推荐

