【问题标题】:Dropdown failed after restart - discord.js重启后下拉失败 - discord.js
【发布时间】:2021-12-06 21:48:06
【问题描述】:

这是我的交互反应角色代码。仅供参考,我使用了新的 node.js,所以它不会因为版本而出错。问题是重新启动我的机器人后下拉失败。我的代码中的“秘密”是角色 ID,所以请忽略它。 这是我的代码:

client.on("message", async message => {
  if (message.content == prefix + "rr") {
  let option1 = new MessageMenuOption()
  .setLabel("Black Charcoal")
  .setValue("Option 1")
  .setDefault()
  .setEmoji("????")
        
  let option2 = new MessageMenuOption()
  .setLabel("Love Magenta")
  .setValue("Option 2")
  .setDefault()
  .setEmoji("❤️")

  let selection = new MessageMenu()
  .setID("Selection")
  .setMaxValues(1)
  .setMinValues(0)
  .setPlaceholder("Select Role")
  .addOption(option1)
  .addOption(option2)

  let embed = new Discord.MessageEmbed()
  .setColor("0x00a6ff")
  .setTitle("VIP Colour Role")
  .setDescription(`<@&secret>\n<@&secret>\n<@&secret>\n<@&secret>\n<@&secret>`)

  let menumsg = await message.channel.send(embed, selection)

const role1 = message.guild.roles.cache.find(r => r.id === "secret")
const role2 = message.guild.roles.cache.find(r => r.id === "secret")

  async function menuselection(menu) {
    switch(menu.values[0]) {
      case "Option 1": 
      if(message.member.roles.cache.has("secret")){
        await message.member.roles.add(role1)
        await message.member.roles.remove([role2])
        await menu.reply.send("Claimed Black Charcoal!", true)}
      break;
      case "Option 2":
      if(message.member.roles.cache.has("secret")){
        await message.member.roles.add(role2)
        await message.member.roles.remove([role1])
        menu.reply.send("Claimed Love Magenta!", true)}
      break;
    }
  }

  client.on("clickMenu", (menu) => {
    if(menu.message.id == menumsg.id) {
      if(menu.clicker.user.id == message.author.id) menuselection(menu)
      else menu.reply.send(":x: you are not allowed to pick something", true)
    }
  })
  }
})

【问题讨论】:

  • clickMenu 不是事件
  • 我的代码运行成功,但在我重新启动机器人后,交互不会检测到旧消息
  • 重启bot后不会再搜索之前发送的所有消息是正常的
  • 啊,我明白了,但我认为我们可以获取交互信息。但是不知道如何获取它。

标签: node.js discord discord.js interaction


【解决方案1】:

您似乎正在使用现已归档的 discord-buttons 库。通过它的source code,看起来它除了机器人的内存之外,没有存储有关哪些消息具有菜单的信息。当您重新启动机器人时,该信息会丢失,并且您的机器人会停止查看菜单点击。

要在重新启动后使其继续工作,您必须将此类信息存储在机器人外部的某个位置,例如文件或某个数据库,并在机器人启动时再次启动菜单。

【讨论】:

  • 我还在学习javascript软件,我刚刚开始学习如何制作数据库。我只知道如何将消息保存到数据库,我不知道如何保存诸如选择菜单之类的交互并在重新启动后启动它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2020-05-21
  • 2022-01-15
相关资源
最近更新 更多