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

使用interactions.py如何从UserSelectMenu获取选中用户?

解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:07:01