【问题标题】:Discord.js button reaction roleDiscord.js 按钮反应作用
【发布时间】:2022-02-02 03:50:54
【问题描述】:

我一直在尝试在我的机器人中扮演反应角色,但我不断收到此错误

interaction.guild.roles.fetch(mustard).then(role => member.roles.add(role)).catch(console.error()) ^ TypeError: Cannot read properties of undefined (reading 'guild')

这是完整的代码:

const { 
  Client, 
  Message,
  MessageEmbed, 
  MessageActionRow, 
  MessageButton, 
  } = require('discord.js');
  const cooldown = new Set();

module.exports = {
  name: "quickroles",
  aliases: ["roles"],
  permissions: ["ADMINISTRATOR"],
  /**
   * @param {Client} client
   * @param {Message} message
   * @param {String[]} args
   */
  run: async (client, message, args, interaction) => {

    if(cooldown.has(message.author.id)) {
        message.reply(`Please wait! You're on a default cooldown of 5 seconds!`)
      } else {

    const row = new MessageActionRow().addComponents(
      new MessageButton()
      .setCustomId("pin")
      .setLabel("Pink")
      .setEmoji('????')
      .setStyle("SECONDARY"),
      new MessageButton()
      .setCustomId("mus")
      .setLabel("Mustard")
      .setEmoji('????')
      .setStyle("SECONDARY"),
      new MessageButton()
      .setCustomId("ski")
      .setLabel("Sky")
      .setEmoji('????')
      .setStyle("SECONDARY")
    )

    let pink = '927403952348221449'
    let mustard = '927403952427921412'
    let sky = '927403952411140137'

    let iuser = message.mentions.users.first() || message.author

    let embed = new MessageEmbed()
    .setTitle(`Color Roles`)
    .setDescription('???? | Pink\n???? | Mustard\n???? | Sky')
    .setURL("https://www.youtube.com/watch?v=rzVhR7ioqL4")
    .setColor('#ffdb58')

    const m = await message.channel.send({ embeds: [embed], components: [row] })

    const filter = (interaction) => {
      if(interaction.user.id === iuser.id) return true;
      return interaction.reply({content: "This isn't for u", ephemeral: true})
    }

    const collector = message.channel.createMessageComponentCollector({
      filter,
      max: 1,
    });

    collector.on("end", (ButtonInteraction) => {
      const id = ButtonInteraction.first().customId;

      let pp = new MessageEmbed()
    .setDescription(`You now have the <@&927403952348221449> role`)
    .setColor('#ffc0cb')

     m.edit(pp)

     let mm = new MessageEmbed()
    .setDescription(`You now have the <@&927403952427921412> role`)
    .setColor('#ffdb58')

     m.edit(mm)

     let ss = new MessageEmbed()
    .setDescription(`You now have the <@&927403952411140137> role`)
    .setColor('#ffdb58')

     m.edit(ss)

      if(id === "pin") {
        interaction.guild.roles.fetch(pink).then(role => member.roles.add(role)).catch(console.error())
        return ButtonInteraction.first().reply({embeds: [pp]}) 
      }else if(id === "mus") {
        interaction.guild.roles.fetch(mustard).then(role => member.roles.add(role)).catch(console.error())
        return ButtonInteraction.first().reply({embeds: [pp]}) 
      }else if(id === "ski") {
        interaction.guild.roles.fetch(sky).then(role => member.roles.add(role)).catch(console.error())
        return ButtonInteraction.first().reply({embeds: [pp]}) 
      }
    })
  } cooldown.add(message.author.id);
 setTimeout(() => {
   cooldown.delete(message.author.id)
 }, 5000)}
 
};

我是编码方面的新手,所以希望您能帮我找出问题并让代码完全正常工作????

【问题讨论】:

  • 错误很明显:Cannot read properties of undefined (reading 'guild')。您正在尝试读取interactionguild 属性,但未定义interaction,因此它没有任何属性。

标签: javascript node.js discord.js


【解决方案1】:

我认为你没有定义“公会”, 尝试代替

const {
    Client, 
    Message,
    MessageEmbed, 
    MessageActionRow, 
    MessageButton, 
} = require('discord.js');

以下内容:

const { 
    Client,
    Guild,
    guild 
    Message,
    MessageEmbed, 
    MessageActionRow, 
    MessageButton, 
} = require('discord.js');

【讨论】:

  • 额外的导入有何不同?
猜你喜欢
  • 2019-08-25
  • 2021-12-10
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
相关资源
最近更新 更多