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

discord.py如何获取用户输入中@的成员并向其发送私信

实现方案

你可以直接调用discord.Message对象内置的mentions属性提取被@的成员,修改后的完整代码如下:

def check2(msg):
    return msg.author == ctx.author and msg.channel == ctx.channel

msg = await client.wait_for("message", check=check2, timeout=30)

# 先判断消息是否存在@的成员
if not msg.mentions:
    await ctx.send("未检测到你@任何成员,操作已取消")
else:
    # 提取第一个被@的成员对象,mentions返回按@顺序排列的Member对象列表
    member = msg.mentions[0]
    # 如果你要指定必须@Bob,可增加判断(优先用ID匹配,避免重名问题):
    # if member.id != 123456789: # 替换为Bob的数字用户ID
    #     await ctx.send("你@的不是指定成员,请重新操作")
    #     return
    
    # 建议加异常捕获,避免用户关闭陌生人私信导致报错
    try:
        await member.send("test")
    except discord.Forbidden:
        await ctx.send("无法向该用户发送私信,对方可能关闭了陌生人私信权限")

注意事项

  • 如果你要固定匹配指定成员,优先使用用户ID判断,用户名可能存在重复,用户数字ID是全局唯一的,你可以右键点击用户头像复制ID。
  • 如果出现msg.mentions返回空的问题,需要确认两个配置:
    • 你在Discord开发者门户的机器人设置页开启了Server Members Intent和Message Content Intent权限
    • 初始化client时正确配置了意图参数:
      import discord
      intents = discord.Intents.default()
      intents.members = True
      intents.message_content = True
      client = discord.Client(intents=intents)
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:54:05