重启后下拉失败 - discord.js

Posted

技术标签:

【中文标题】重启后下拉失败 - discord.js【英文标题】:Dropdown failed after restart - 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后不会再搜索之前发送的所有消息是正常的 啊,我明白了,但我认为我们可以获取交互信息。但是不知道如何获取它。 【参考方案1】:

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

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

【讨论】:

我还在学习javascript软件,我刚刚开始学习如何制作数据库。我只知道如何将消息保存到数据库,我不知道如何保存诸如选择菜单之类的交互并在重新启动后启动它。

以上是关于重启后下拉失败 - discord.js的主要内容,如果未能解决你的问题,请参考以下文章

修改mysql端口后,重启失败

存储数据恢复案例存储断电后重启失败,虚拟机启动失败的数据恢复

MySql 重启后:#1452 - 无法添加或更新子行:外键约束失败

【zookeeper】服务器重启后zookeeper集群个别节点启动失败的处理办法

Linux下docker配置镜像加速后重启docker服务失败

远程服务器重启后远程 EJB 的 InitialContext.lookup 失败