为什么我的下拉列表总是失败? Discord.js

Why do mydropdown keep failling? Discord.js

这是我的控制台显示的内容: UnhandledPromiseRejectionWarning: ReferenceError: 未定义客户端 在 Object.execute (/home/runner/Bot/commands/rr1.js:99:5) 在 processTicksAndRejections (internal/process/task_queues.js:97:5) (节点:2432)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是在没有 catch 块的情况下在异步函数内部抛出,要么是因为拒绝了一个没有用 .catch() 处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1) (节点:2432)[DEP0018] DeprecationWarning:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。

const Discord = require("discord.js")
const { MessageMenuOption, MessageMenu } = require("discord-buttons")
const { prefix } = require('../config.json')

module.exports = {
  name: 'rr1',
  description: 'send embedded level message',
  async execute(message, args) {
    const option1 = new MessageMenuOption()
      .setLabel("Black Charcoal")
      .setValue("Option 1")
      .setDefault()
      .setEmoji("")     
    const option2 = new MessageMenuOption()
      .setLabel("Love Magenta")
      .setValue("Option 2")
      .setDefault()
      .setEmoji("❤️")
    const selection = new MessageMenu()
      .setID("Selection")
      .setMaxValues(1)
      .setMinValues(0)
      .setPlaceholder("Select Role")
      .addOption(option1)
      .addOption(option2)
    const embed = new Discord.MessageEmbed()
      .setColor("0x00a6ff")
      .setTitle("Colour Role")
      .setDescription(`<@&x>\n<@&x>`)
    const role1 = message.guild.roles.cache.find(r => r.id === "x")
    const role2 = message.guild.roles.cache.find(r => r.id === "x")

    async function menuselection(menu) {
      switch(menu.values[0]) {
        case "Option 1": 
          if(message.member.roles.cache.has("x") || message.member.roles.cache.has("x") || message.member.roles.cache.has("x")){
            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("x") || message.member.roles.cache.has("782356910782677003") || message.member.roles.cache.has("780476718820884581")){
            await message.member.roles.add(role2)
            await message.member.roles.remove([role1])
            await menu.reply.send("Claimed Love Magenta!", true)}
        break;
      }
    }
    let menumsg = await message.channel.send(embed, selection)
    client.on("clickMenu", (menu) => {
      if(menu.message.id == menumsg.id) {
        if(menu.clicker.user.id == message.author.id) menuselection(menu)
        else menu.reply.send("You are not allowed to pick!", true)
      }
    })
  }
}

Main.js

client.on('message', async (message, guild) => {
  if (!message.content.startsWith(prefix) || message.author.bot) return;
  const args = message.content.slice(prefix.length).split(/ +/);
  const command = args.shift().toLowerCase();

    switch (message.content) {
      case (prefix + "rr1"):
        client.commands.get("rr1").execute(message, args);
      break;
    }
});

这条线

        client.commands.get("rr1").execute(message, args);

你只给出了 message 变量和 args 数组,而不是 client 所以你有两个选择。

要么在你的执行函数中包含 client

        client.commands.get("rr1").execute(message, args, client);

或者不包含 client,只需将命令文件中的每个 client 替换为 message.client

    message.client.on("clickMenu", (menu) => {

如果我是你,我会选择第一个,但这取决于你