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重复
修复方案
- 修正
on_member_join事件的参数定义,从成员实例上获取对应的服务器实例 - 移除冗余的函数定义和错误的
await调用 - 初始化机器人时必须开启
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
相关产品推荐
相关产品推荐

