You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不重置组件的前提下修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:36:03