Discord Bot报错AttributeError: 'str' object has no attribute 'loop'如何解决
报错原因
你出现AttributeError: 'str' object has no attribute 'loop'的核心原因是没有正确实例化自定义的Client类:
client = MyClient是将MyClient类本身赋值给了client变量,而没有创建类的实例- 调用未实例化的类的成员方法
run时,你传入的字符串"xyz"会被当成self参数接收,自然会提示字符串没有loop属性
其他代码问题
on_message方法缩进错误,定义在MyClient类外部,不属于类成员,不会被事件回调触发message.author是Discord的User类型对象,不能直接和字符串拼接,需要先转成字符串类型- 新版discord.py要求实例化Client时必须显式传入
intents参数,否则会触发初始化报错 - 冗余导入
from discord import client没有实际作用
修正后代码
import discord # 配置intents,根据你需要的权限开启对应项,这里开启了消息内容接收权限 intents = discord.Intents.default() intents.message_content = True class MyClient(discord.Client) : async def on_ready(self): print("online") # 缩进调整到类内部,作为类成员方法 async def on_message(self, message) : # 把message.author转成字符串再拼接 print(f"{str(message.author)}:{message.content}") # 加括号实例化类,传入intents参数 client = MyClient(intents=intents) # 这里替换成你自己的Bot Token client.run("xyz")
内容的提问来源于stack exchange,提问作者Matthias
相关产品推荐
相关产品推荐

