Discord.py机器人执行重启命令报Events对象无get_channel属性错误
错误原因
报错AttributeError: 'Events' object has no attribute 'get_channel'的核心原因是你当前on_ready事件中调用get_channel方法的主体不是discord.py的Bot/Client实例,而是错误指向了你的Events类型的Cog实例,该类没有内置get_channel方法。
解决方案
- 如果你把
on_ready事件写在了Events这个Cog类内部,不要使用全局的client变量,替换为Cog实例绑定的bot属性即可:
修改后的代码示例:
@commands.Cog.listener() async def on_ready(self): changeStatus.start() # 把client.get_channel替换为self.bot.get_channel kvuqqs = self.bot.get_channel(906998823187017728) librar = self.bot.get_channel(906168716197232660) await kvuqqs.send('Айоу! Бот был включен. \nК сожалению, на данный момент обновлений нет. \n`l.хелп`') await librar.send(embed=discord.Embed(title='Бот был включен!', description='Версия бота на данный момент: 2.0.1.', color=random.choice(colors)))
- 如果你是在全局作用域写的
on_ready事件,检查你的自定义重启逻辑,确认没有把Events类的实例错误赋值给原有的全局client变量,保证client始终指向你初始化的discord.Client或者commands.Bot实例。 - 额外优化:添加频道获取成功判断,避免缓存未加载导致的偶发报错,也可以用
fetch_channel主动拉取频道数据:
kvuqqs = self.bot.get_channel(906998823187017728) if not kvuqqs: kvuqqs = await self.bot.fetch_channel(906998823187017728) await kvuqqs.send('消息内容')
内容的提问来源于stack exchange,提问作者Forevor Base
相关产品推荐
相关产品推荐

