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

discord.py开发中如何@提及点击按钮触发工单的用户

discord.py 工单机器人按钮触发用户@提及实现方案

核心获取逻辑

你监听到的button_click交互事件返回的interaction对象,自带触发本次点击的用户属性,不需要额外查询:

  • 要@用户,直接用interaction.user.mention,Discord会自动将其渲染为可点击的提及标签
  • 工单频道名不支持@提及渲染,直接取用户名/昵称即可,用interaction.user.name或interaction.user.display_name

现有代码需要修正的点

  • 权限覆写(overwrites)里你现在写的ctx.author是错误的,这个对象是发送初始工单面板消息的用户,不是点按钮开单的用户,必须替换成interaction.user,否则开单用户看不到自己的工单频道
  • 你写的await interaction.send(content = await interaction.send(embed=Embed), ephemeral=True)存在重复调用send的问题,会导致消息重复发送,直接传embed参数即可
  • 工单频道内的提示Embed里的ctx.author.name也要替换成interaction.user.mention,才能正确@开单用户

修正后代码片段

components = [
    [
        Button(label="Open a ticket", style=2, custom_id="Open", emoji="📩")
    ]
]
await ctx.send(embed=embed, components=components )
while True:
    interaction = await client.wait_for("button_click", check = lambda i: i.component.label.startswith("Open"))
    # 修正权限配置:给点击按钮的用户开放频道权限
    overwrites = {
        member_role: discord.PermissionOverwrite(view_channel=False),
        interaction.user: discord.PermissionOverwrite(view_channel=True),
        guild.me: discord.PermissionOverwrite(view_channel=True),
        ticket_mod_role: discord.PermissionOverwrite(view_channel=True)
    }

    # 私有回复提示工单创建,@触发用户
    ephemeral_embed = discord.Embed(
        title="Ticket Created",
        description=f"{interaction.user.mention} Your ticket is created", 
    )
    # 修正重复send的问题
    await interaction.send(embed=ephemeral_embed, ephemeral=True)
    
    # 创建工单频道,频道名用用户名不用mention
    ticket = await ticket_category.create_text_channel(
        f"🎫│Ticket-{interaction.user.name}", overwrites=overwrites
    )

    # 工单频道内的欢迎Embed,@开单用户
    channel_embed = discord.Embed(
        title="Ticket Created",
        url="",
        description=f"{interaction.user.mention} Wait our staff.",
        color=discord.Color.random()
    )
    # 往新创建的工单频道发送欢迎消息
    await ticket.send(embed=channel_embed)

效果参考

工单创建私有回复提示
工单频道内提及效果

注意:如果你使用的是discord.py 2.0+官方版本,按钮交互的监听事件名是interaction而非button_click,需要对应调整事件监听逻辑,上述写法适配你当前使用的discord-components第三方库版本。

内容的提问来源于stack exchange,提问作者dabafa dibidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:00:56