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

discord.py开发报'Member' object has no attribute 'members'如何解决?

报错产生原因

on_member_join是Discord机器人框架的成员加入事件,该事件回调的入参是新加入服务器的Member成员实例,你代码里错误地将这个参数命名为guild,并把它当作服务器(Guild)实例使用。
Member类本身没有members属性,当你调用update_channel(guild)并执行len(guild.members)时,本质是在Member实例上访问不存在的属性,就触发了这个AttributeError。
除此之外你的代码还有两处额外的逻辑错误:

  • 普通同步函数update_channel前加了await关键字,只有异步函数才能用await调用
  • 代码中调用的member_count函数没有定义,实际功能和你写的update_channel重复
修复方案
  1. 修正on_member_join事件的参数定义,从成员实例上获取对应的服务器实例
  2. 移除冗余的函数定义和错误的await调用
  3. 初始化机器人时必须开启members成员意图,否则不仅收不到成员加入事件,成员计数也会不准

修复后的参考代码

import discord

# 配置成员意图,必须开启
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)

# 替换为你要修改的频道ID
TARGET_CHANNEL_ID = 1234567890 # 这里替换成你自己的频道ID

@client.event
async def on_member_join(member):
    # 从成员实例获取服务器实例
    guild = member.guild
    # 获取目标频道对象
    target_channel = guild.get_channel(TARGET_CHANNEL_ID)
    if not target_channel:
        return
    # 计算最新成员数并修改频道名
    new_channel_name = f"{len(guild.members)}"
    await target_channel.edit(name=new_channel_name)

# 启动机器人
client.run("你的机器人Token")

提示:如果你的频道名需要加固定前缀,比如「成员数:123」,把new_channel_name改为f"成员数:{len(guild.members)}"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:15:02