【问题标题】:Discord.js(v13) - Delete a channel with discord buttonDiscord.js(v13) - 使用不和谐按钮删除频道
【发布时间】:2021-12-02 06:44:11
【问题描述】:

所以我制作了一个不和谐的选择菜单票,当我选择该类别时,它会创建一个频道并通过一个按钮发送一条消息。该按钮应该在按下时删除频道,但它似乎不起作用。我想我找到了错误,但我不知道如何解决它。这可能很容易修复,但我被卡住了。

代码:(我认为错误在最后)

 } else if (Discord.MessageButton.customId === 'del') {
 const channel = message.guild.channel
            channel.delete();

const Discord = require("discord.js");
const { MessageSelectMenu, MessageActionRow } = require("discord.js");

module.exports = {

    name: "ticket",
    author: "Falcone",

    run: async(client, message, args) => {

        if (!message.member.permissions.has("ADMINISTRATOR")) return message.reply('You Dont Have the `ADMINISTRATOR` permision');

        message.delete();

        let embed = new Discord.MessageEmbed()
        .setColor("RANDOM")
        .setDescription(`Test`)
        .setThumbnail(message.guild.iconURL({ dynamic: true }))
        .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true }));


        let painel = new MessageActionRow().addComponents( new MessageSelectMenu()
        .setCustomId('menu')
        .setPlaceholder('Test') // Mensagem estampada
        .addOptions([
               {
                    label: 'Support',
                    description: '',
                    emoji: '????‍♂️',
                    value: '1',
               },
               {
                label: 'Test',
                description: '',
                emoji: '⛔',
                value: '2',
               },
               {
                label: 'Test',
                description: '',
                emoji: '????',
                value: '3',
               }
            ])

        );


        message.channel.send({ embeds: [embed], components: [painel] }).then(msg => {


            const filtro = (interaction) => 
            interaction.isSelectMenu()

      
          const coletor = msg.createMessageComponentCollector({
            filtro
          });
      

          coletor.on('collect', async (collected) => {

            let ticket = collected.values[0]
            collected.deferUpdate()



           
        
            if (ticket === "1") {

                const embed = new Discord.MessageEmbed()
                .setTitle('Ticket')
                .setDescription('Hello there, \n The staff will be here as soon as possible mean while tell us about your issue!\nThank You!')
                .setColor('GREEN')
                .setTimestamp()

            const del = new MessageActionRow()
                .addComponents(
                    new Discord.MessageButton()
                    .setCustomId('del')
                    .setLabel('????️ Delete Ticket!')
                    .setStyle('DANGER'),
                );

                message.guild.channels.create(`${collected.user.id}`, {
                    type : 'GUILD_TEXT',
                    permissionOverwrites : [
                        {
                            id : message.guild.id,
                            deny : ['VIEW_CHANNEL']
                        },
                        {
                            id : collected.user.id,
                            allow : ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES']
                        }
                    ]
                }).then(async (msg) => {
        
                    msg.send({ embeds: [embed], components: [del] }).then(msg => msg.pin() );
                
                })
            } else if (Discord.MessageButton.customId === 'del') {

                const channel = message.guild.channel
                channel.delete();
    
            }
 

        })


        });

        

    }
}

【问题讨论】:

  • 错误是什么?
  • 它什么也没说@MrMythical

标签: javascript node.js discord discord.js


【解决方案1】:

MessageButton.customId 不是静态属性。这意味着它必须在一个实例上完成,而不是在类上。您可以尝试以下方法:

const msg = await message.channel.send({
  content: "Which one?",
  components: [
    new Discord.MessageActionRow().addComponents([
      new Discord.MessageButton().setLabel("Delete").setStyle("DANGER").setCustomId("DEL"), //delete button
      new Discord.MessageButton().setLabel("Cancel").setStyle("DANGER").setCustomId("CAN") //cancel button
    ])
  ]
})

//Create button collector
const collector = msg.createMessageComponentCollector({
  componentType: "BUTTON",
  filter: (c) => c.member.id === msg.member.id,
  max: 1
})


//Handle button click
collector.on("collect", i => {
  if(i.customId === "CAN") return i.reply("Cancelled")
  if(i.customId === "DEL") i.channel.delete() //or whatever channel you want to delete
})

警告:我没有测试这段代码。有什么问题可以告诉我,我会尽力修改的

【讨论】:

  • 你能在我的代码中编辑你的代码吗,因为我不确定我是否正确添加了它。因为上面写着content must not be an empty string
  • 可以发一下代码吗?可以是图片
  • content: embed切换到embeds: [embed]
  • 好的,我做到了,现在它可以工作了,但是它将嵌入发送到同一个频道并且按钮不起作用
猜你喜欢
  • 1970-01-01
  • 2021-12-24
  • 2021-10-29
  • 1970-01-01
  • 2021-10-12
  • 2022-01-22
  • 2021-07-31
  • 2021-02-27
  • 1970-01-01
相关资源
最近更新 更多