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

Pycord编辑嵌入消息时如何保留选择菜单状态?

解决方法

问题核心是编辑消息时只更新了嵌入消息,未保留原视图组件并设置选中状态。只需在编辑消息时传入更新后的视图,同时将选择菜单的默认选中值设为当前用户选择的选项即可。

修改后的回调函数代码:

async def select_callback(self, select, interaction):
    # 获取原嵌入消息并创建新嵌入
    embed = interaction.message.embeds[0]
    new_embed = discord.Embed(title=embed.title, description=embed.description)

    # 更新对应字段的数值
    for field in embed.fields:
        if field.name == "Yes" and select.values[0] == "Yes":
            new_embed.add_field(name="Yes", value=str(int(field.value) + 1), inline=True)
            await interaction.response.send_message("You voted for `Yes`", ephemeral=True)
        elif field.name == "No" and select.values[0] == "No":
            new_embed.add_field(name="No", value=str(int(field.value) + 1), inline=True)
            await interaction.response.send_message("You voted for `No`", ephemeral=True)
        else:
            new_embed.add_field(name=field.name, value=field.value, inline=field.inline)

    # 获取原视图,设置选择菜单的默认选中状态
    view = interaction.message.view
    # 找到对应的选择菜单组件(可通过custom_id精准匹配)
    for item in view.children:
        if isinstance(item, discord.ui.Select) and item.custom_id == select.custom_id:
            # 设置默认选中值为当前选择的选项
            item.default_values = select.values
            break

    # 同时更新嵌入消息和视图
    await interaction.message.edit(embed=new_embed, view=view)

关键改动点:

  • 保留原消息的view对象,避免选择菜单被重置
  • 定位到对应Select组件,通过default_values绑定用户当前的选择,维持选中状态
  • 编辑消息时同时传入embed和view参数,确保组件和内容同步更新

额外修正:原代码中"ou voted"的拼写错误,改为"You voted"

内容的提问来源于stack exchange,提问作者Cube Gamer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:22:36