javascript - Discord bot 嵌入消息错误 长度必须为 2048 或更少
问题描述
当我运行用于在 discord bot 中嵌入消息描述的代码时出现错误。
“embed.description:长度必须为 2048 或更少。”
内容取自 API,可能超过 6000。如何根据从 API 获取的数据制作 2 或 3 条具有不同描述的嵌入消息?
解决方案
虽然该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!',
},
});
}
推荐阅读
- javascript - 如何从 lodash 获取对象值?
- c# - 空引用在 C# 中基本上是全零指针吗?
- php - 推荐短代码也显示在我的网站上?如何避免这个问题
- java - 当 http 连接超时时为 TextView 设置文本
- python - 将多个唯一表单关联到 Django 中的唯一对象
- java - 批量阅读 Couchbase 文档
- wordpress - Wordpress 网站 - 选择链接时重定向过多
- jquery - 在 HTML 中标记的 src 路径中升级
- ruby-on-rails - gem paranoia - PG::SyntaxError:错误:“FROM”处或附近的语法错误
- spring-data-jpa - 弹簧数据@ManyToOne @MapsId