使用Telethon库报错AttributeError:coroutine对象无on属性求助
问题原因
你遇到的错误是因为Telethon v1.x版本之后,start()方法改成了异步函数,直接调用它返回的是协程对象,而非TelegramClient实例。你把这个协程对象赋值给bot变量,自然没法调用bot.on()方法,所以抛出了AttributeError。
解决方案
需要通过await获取真正的客户端实例,同时把代码放到异步函数中,用asyncio.run()启动整个程序。修改后的代码如下:
import asyncio from telethon import TelegramClient, events api_id=4563456 api_hash='5453gfgderfth5656uedgh56hdfg' token_tg='234523452:ddfghe4356b345345g34364bn67' async def main(): bot = await TelegramClient('botu2', api_id, api_hash).start(bot_token=token_tg) @bot.on(events.NewMessage(pattern='/start')) async def send_welcome(event): await event.reply('Howdy, how are you doing?') @bot.on(events.NewMessage) async def echo_all(event): await event.reply(event.text) await bot.run_until_disconnected() asyncio.run(main())
关键改动
- 导入
asyncio库,用于运行异步主函数 - 将客户端初始化、事件绑定和运行逻辑全部放入
async def main()函数中 - 使用
await获取start()返回的TelegramClient实例 - 最后用
asyncio.run(main())启动整个异步程序
如果非要兼容旧版同步写法,可以安装Telethon v1.x版本,但更推荐使用上述异步写法适配新版本。
内容的提问来源于stack exchange,提问作者Ivan Z
相关产品推荐
相关产品推荐

