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

discord.py开发机器人时报错Client对象无get_member属性如何解决

问题原因解析
  1. discord.Client 实例本身没有get_member方法:成员对象属于特定服务器(Guild),你需要先拿到对应服务器的实例,再调用服务器实例的get_member方法,且该方法一次只能接收1个整数类型的用户ID,不能同时传多个ID。
  2. 你当前获取成员、频道的代码写在全局作用域,会在机器人启动还未完成和Discord服务器连接的时候就执行,就算方法正确也拿不到有效对象,只会返回None。
  3. 你先后定义了两次on_message函数,第一次加了@client.event装饰器的会被第二次未加装饰器的覆盖,最终事件不会正常触发。
  4. get_channel、get_member方法接收的ID必须是整数类型,你传入的字符串ID会导致获取失败。
  5. 新版discord.py需要主动声明并开启权限意图,否则无法正常读取成员、消息内容。
修正后的代码示例
import discord

# 声明权限意图,需要同时在Discord开发者后台的Bot设置页开启对应特权意图
intents = discord.Intents.default()
intents.message_content = True
intents.members = True
client = discord.Client(intents=intents)

# 存储频道、成员对象的全局变量,等机器人登录完成后再赋值
brazil_channels = []
target_members = []
# 替换为你的服务器ID(整数格式)
GUILD_ID = 替换为你的服务器数字ID

@client.event
async def on_ready():
    # 机器人登录完成后再获取资源
    guild = client.get_guild(GUILD_ID)
    # 加载目标频道
    brazil_channels.append(guild.get_channel(817415267256500226))
    brazil_channels.append(guild.get_channel(820528316468559892))
    brazil_channels.append(guild.get_channel(847980697658458113))
    brazil_channels.append(guild.get_channel(867262779139948575))
    # 加载目标成员
    target_members.append(guild.get_member(178326748616720394))
    target_members.append(guild.get_member(156247530563174400))
    target_members.append(guild.get_member(96013123013595136))
    target_members.append(guild.get_member(253307143665614849))
    print(f"机器人已登录:{client.user}")

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith('!timetogroove'):
        # 批量移动所有目标成员到第一个巴西频道
        for member in target_members:
            # 先判断成员是否在语音频道,避免报错
            if member and member.voice:
                await member.move_to(brazil_channels[0])
        await message.channel.send("已移动所有目标成员")

# 替换为你的机器人Token
client.run("你的机器人Token")
后续开发及Stack Overflow发帖建议
  • 发帖时务必标注你使用的discord.py版本,v1.x和v2.x版本语法差异极大,没有版本信息很容易得到无效回答
  • 报错要贴完整的Traceback信息,同时附上对应触发报错的代码段
  • 开发前先了解discord.py的基础对象层级:Client > Guild(服务器) > Member(成员)/Channel(频道),很多方法都需要从对应层级的对象调用
  • 所有Discord的ID(服务器、用户、频道等)都是整数格式,涉及到ID传参时不要加引号转成字符串
  • 测试功能时可以先加必要的空值判断,避免成员不在语音频道、资源未加载完成之类的场景导致报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:27:03