【问题标题】:Discord.js embed width is unreliableDiscord.js 嵌入宽度不可靠
【发布时间】:2021-02-24 04:30:42
【问题描述】:

我正在使用 Discord.js 库来创建一个不和谐机器人。每当我向文本通道发送嵌入消息时,它的宽度都会随着不同的数据而变化。

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 文档,但找不到任何东西。

【问题讨论】:

  • 我不认为你可以,discord 嵌入总是占用他们需要的空间。不多。我认为这与移动设备上的不和谐有关。

标签: javascript api discord discord.js


【解决方案1】:

我用来强制宽度的一个技巧:

embed.setFooter("\u3000".repeat(10/*any big number works too*/)+"|")

这段代码基本上设置了很多空格作为页脚,迫使 discord 为其设置宽度。 \u3000 是“IDEOGRAPHIC SPACE”的 unicode,它是一个空格字符。 (你不能使用普通空格,因为 discord 只读取第一个。)

【讨论】:

  • 不起作用。管道符号只出现在我的左下角。
【解决方案2】:

它的发生是因为您使用的代码块很奇怪,因为我也注意到了这一点,但不知道为什么会发生。

如果你想阻止你的线路中断 -

   {
     name: "```Orbital \n revolution```",
     value: res.data.sideralOrbit.toFixed(2) + " days",
     inline: true,
   }

\n 打破了我在其周围使用空格的行,以便在您的代码中更清晰,您可以使用Orbital \nrevolution

【讨论】:

    【解决方案3】:

    另一种可能的方法是在消息中插入一个 1px x 一些较大值的透明图像(您可以从 here 生成一个)。我没有使用过 DiscordJS,但在简单的 webhook 格式中,它会是这样的:

    const embed = { // ...
      image: {
        url: 'https://i.stack.imgur.com/Fzh0w.png'
      }
    }
    

    在开发机器人时,您可以使用Discohook 等免费服务来直观地测试您的消息的外观。

    chan kelvin 建议的解决方法相比,使用此解决方法的好处是:

    1. 您不必担心页脚上的其他文本,例如时间戳。
    2. 如果您不将空格添加到页脚,而是添加到描述本身,那么它也会执行上述操作,但由于高度更高(16px 对 1px + 一些填充),看起来会有些奇怪。
      • 请注意,如果您尝试创建固定宽度的标题/作者姓名,那么该空间也会被超链接(+ 下划线)。

    缺点:在移动客户端上,即使是透明的图像也有轻微的可见性! :/

    PS:

    1. 您需要修改 chan 给出的方法以使用 \u2800(盲文模式空白)而不是表意空格,因为后者现在已被 Discord 丢弃。
    2. 即使您在嵌入中添加了其他图像,也可以使用我的方法。如果设置了 URL,Discord 最多允许每个嵌入添加 4 个图像。

    【讨论】:

      猜你喜欢
      • 2020-12-06
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 2022-01-16
      相关资源
      最近更新 更多