Telethon的events.NewMessage事件不触发 无法自动回复bot消息问题
问题修复方案
代码存在以下核心问题,逐一修改后即可正常运行:
- 事件监听注册顺序错误:必须先注册事件处理函数,再启动客户端,你当前先执行了
client.start()再写的@client.on监听器,监听器不会生效 from_users参数未正确配置:你代码里的<botname>是占位符,需要替换为发送提示消息的bot的准确用户名(格式为'@对应bot用户名')或数字ID- 正则匹配规则错误:你要匹配的消息包含换行,默认的
.+无法匹配换行符,需要引入re模块开启DOTALL匹配模式 - 异步函数中使用了同步阻塞方法:
time.sleep()会阻塞整个Telethon的事件循环,导致程序无响应,异步场景下必须用asyncio.sleep() - 缺少事件循环保持逻辑:代码执行完初始化步骤后会直接退出,没有进入持续监听消息的状态,需要添加
client.run_until_disconnected()保持运行 - 回复内容未使用自定义输入值:你调用
event.respond()时写死了字符串,没有用到之前input获取到的messaggio和comando变量
修复后完整代码如下:
import asyncio import re from telethon import TelegramClient, events from telethon.errors.rpcerrorlist import PeerFloodError api_id = xxx # 替换为你自己的api_id api_hash = 'xxx' # 替换为你自己的api_hash messaggio = input("inserisci messaggio: ") comando = input("inserisci comando: ") # 初始化客户端 client = TelegramClient('session_name', api_id, api_hash) # 注册事件监听器 @client.on(events.NewMessage( from_users='@替换为发送提示的bot的用户名', # 替换为实际的bot用户名 pattern=re.compile(r'📧 Sei stato inserito in chat con un utente!.+', re.DOTALL) )) async def handler(event): await event.respond(messaggio) await asyncio.sleep(2) # 可根据需求调整为1-2之间的数值 await event.respond(comando) # 启动客户端并保持运行 with client: client.run_until_disconnected()
内容的提问来源于stack exchange,提问作者kekkoilmedikit
相关产品推荐
相关产品推荐

