如何在不重置组件的前提下修改Discord按钮的emoji表情?
问题结论
你没办法只修改本地对象就同步Discord客户端的按钮显示,但也不需要重新发送整条消息,只要更新原有消息的组件配置即可。
原因说明
你本地修改MessageButton、MessageActionRow的属性,只是变更了内存里的JS对象值,没有主动向Discord服务端发送更新请求,所以客户端看不到任何变化。
正确实现代码
你只需要在发送消息时存储返回的消息实例,修改完按钮属性后调用消息的edit方法更新组件即可:
// 初始化按钮 const row = new MessageActionRow() .addComponents( new MessageButton() .setCustomId('play_pause') .setEmoji('⏸') .setStyle('PRIMARY') ) // 存储发送后返回的消息对象 const sentMsg = await message.channel.send({ components: [row] }); // 修改按钮emoji row.components[0].setEmoji('▶'); // 提交更新请求到Discord,修改原有消息的组件 await sentMsg.edit({ components: [row] });
交互场景下的简化写法
如果是在按钮点击的交互回调中修改按钮,直接用interaction.update方法即可,不需要额外获取消息实例:
client.on('interactionCreate', async interaction => { if (!interaction.isButton() || interaction.customId !== 'play_pause') return; const currentRow = interaction.message.components[0]; // 切换播放/暂停emoji const newEmoji = currentRow.components[0].emoji.name === '⏸' ? '▶' : '⏸'; currentRow.components[0].setEmoji(newEmoji); // 直接更新交互对应的消息 await interaction.update({ components: [currentRow] }); });
内容的提问来源于stack exchange,提问作者Suspense
相关产品推荐
相关产品推荐

