如何在discord.py中通过显示名称获取USERID?
解决Discord.py根据服务器昵称提及目标用户的问题
你可以通过遍历服务器成员、匹配目标用户的服务器专属显示名称来实现,不用依赖用户ID。直接上代码示例:
@bot.command() async def mention(ctx, *, nickname: str): # 遍历当前服务器的所有成员,匹配服务器昵称 target_member = None for member in ctx.guild.members: # 大小写不敏感匹配,降低输入容错门槛 if member.display_name.lower() == nickname.lower(): target_member = member break if target_member: # 直接使用member.mention来@目标用户 await ctx.send(f"找到目标用户:{target_member.mention}") else: await ctx.send(f"未找到服务器显示名称为*{nickname}*的用户")
注意事项
- 确保机器人开启了Server Members Intent,否则可能无法获取到服务器的全部成员列表,导致匹配失败
- 如果服务器内有多个用户的服务器昵称完全一致,上面的代码会返回第一个匹配到的用户,你可以根据需求修改逻辑(比如列出所有匹配结果让用户二次选择)
- 使用
member.display_name才能正确获取用户在当前服务器的专属昵称,而不是全局用户名member.name
内容的提问来源于stack exchange,提问作者Zac Moon
相关产品推荐
相关产品推荐

