【问题标题】:Discord.js Buttons doesn't work after bot restartsDiscord.js 按钮在机器人重新启动后不起作用
【发布时间】:2022-02-12 08:22:09
【问题描述】:

按钮在执行命令后工作,但在重新启动机器人并按下按钮后,它说 interaction failed

我尝试将 clickButton 事件放在我的事件处理程序中,但它没有工作,因为我得到了很多错误。重启后如何让按钮仍然工作?

const { MessageEmbed, Client } = require('discord.js');
const client = new Client({ fetchAllMembers: true });
const buttons = require('discord-buttons')
buttons(client);
const { MessageMenu, MessageMenuOption } = require('discord-buttons');
client.settings = {
/////////////////////etkinlik rolleri///////////////////////
 menu_role_1: "940239454503837707",//csgo
 menu_role_2: "940239479753543690",//Valorant
 menu_role_3: "940239499705856001",//PUBG
 menu_role_4: "940239524334829658",//Minecraft
 menu_role_5: "940239546803691530",//Among Us
 menu_role_6: "940239566579826771",//Gartic.io
 menu_role_7: "940239590869049374",//League of Legends
 menu_role_8: "940220940569149491",//Risk: Global Domination
 menu_role_9: "940220945568788491",//Tabletop Simulator
/////////////////////etkinlik rolleri///////////////////////

  prefix: "ff",
 };

 /////////////////////////////////////Etkinlik Seçim////////////////////////////////

  client.on("message", async(message) => {
  let args = message.content.trim().split(" ")
  if(args[0] !== client.settings.prefix + "start" /* setup message */) { return false } else {

let option_1 = new MessageMenuOption()
.setLabel("CS:GO")
.setValue("1")
.setDescription("Bu rolü almak için lütfen tıklayın.")
.setDefault()
.setEmoji("893176523840974848") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz

let option_2 = new MessageMenuOption()
.setLabel("Valorant")
.setValue("2")
.setDescription("Bu rolü almak için lütfen tıklayın.")
.setDefault()
.setEmoji("893177016327757824") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz
    
let option_3 = new MessageMenuOption()
.setLabel("PUBG")
.setValue("3")
.setDescription("Bu rolü almak için lütfen tıklayın.")
.setDefault()
.setEmoji("893191194966884433") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz

let option_4 = new MessageMenuOption()
  .setLabel("Minecraft")
  .setValue("4")
  .setDescription("Bu rolü almak için lütfen tıklayın.")
  .setDefault()
  .setEmoji("893177569485148200") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz
let option_5 = new MessageMenuOption()
.setLabel("Among Us")
.setValue("5")
.setDescription("Bu rolü almak için lütfen tıklayın.")
.setDefault()
.setEmoji("893193544741814322") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz

let option_6 = new MessageMenuOption()
  .setLabel("Gartic.io")
  .setValue("6")
  .setDescription("Bu rolü almak için lütfen tıklayın.")
  .setDefault()
  .setEmoji("893191664313724999") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz
    
let option_7 = new MessageMenuOption()
.setLabel("League of Legends")
.setValue("7")
.setDescription("Bu rolü almak için lütfen tıklayın.")
.setDefault()
.setEmoji("893188467352281088") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz

let option_8 = new MessageMenuOption()
  .setLabel("Risk: Global Domination")
  .setValue("8")
  .setDescription("Bu rolü almak için lütfen tıklayın.")
  .setDefault()
  .setEmoji("940220653452267550") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz

    let option_9 = new MessageMenuOption()
  .setLabel("Tabletop Simulator")
  .setValue("9")
  .setDescription("Bu rolü almak için lütfen tıklayın.")
  .setDefault()
  .setEmoji("940220548741492756") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz
    
  let option_55 = new MessageMenuOption()
  .setLabel("Rol İstemiyorum")
  .setValue("55")
  .setDescription("Aldığınız tüm rolleri kaldırmak için tıkla.")
  .setDefault()
  .setEmoji("????️") //  emoji ekleyiniz burçların yanına yaptığım gibi id olarak giriniz

let selection = new MessageMenu()
.setID("selector")

.setPlaceholder("Oyun rolleri seçmek için tıklayınız.")
.addOption(option_1)
.addOption(option_2)
    .addOption(option_3)
.addOption(option_4)
    .addOption(option_5)
.addOption(option_6)
    .addOption(option_7)
.addOption(option_8)
    .addOption(option_9)
.addOption(option_55)


var embed = new MessageEmbed()
.setColor("#ff4494")
.setTitle(":strawberry: Nympea Oyun Rolleri :strawberry:")
.setDescription("Aşağıdaki menüye tıklayarak dilediğin oyunu seçebilirsin. Bu sayede sunucumuz içerisinde gerçekleşen oyun etkinliklerinden haberdar olabilirsin.")
    .setImage(`https://cdn.discordapp.com/attachments/900389530748723270/903031735946739774/07c7170a904eeb3feabbbd783ba62b6b.gif`)
let msg = await message.channel.send(embed, selection)




client.on("clickMenu", async (menu) => {
  if(menu.message.id === msg.id) {
    menuselect(menu)
  }
})
};

 async function menuselect(menu) {
  switch(menu.values[0]) {
  case "1":
      menu.reply.send("**CS:GO** Adlı Oyun Rolü Eklendi!", true)
     await menu.clicker.member.roles.add(client.settings.menu_role_1)
    break;
      
  case "2":
      menu.reply.send("**Valorant** Adlı Oyun Rolü Eklendi!", true)
    await menu.clicker.member.roles.add(client.settings.menu_role_2)
    break;
              case "3":
      menu.reply.send("**PUBG** Adlı Oyun Rolü Eklendi!", true)
     await menu.clicker.member.roles.add(client.settings.menu_role_3)
    break;
      
  case "4":
      menu.reply.send("**Minecraft** Adlı Oyun Rolü Eklendi!", true)
    await menu.clicker.member.roles.add(client.settings.menu_role_4)
    break;
              case "5":
      menu.reply.send("**Among Us** Adlı Oyun Rolü Eklendi!", true)
     await menu.clicker.member.roles.add(client.settings.menu_role_5)
    break;
      
  case "6":
      menu.reply.send("**Gartic.io** Adlı Oyun Rolü Eklendi!", true)
    await menu.clicker.member.roles.add(client.settings.menu_role_6)
    break;
              case "7":
      menu.reply.send("**League of Legends** Adlı Oyun Rolü Eklendi!", true)
     await menu.clicker.member.roles.add(client.settings.menu_role_7)
    break;
      
  case "8":
      menu.reply.send("**Risk: Global Domination** Adlı Oyun Rolü Eklendi!", true)
    await menu.clicker.member.roles.add(client.settings.menu_role_8)
    break;
        case "9":
      menu.reply.send("**Tabletop Simulator** Adlı Oyun Rolü Eklendi!", true)
    await menu.clicker.member.roles.add(client.settings.menu_role_9)
    break;
        

  case "55":
      menu.reply.send("**Seçtiğin tüm oyun rolleri kaldırıldı!**", true)
     await menu.clicker.member.roles.remove(client.settings.menu_role_1)
     await menu.clicker.member.roles.remove(client.settings.menu_role_2)
           await menu.clicker.member.roles.remove(client.settings.menu_role_3)
     await menu.clicker.member.roles.remove(client.settings.menu_role_4)
           await menu.clicker.member.roles.remove(client.settings.menu_role_5)
     await menu.clicker.member.roles.remove(client.settings.menu_role_6)
           await menu.clicker.member.roles.remove(client.settings.menu_role_7)
     await menu.clicker.member.roles.remove(client.settings.menu_role_8)
           await menu.clicker.member.roles.remove(client.settings.menu_role_9)
    
        
       break;
     default:
      
      break;
       }
     }

       });

        /////////////////////////////////////Renk Seçim////////////////////////////////


         client.login(process.env.TOKEN)
         .then(() => console.log("\x1b[34m%s\x1b[1m", "[ Bot ] Discord API verified bot's token!"))
         .catch(err => console.error("\x1b[31m%s\x1b[0m", "[ Bot ] Discord API can't verified bot's token!"))

           client.on("ready", () => {

            });

我尝试了很多方法,但我仍然面临同样的问题。

【问题讨论】:

  • 当您尝试使用 clickButton 事件时,您是否安装了 npm i discord-buttons
  • @19mike95 是的,我试过了

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


【解决方案1】:

这是不可能的,消息组件收集器是和客户端一起被销毁的,所以你重启bot后就无法运行了

【讨论】:

  • 把它想成是给一个带有表情的角色,拜托,即使机器人重启了,角色又被赋予了,我们不能在这建立同样的系统吗?
  • 首先,你不应该再使用不和谐按钮,因为 discord.js 已经内置了对它的支持。用不和谐按钮制作它是行不通的。您可以尝试使用内置 discord.js 按钮并在interactionCreate 事件中验证它们。
  • 我看到您的机器人正在使用 v12,但很快就会中断,请尽快迁移到 v13。如果您需要帮助,请阅读 discordjs 指南
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
相关资源
最近更新 更多