【问题标题】:I have an error making buttons in discord.js我在 discord.js 中制作按钮时出错
【发布时间】:2021-10-07 18:58:34
【问题描述】:

我有一个问题,当我在 discord.js 中做一个按钮时,我总是在控制台中收到错误消息:(node:826) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'defer' of undefined

想法是单击按钮并编辑消息,这很好,但是当我使用“延迟”所以我没有收到错误消息时,结果证明该命令无法正常工作.

 const config = require('../config.json')
 const disbut = require("discord-buttons");

exports.run = async (client, message, args) => {
              let embedRp = new Discord.MessageEmbed()
      .setAuthor('???? Diversão - [1 Comandos]')
      .setColor(config.embedcolor)
      .setDescription("\> Listei todos os meus comandos de diversão!\n\n• \`/ship\`\n\n**ATENÇÃO:** Está com dúvidas sobre alguns comandos? Se sim, use /info <comando> para saber mais sobre o mesmo.");

              let embedE = new Discord.MessageEmbed()
              .setAuthor('???? Economia - [0 Comandos]')
      .setColor(config.embedcolor)
      .setDescription("\> Listei todos os meus comandos de Economia!\n\n• \`/Nenhum\`\n\n**ATENÇÃO:** EEstá com dúvidas sobre alguns comandos? Se sim, use /info <comando> para saber mais sobre o mesmo.");

              let embedC = new Discord.MessageEmbed()
                .setAuthor('???? Moderação - [12 Comandos]')
      .setColor(config.embedcolor)
      .setDescription("\> Listei todos os meus comandos de Moderação!\n\n• \`/lock\`, \`/unlock\`, \`/say\`, \`/embed\`, \`/ban\`, \`kick\`, \`/dm\`, \`/unban\`, \`/anunciar\`, \`/clear\`, \`/promover\`, \`/demotar\`\n\n**ATENÇÃO:** Está com dúvidas sobre alguns comandos? Se sim, use /info <comando> para saber mais sobre o mesmo.");

              let embedf = new Discord.MessageEmbed()
                .setAuthor('???? Diversos - [11 Comandos]')
      .setColor(config.embedcolor)
      .setDescription("\> Listei todos os meus comandos Diversos!!\n\n• \`/invite\`, \`/mcavatar\`, \`/mcbody\`, \`/mcskin\`, \`/botinfo\`, \`/ip\`, \`/mcbust\`, \`/mchead\`, \`/sugestão\`, \`/serverinfo\`, \`/info\`\n\n**ATENÇÃO:** Está com dúvidas sobre alguns comandos? Se sim, use /info <comando> para saber mais sobre o mesmo.");

let icon1 = message.guild.iconURL({ dynamic: true, format: "png", size: 1024 });
    let avatar = message.author.displayAvatarURL({format: 'png'});

let button = new disbut.MessageButton()
  .setStyle('red')
  .setLabel('???? Diversão') 
  .setID('diversao_click')

let button2 = new disbut.MessageButton()
  .setStyle('red')
  .setLabel('???? Economia') 
  .setID('economy_click') 

let button3 = new disbut.MessageButton()
  .setStyle('red')
  .setLabel('???? Moderação') 
  .setID('moderacao_click') 

let button4 = new disbut.MessageButton()
  .setStyle('red')
  .setLabel('???? Diversos') 
  .setID('diversos_click');

let button5 = new disbut.MessageButton()
  .setStyle('red')
  .setLabel('???? Voltar') 
  .setID('home_click');

let row = new disbut.MessageActionRow()
  .addComponents(button, button2, button3, button4, button5);

    let embed = new Discord.MessageEmbed()
      .setAuthor('HaveMC - CATEGORIAS')
      .setColor(config.embedcolor)
      .setDescription("• Todos meus comandos disponiveis estão a baixo!!\n\n????** - Diversão**\n**???? - Economia**\n**???? - Moderação**\n????** - Diversos**\n\n**ATENÇÃO:** Está com dúvidas sobre alguns comandos? Se sim, use /info <comando> para saber mais sobre o mesmo.")
      .setThumbnail(icon1);

     let mybuttonsmsg = await message.channel.send(embed, row)
        const collector = mybuttonsmsg.createButtonCollector((button)=> button.clicker.user.id === message.author.id, {time: 60e3});
        collector.on("collect", (b) => {
            console.log(b.id)
            if(b.id == "diversao_click"){
                b.defer()
                mybuttonsmsg.edit(embedRp, row)
            }
            else if(b.id == "2"){
                mybuttonsmsg.edit("Testing information message", { buttons: [mybutton] })
            }
        })
    }

【问题讨论】:

  • 你包含了大量不相关的代码。至于错误本身......它只是说b 未定义。但这没有任何意义,因为它仅在访问b.defer 时引发错误,尽管之前访问过b.id。你确定你发布了正确的代码吗?尝试包含完整的堆栈跟踪并突出显示错误发生的行

标签: javascript discord.js discord-buttons


【解决方案1】:

所以更新后,你需要写以下内容:

b.reply.defer() 而不是b.defer()Here 是文档的链接。如果有错误,你可以把收集器写成一个稍微不同的事件。代码如下:

const djs = require('discord.js')
const client = new djs.Client()
const disbut = require('discord-buttons')
disbut(client)

client.on('clickButton', async (button) => {
if (button.id === "YourID") {
button.reply.defer()
}
})

要直接通过不和谐按钮获取事件示例,请查看it here

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 2021-10-29
    • 2021-10-13
    • 2019-08-23
    • 1970-01-01
    • 2021-12-30
    • 2017-05-08
    • 1970-01-01
    相关资源
    最近更新 更多