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

Discord.js中以A开头的角色列表命令内容过长,如何拆分消息?

解决Discord.js角色列表消息长度超限的问题

嘿,我来帮你搞定这个消息长度超出限制的问题!首先先指出你代码里的一个小错误——你写的colors.size应该是roles.size,不然会因为找不到colors变量报错哦。

接下来回到核心问题:Discord的普通消息内容最多只能有2000字符,当A开头的角色太多时,自然会超限。虽然你已经用了split:true,但可以优化拆分逻辑,或者手动拆分来避免角色名被截断,下面给你两种靠谱的解决方案:

方案一:优化自动拆分配置

Discord.js的split选项支持自定义拆分规则,我们可以指定在换行符处拆分,这样就能保证每个角色名都是完整的,不会被拆成两半。修改后的代码如下:

module.exports = { 
  name: 'rolelist', 
  description: 'Sends A List Of Roles Available In The Server', 
  execute(message, args, client) { 
    if (!message.content.startsWith(prefix) || message.author.bot) return; 
    const roles = message.guild.roles.cache.filter(c => c.name.startsWith('A'));
    if (roles.size < 1) { 
      return message.channel.send('There are no roles starting with the letter A'); 
    } 
    // 用带配置的split选项,在换行处拆分消息
    message.channel.send({
      content: roles.map(role => role.name).join('\n'),
      split: {
        char: '\n', // 指定拆分的分隔符为换行
        maxLength: 2000, // 单条消息最大长度(Discord限制)
        prepend: '',
        append: ''
      }
    });
  }, 
};

这里我把roles.array().join( \n)改成了roles.map(role => role.name).join('\n'),这样会直接输出角色名称;如果你想显示可点击的角色标签(比如<@&123456>),可以换成roles.map(role => role.toString()).join('\n')。

方案二:手动拆分角色数组

如果你想更精准控制每条消息的内容数量,可以手动把角色数组分成多组,然后依次发送。这种方法需要把execute函数改成异步(因为要等待每条消息发送完成):

module.exports = { 
  name: 'rolelist', 
  description: 'Sends A List Of Roles Available In The Server', 
  async execute(message, args, client) { 
    if (!message.content.startsWith(prefix) || message.author.bot) return; 
    const roles = message.guild.roles.cache.filter(c => c.name.startsWith('A'));
    if (roles.size < 1) { 
      return message.channel.send('There are no roles starting with the letter A'); 
    } 
    const roleNames = roles.map(role => role.name);
    const chunkSize = 50; // 可根据角色名长度调整,比如角色名很长就设小一点
    // 循环拆分并发送每组角色
    for (let i = 0; i < roleNames.length; i += chunkSize) {
      const chunk = roleNames.slice(i, i + chunkSize);
      await message.channel.send(chunk.join('\n'));
    }
  }, 
};

手动拆分的好处是你可以自由控制每条消息显示多少个角色,避免自动拆分可能出现的不规则分段。

额外建议:用Embed展示(可选)

如果角色数量特别多,还可以用Discord的Embed消息来展示——Embed的描述字段支持最多4096字符,比普通消息容量大一倍。甚至可以用分页Embed(结合按钮或反应)来做更友好的浏览体验,但如果只是解决长度问题,前面两种方法已经足够啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:47:28