首页 > 解决方案 > Discord.JS - 多按钮更新

问题描述

我嵌入了 5 个默认为绿色的按钮,单击一个按钮应将其变为红色,就像打开和关闭开关一样。

我的问题是如何更改一种按钮样式,同时将其保持在同一行中。

这是我在下面创建的按钮行,

const roleSelectionRow = new Discord.MessageActionRow()
        .addComponents(
            new Discord.MessageButton()
                .setCustomId('rustUpdates')
                .setLabel('Rust')
                .setStyle('SUCCESS'),
            new Discord.MessageButton()
                .setCustomId('gmodUpdates')
                .setLabel('Garrys Mod')
                .setStyle('SUCCESS'),
            new Discord.MessageButton()
                .setCustomId('minecraftUpdates')
                .setLabel('Minecraft')
                .setStyle('SUCCESS'),
            new Discord.MessageButton()
                .setCustomId('fivemUpdates')
                .setLabel('FiveM')
                .setStyle('SUCCESS'),
            new Discord.MessageButton()
                .setCustomId('arma3Updates')
                .setLabel('Arma 3')
                .setStyle('SUCCESS')
        );

这是我的interactionCreate活动(请忽略我只是想让它工作的混乱,然后再瘦下来让它变得更好)

        client.on('interactionCreate', async (interaction) => {
        if (!interaction.isButton()) {
            return null
        }

        if (interaction.customId === 'rustUpdates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(Rust.id)) {
                await interaction.member.roles.remove(Rust)
            } else if (!interaction.member.roles.cache.has(Rust.id)) {
                await interaction.member.roles.add(Rust)
            }
        }
        if (interaction.customId === 'gmodUpdates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(GarrysMod.id)) {
                await interaction.member.roles.remove(GarrysMod)
            } else if (!interaction.member.roles.cache.has(GarrysMod.id)) {
                await interaction.member.roles.add(GarrysMod)
            }
        }
        if (interaction.customId === 'minecraftUpdates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(Minecraft.id)) {
                await interaction.member.roles.remove(Minecraft)
            } else if (!interaction.member.roles.cache.has(Minecraft.id)) {
                await interaction.member.roles.add(Minecraft)
            }
        }
        if (interaction.customId === 'fivemUpdates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(FiveM.id)) {
                await interaction.member.roles.remove(FiveM)
            } else if (!interaction.member.roles.cache.has(FiveM.id)) {
                await interaction.member.roles.add(FiveM)
            }
        }
        if (interaction.customId === 'arma3Updates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(Arma3.id)) {
                await interaction.member.roles.remove(Arma3)
            } else if (!interaction.member.roles.cache.has(Arma3.id)) {
                await interaction.member.roles.add(Arma3)
            }
        }
        await interaction.update({components: [roleSelectionRow, serverJoinRow]})
    })

AFAIK 没有像消息或嵌入那样的updating/editing按钮的直接方式,这就是我至少被D.JS不和谐服务器中的一些人告诉我的。

有人对我如何进行这项工作有任何可能的想法吗?谢谢

标签: javascriptdiscorddiscord.js

解决方案


多亏了MrMythical,我能够将其修复为像拨动开关一样工作。请参阅下面的更新代码,以了解其他在类似情况下苦苦挣扎的人。

        client.on('interactionCreate', async (interaction) => {
        if (!interaction.isButton()) {
            return null
        }

        if (interaction.customId === 'rustUpdates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(Rust.id)) {
                serverGameUpdates.components[0].setStyle('SUCCESS')
                await interaction.member.roles.remove(Rust)
            } else if (!interaction.member.roles.cache.has(Rust.id)) {
                serverGameUpdates.components[0].setStyle('DANGER')
                await interaction.member.roles.add(Rust)
            }
        }
        if (interaction.customId === 'gmodUpdates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(GarrysMod.id)) {
                serverGameUpdates.components[1].setStyle('SUCCESS')
                await interaction.member.roles.remove(GarrysMod)
            } else if (!interaction.member.roles.cache.has(GarrysMod.id)) {
                serverGameUpdates.components[1].setStyle('DANGER')
                await interaction.member.roles.add(GarrysMod)
            }
        }
        if (interaction.customId === 'minecraftUpdates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(Minecraft.id)) {
                serverGameUpdates.components[2].setStyle('SUCCESS')
                await interaction.member.roles.remove(Minecraft)
            } else if (!interaction.member.roles.cache.has(Minecraft.id)) {
                serverGameUpdates.components[2].setStyle('DANGER')
                await interaction.member.roles.add(Minecraft)
            }
        }
        if (interaction.customId === 'fivemUpdates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(FiveM.id)) {
                serverGameUpdates.components[3].setStyle('SUCCESS')
                await interaction.member.roles.remove(FiveM)
            } else if (!interaction.member.roles.cache.has(FiveM.id)) {
                serverGameUpdates.components[3].setStyle('DANGER')
                await interaction.member.roles.add(FiveM)
            }
        }
        if (interaction.customId === 'arma3Updates') {
            console.log(interaction.customId.toString())
            if (interaction.member.roles.cache.has(Arma3.id)) {
                serverGameUpdates.components[4].setStyle('SUCCESS')
                await interaction.member.roles.remove(Arma3)
            } else if (!interaction.member.roles.cache.has(Arma3.id)) {
                serverGameUpdates.components[4].setStyle('DANGER')
                await interaction.member.roles.add(Arma3)
            }
        }
        await interaction.update({components: [serverGameUpdates, serverDiscordLinks]})
    })

推荐阅读