首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在discord.js中制作按钮时出错

我在discord.js中制作按钮时出错
EN

Stack Overflow用户
提问于 2021-08-02 12:05:33
回答 1查看 1.6K关注 0票数 0

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

我们的想法是点击按钮并编辑消息,这非常有效,但当我使用"defer“时,我没有得到错误消息,结果是命令不能正常工作。

代码语言:javascript
复制
 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] })
            }
        })
    }
EN

回答 1

Stack Overflow用户

发布于 2021-08-04 12:56:10

因此,在更新之后,您需要编写以下内容:

b.reply.defer()而不是b.defer()Here是指向文档的链接。如果出现错误,您可以将收集器编写为事件。代码如下:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68621315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档