求助:解决nextcord中'NoneType'对象无'leave'属性的错误
问题分析与解决
错误原因
- 无效的服务器ID获取逻辑:你调用
client.get_guild("server_id")时,传入的是字符串字面量"server_id"而非实际的服务器ID变量,且get_guild要求接收整数类型的ID,这直接导致server变量为None,调用leave()自然触发AttributeError。 - 冗余的对象获取操作:
on_guild_join事件已经直接传入了guild对象,完全不需要通过client.get_guild重复获取。 - 文件写入模式错误:使用
"w"模式会清空文件原有内容,每次加入服务器都会覆盖之前的ID记录,应该用"a"模式实现追加写入。
修正后的代码
@client.event async def on_guild_join(guild): # 追加写入服务器ID,避免覆盖原有记录 with open('Servers.txt', "a", encoding="utf-8") as f: f.write(f"{guild.id}\n") # 用换行分隔每个ID,方便后续读取 # 直接使用事件传入的guild对象执行离开操作 await guild.leave()
关键说明
- 直接使用
on_guild_join参数中的guild对象,它包含了当前加入服务器的完整信息,调用guild.leave()即可直接离开该服务器。 - 改用
"a"模式写入文件,确保每加入一个服务器,ID都会追加到文件末尾,保留所有历史记录。 - 用
f-string格式化字符串,代码更简洁易读。
内容的提问来源于stack exchange,提问作者Honza Kudláček
相关产品推荐
相关产品推荐

