运行GitHub下载的Telegram自动回复脚本出现coroutine无username属性错误
代码问题说明
核心报错原因
第36行me = await client.get_me().username的写法不符合异步语法规则:client.get_me()是Telethon提供的异步方法,会返回协程对象,必须先await拿到返回的用户实例后,才能访问username属性。原写法的执行优先级是先尝试读取协程对象的username属性,该属性不存在,因此抛出AttributeError。
连带逻辑问题
修改第36行的赋值逻辑后,要对应调整第40行的匹配代码,避免二次报错:
- 如果修改第36行先拿完整用户对象:
me = await client.get_me(),第40行的@"+me.username写法可以保留 - 如果修改第36行直接拿用户名:
me = (await client.get_me()).username,需要把第40行的me.username改成me
冗余代码问题
代码末尾重复调用了client.start(),前面初始化客户端的时候已经执行过一次启动操作,多余的启动调用可以直接删除。
修复后参考代码片段(关键部分)
@client.on(events.NewMessage) async def handle_new_message(event): # 修复后的写法,先await拿到用户对象 me = await client.get_me() from_ = await event.client.get_entity(event.from_id) to_ = await event.client.get_entity(event.message.to_id) # 这里me.username可以正常使用 needToProceed = from_.is_self if debug_mode else not from_.is_self and (event.is_private or re.search("@"+me.username,event.raw_text)) # 后面原有逻辑不变
内容的提问来源于stack exchange,提问作者Ferdi Ansyah
相关产品推荐
相关产品推荐

