我有一个问题,当我在discord.js中做一个按钮时,我总是在控制台得到一个错误:(node:826) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'defer‘of undefined
我们的想法是点击按钮并编辑消息,这非常有效,但当我使用"defer“时,我没有得到错误消息,结果是命令不能正常工作。
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] })
}
})
}发布于 2021-08-04 12:56:10
因此,在更新之后,您需要编写以下内容:
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。
https://stackoverflow.com/questions/68621315
复制相似问题