我正在使用 Discord.js 库创建一个 Discord 机器人。每当我向文本通道发送嵌入消息时,其宽度会随着不同的数据而不断变化。
const celestialObject = new MessageEmbed()
.setColor("#F0386B")
.setTitle(
res.data.name == res.data.englishName
? res.data.englishName
: `${res.data.englishName} (${res.data.name})`
)
.attachFiles(attachment)
.setThumbnail("attachment://logo.png")
.addFields(
{
name: "```Density```",
value: res.data.density.toFixed(2) + " g/cm^3",
inline: true,
},
{
name: "```Gravity```",
value: res.data.gravity + " m/s^2",
inline: true,
},
{
name: "```Moons```",
value: res.data.moons ? Object.keys(res.data.moons).length : 0,
inline: true,
},
{
name: "```Mass```",
value: `
${res.data.mass.massValue.toFixed(2)}^
${res.data.mass.massExponent} kgs
`,
inline: true,
},
{
name: "```Escape Velocity```",
value: (res.data.escape / 1000).toFixed(1) + " km/s",
inline: true,
},
{
name: "```Orbital revolution```",
value: res.data.sideralOrbit.toFixed(2) + " days",
inline: true,
},
{
name: "```Rotation speed```",
value: (res.data.sideralRotation / 24).toFixed(2) + " days",
inline: true,
},
{
name: "```Radius```",
value: res.data.meanRadius.toFixed(2) + " kms",
inline: true,
}
)
.setTimestamp()
.setFooter(
"Generated by astronomia with Solar System OpenData API",
"https://api.le-systeme-solaire.net/assets/images/logo.png"
);
if (images[args[0]].description) {
celestialObject
.setDescription(`\`\`\` ${images[args[0]].description}\`\`\``)
.setImage(images[args[0]].link);
}
if (res.data.discoveredBy) {
celestialObject.addFields({
name: "```Discovered By```",
value: res.data.discoveredBy,
inline: true,
});
}
if (res.data.discoveryDate) {
celestialObject.addFields({
name: "```Discovered On```",
value: res.data.discoveryDate,
inline: true,
});
}
message.channel.send(celestialObject);
使用此代码我得到以下结果。
如何每次都能获得最大宽度?我查看了discord.js 文档,但找不到任何内容。
另一种可能的方法是在消息中插入 1px x 一些大值透明图像(您可以从here生成一个)。我没有使用过 DiscordJS,但在简单的 webhook 格式中它会是这样的:
const embed = { // ...
image: {
url: 'https://i.sstatic.net/Fzh0w.png'
}
}
在开发机器人时,您可以使用一些免费服务,例如 Discohook 来直观地测试您的消息的外观。
使用此解决方法相对于 chan kelvin 建议的解决方法的好处是:
缺点:在移动客户端上,即使是透明图像也有轻微可见! :/
PS:
\u2800
(盲文图案空白)代替表意空间,因为后者现已被 Discord 丢弃。它的发生是因为你使用了奇怪的代码块,因为我也注意到了这一点,但不确定为什么会发生。
如果你想阻止线路断裂 -
{
name: "```Orbital \n revolution```",
value: res.data.sideralOrbit.toFixed(2) + " days",
inline: true,
}
\n
打破了我在其周围使用空格的行,以便在您的代码中更清晰,您可以使用Orbital \nrevolution
您可以使用空格
和零宽度空格
的组合将页脚填充到固定长度。这种方法会生成比 1px 高度图像更宽的嵌入图像。另一个优点是,如果您使用页脚,此方法不会添加任何不必要的垂直空间:
const MAX_EMBED_WIDTH = 164
const embed = new EmbedBuilder()
.setTitle('Example')
.setFooter({ text: `Your footer text`.padEnd(MAX_EMBED_WIDTH) + '\u200B' });