使用interactions.py如何从UserSelectMenu获取选中用户?
你的代码存在两处关键问题:wait_for_component的调用方式错误,以及获取选中用户的逻辑可以更简洁直接。
修正后的完整代码
async def add_booster_pack_to_user(self, ctx: SlashContext, pack_name: str): # 创建用户选择菜单组件 user_menu = UserSelectMenu( custom_id="user_select", placeholder="Select a user", min_values=1, max_values=1, ) # 发送带组件的提示消息 await ctx.send("Select a user to add the booster pack to.", components=user_menu) # 等待用户触发组件交互,传入组件实例匹配 interaction = await self.bot.wait_for_component(component=user_menu) # 方法1:直接通过交互对象的便捷属性获取选中用户 target_user = interaction.selected_users[0] # 方法2:从data中提取用户ID再获取用户对象(备选方案) # user_id = interaction.data["values"][0] # target_user = await self.bot.fetch_user(user_id) # 若为服务器内用户,也可使用 ctx.guild.get_member(user_id) # 后续业务逻辑示例 await interaction.send(f"已为 {target_user.mention} 添加 {pack_name} 礼包", ephemeral=True)
核心说明
wait_for_component的参数不是提示文本,需传入组件实例或组件的custom_id来匹配交互;提示文本要通过ctx.send携带组件一起发送。interaction.selected_users是interactions.py针对用户选择菜单提供的便捷属性,直接返回选中的User对象列表,无需手动处理ID转换。- 若仅需用户ID,可从
interaction.data["values"]获取字符串类型的ID列表,再通过机器人实例或服务器对象获取完整用户信息。
内容的提问来源于stack exchange,提问作者user120265
相关产品推荐
相关产品推荐

