首页 > 解决方案 > Discord bot 嵌入消息错误 长度必须为 2048 或更少

问题描述

当我运行用于在 discord bot 中嵌入消息描述的代码时出现错误。

“embed.description:长度必须为 2048 或更少。”

内容取自 API,可能超过 6000。如何根据从 API 获取的数据制作 2 或 3 条具有不同描述的嵌入消息?

标签: javascriptnode.jsdiscord.jsbotsembed

解决方案


虽然该channel#send()方法接受一个选项对象,您可以在其中设置split属性以true在超出字符限制时将内容拆分为多条消息,setDescription但没有它。

这意味着,如果您想将其包含在嵌入的描述中,则需要创建这些“块”并一一发送。

您可以创建自己的方法或... Discord 有一个splitMessage()在内部命名的辅助方法Util,您可以使用该方法将字符串拆分为不超过特定长度的指定字符的多个块。默认情况下,它分割的字符是\n。如果您的大文本没有任何换行符,则需要更新SplitOptions并将 更改char为单个空格(即splitMessage(text, { char: ' ' }))。

要创建块,您可以使用以下内容:

const chunks = Discord.Util.splitMessage(prettyLongText);

它返回一个数组,因此您可以遍历结果。查看下面的工作代码:

const chunks = Discord.Util.splitMessage(texts[args[0]]);
const embed = new Discord.MessageEmbed().setTitle(`Split me!`);

if (chunks.length > 1) {
  chunks.forEach((chunk, i) =>
    message.channel.send(
      embed
        .setDescription(chunk)
        .setFooter(`Part ${i + 1} / ${chunks.length}`),
    ),
  );
} else {
  message.channel.send(embed.setDescription(chunks[0]));
}

在此处输入图像描述

如果您使用的是简单的嵌入对象,则需要像这样更新:

const chunks = Discord.Util.splitMessage(texts[args[0]]);

if (chunks.length > 1) {
  chunks.forEach((chunk, i) =>
    message.channel.send(
      {
        embed: {
          color: 3447003,
          description: chunk,
          footer: {
            text: `Part ${i + 1} / ${chunks.length}`,
          },
          title: 'Split me!',
        },
      }
    ),
  );
} else {
  message.channel.send({
    embed: {
      color: 3447003,
      description: chunks[0],
      title: 'Split me!',
    },
  });
}

推荐阅读