如何用Discord Bot打印频道在线成员列表?报错求助
问题解决
你的代码存在两个关键错误,加上一个需要确认的配置点,修正后即可正常筛选在线成员:
错误1:属性名大小写错误
Python是大小写敏感语言,Member对象的状态属性是小写的status,而非大写的Status——这就是报错“Member has no attribute Status”的直接原因。
错误2:状态枚举引用错误
Status枚举直接归属discord模块,并非discord.client的子属性,因此应该用discord.Status.online,而不是discord.client.Status.online。
额外确认:确保成员意图正确启用
虽然你提到已开启全部特权网关意图,但需确保代码里显式启用了成员意图:
intents = discord.Intents.default() intents.members = True client = discord.Client(intents=intents)
同时要在Discord开发者后台的机器人页面,确认“服务器成员特权意图”已处于开启状态。
修正后的完整代码片段
linkchannel = int(message.channel.topic) channel = client.get_channel(linkchannel) members = channel.members names = [] for member in members: if member.status == discord.Status.online: names.append(member.name) print(names) # 转成换行分隔的字符串发送,比直接发列表更美观 await message.channel.send("\n".join(names) if names else "当前没有在线成员")
内容的提问来源于stack exchange,提问作者ELBR
相关产品推荐
相关产品推荐

