You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:36:03