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
相关产品推荐
相关产品推荐

