Telethon机器人无法接收消息求助:可发送消息但对用户输入无响应
Telethon机器人无法接收消息修复方案
1. 检查必要模块导入
确保代码开头已经导入事件相关模块,缺少导入会导致事件处理器注册静默失败,无法触发消息回调:
from telethon import TelegramClient, events
2. 修正事件对象属性调用
你代码中使用的msg.user_id、msg.username都是错误的属性名,Telethon NewMessage事件对象的正确属性如下:
- 发送者ID:
msg.sender_id - 发送者用户名:
msg.sender.username(调用前需判断sender是否存在,避免匿名消息、频道消息触发空指针异常)
属性调用错误会直接抛出异常,导致处理器终止运行,无任何日志输出。
3. 初始化全局变量users
代码中直接判断if not userID in users,如果全局变量users未提前初始化为集合/字典,会直接抛出NameError,导致处理器崩溃,需要提前初始化:
users = set() # 按照你的业务需求选择对应存储结构
4. 关闭Bot隐私模式(群聊场景适用)
如果是在群聊中测试收消息,Telegram Bot默认开启隐私模式,仅会收到@机器人、/开头的命令消息,关闭方法:
- 找@BotFather发送
/setprivacy - 选择对应机器人,设置为
Disable
5. 调整执行顺序(适配新版Telethon)
新版Telethon中同步调用如果在事件注册前执行异常,可能阻塞后续事件注册,建议调整顺序:先注册事件处理器,再执行发送test消息的操作。
6. 添加异常捕获排查问题
如果修复以上问题后仍无响应,给事件处理器添加异常捕获,打印具体报错信息:
@client.on(events.NewMessage()) async def newMessageHandler(msg): try: global users # 原有处理逻辑 except Exception as e: print(f"处理消息出错:{e}")
内容的提问来源于stack exchange,提问作者KvaksMan play
相关产品推荐
相关产品推荐

