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)
- 你在Discord开发者门户的机器人设置页开启了
内容的提问来源于stack exchange,提问作者realbob988
相关产品推荐
相关产品推荐

