javascript - 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
不和谐服务器中的一些人告诉我的。
有人对我如何进行这项工作有任何可能的想法吗?谢谢
解决方案
多亏了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]})
})
推荐阅读
- c++ - 检查 T 是否是位域?
- c++ - 我的升序排序问题是一个好的解决方案吗?
- excel - 如何使用 VBA 在数据透视表中获取筛选选项值
- vhdl - iCE40 Ultra Plus 5k -- 如何设置 PLL(无需专有 GUI 工具)
- containers - 有没有办法像在 std::unordered_multiset 中一样在 absl::flat_hash_set 中有多个具有相同键的条目
- java - 如何在电报频道中发布来自 Discord 的新闻?
- animation - Tecplot datfile 动画
- python - Pip 自定义根 CA 常用解决方案不起作用
- azure - Azure Purview - ADLSGen2 存储中的 JSON 属性变得混乱
- java - 我可以从 arduino 板接收信号并通过 Java 程序读取它吗?