【问题标题】:How to add buttons to embed pages discord.js如何将按钮添加到嵌入页面 discord.js
【发布时间】:2021-11-23 11:34:10
【问题描述】:

我一直在尝试在我的斜杠命令中添加按钮来制作嵌入页面。我能找到的所有信息要么只是在按钮上(不是按钮+斜杠命令),要么需要在索引文件中完成,而不是通过命令处理程序完成。我尝试向interaction.reply 添加await,但它发送一个错误,它需要在异步函数中。我不完全确定 async/await 是如何工作的,所以如果那是解决我的问题的正确方法,我就不能再做更多的工作了。如何在命令处理的文件中收集按钮交互以编辑按钮单击时的嵌入? This is the guide I used to create the initial command handler。 这是我当前的 info.js 文件。

const { SlashCommandBuilder } = require("@discordjs/builders");
const Discord = require("discord.js");
const info = require("./info.json");

module.exports = {
  data: new SlashCommandBuilder()
    .setName("cinfo")
    .setDescription("Shows AniGame card info")
    .addStringOption(option =>
      option
        .setName("name")
        .setDescription("Enter the name of a card")
        .setRequired(false)
    ),
  async execute(interaction) {
    const msg = interaction.options.getString("name").toLowerCase();

    function cinfo(
      name,
      info,
      stats,
      talent,
      image,
      sr1,
      sr2,
      sr3,
      srt,
      ur1,
      ur2,
      ur3,
      urt
    ) {
      const base = new Discord.MessageEmbed()
        .setTitle(name)
        .setColor(0xffd1dc)
        .setDescription(info)
        .addField("__Card Stats__", stats)
        .addField("Talent", talent)
        .setImage(image);

      const sr = new Discord.MessageEmbed()
        .setTitle(name + " | Level 50")
        .setColor(0xffd1dc)
        .addField("__SR Evo 1__", sr1, true)
        .addField("__SR Evo 2__", sr2, true)
        .addField("__SR Evo 3__", sr3, true)
        .addField("Talent", srt)
        .setImage(image);

      const ur = new Discord.MessageEmbed()
        .setTitle(name + " | Level 60")
        .setColor(0xffd1dc)
        .addField("__UR Evo 1__", ur1, true)
        .addField("__UR Evo 2__", ur2, true)
        .addField("__UR Evo 3__", ur3, true)
        .addField("Talent", urt)
        .setImage(image);

      const row = new Discord.MessageActionRow().addComponents(
        new Discord.MessageButton()
          .setCustomId("backward")
          .setStyle("PRIMARY")
          .setEmoji("⬅️"),

        new Discord.MessageButton()
          .setCustomId("forward")
          .setStyle("PRIMARY")
          .setEmoji("➡️"),

        new Discord.MessageButton()
          .setCustomId("delete")
          .setStyle("DANGER")
          .setEmoji("????️")
      );

      const pages = [base, sr, ur];

      interaction.reply({ embeds: [base], components: [row] });
      // await interaction.editReply()
        
    }
    
    // location 1
    if (
      msg === "itaru hashida" ||
      msg === "itaru" ||
      msg === "hashida"
    ) {
      cinfo(
        info.Itaru_Hashida[0],
        info.Itaru_Hashida[1],
        info.Itaru_Hashida[2],
        info.Itaru_Hashida[3],
        info.Itaru_Hashida[4],
        info.Itaru_Hashida[5],
        info.Itaru_Hashida[6],
        info.Itaru_Hashida[7],
        info.Itaru_Hashida[8],
        info.Itaru_Hashida[9],
        info.Itaru_Hashida[10],
        info.Itaru_Hashida[11],
        info.Itaru_Hashida[12]
      );
    }
  }
};

【问题讨论】:

    标签: javascript node.js discord.js discord-buttons


    【解决方案1】:

    有不止一种方法可以做到这一点。

    1. 您可以使用interactionCreate 事件。无论何时发出事件,您都可以使用<interaction>.isButton() 检查交互是否来自按钮。如果是这样,您可以使用<interaction>.message.edit 方法编辑<interaction>.message
    2. 您也可以使用InteractionCollector (How to use | Example)。

    【讨论】:

    • 我的问题还是一样,我不确定如何在命令处理程序中做到这一点。我看到/读到的唯一内容是仅在 index.js 文件中使用了interactionCreate 事件。
    【解决方案2】:

    以下是我为您的问题找到的一些解决方案:

    解决方案 1:打包

    我创建了一个 package called discord.js-util 来执行各种操作,例如 create embed pages。您可以安装它只需复制源代码here

    解决方案 2:创建自己的

    正如@Qreepex 所说,您可以使用interactionCollector 创建自己的,然后使用customId 检查是否应该后退或前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 2022-01-16
      • 2012-07-16
      • 2013-06-14
      • 1970-01-01
      • 2021-10-07
      • 2011-11-05
      相关资源
      最近更新 更多