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

discord.py rewrite 如何通过用户名获取服务器成员对象

Discord机器人获取成员对象失败解决方案

1. 开启必要的网关意图(Intents)

discord.py v2.0+ 版本默认关闭成员、消息内容相关的敏感权限,需要手动开启才能正常获取成员信息、读取消息内容:

代码侧配置:

import discord
from discord.ext import commands

# 声明意图
intents = discord.Intents.default()
intents.members = True # 开启成员列表访问权限
intents.message_content = True # 开启消息内容读取权限

# 初始化客户端时传入意图
client = commands.Bot(command_prefix='自定义前缀', intents=intents)

开发者后台配置:

进入Discord开发者平台的对应应用页,找到「Bot」选项卡,将「Privileged Gateway Intents」下的Server Members Intent、Message Content Intent两个开关全部开启。

2. 修复成员匹配逻辑

message.guild.get_member_named()方法仅支持精确匹配「完整用户名#标签」或者「服务器完整昵称」,如果只拿到用户名的纯文本(不带#后缀)、或者匹配规则需要支持模糊匹配,可以替换为自定义遍历逻辑:

# 替换原有 member = message.guild.get_member_named(b) 代码
target_name = b
member = None
# 遍历服务器所有成员优先匹配服务器昵称,其次匹配用户名
for m in message.guild.members:
    # 精确匹配
    if (m.nick and m.nick == target_name) or m.name == target_name:
        member = m
        break
    # 如果需要模糊匹配,把上面的判断替换为下面的
    # if target_name in (m.nick if m.nick else m.name):
    #     member = m
    #     break

3. 修复代码语法问题

你提供的代码中if messages in message.content:的messages变量未定义,需要先声明这个触发关键词,否则整个逻辑块不会执行,自然无法获取到成员对象。

4. 增加空值兜底逻辑

匹配不到成员时直接调用member.mention会抛出异常,需要增加空值判断:

holder_display = target_name if not member else member.mention
# 构造embed时替换为holder_display即可
embed = makeembed("Dank Island™️'s heist history",f"__**Amount**__ : {a}\n__**Holder**__ : {holder_display}\n__**Robbers**__ : {msg[0]}\n __**Status**__ :  [Success]({link})")

内容的提问来源于stack exchange,提问作者Gaming with Akashdeep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 19:30:05