如何使用Telethon检测Telegram账号是否有新会话被创建?
方案1:监听官方安全通知消息(实时,无额外轮询开销)
你之前拉取777000账号消息拿不到新登录通知的原因是:777000仅负责发送登录验证码、账号状态变更类的核心验证消息,新设备登录的安全预警通知是由另一个官方账号Telegram(部分客户端显示为「Telegram通知」)发送的。
操作步骤:
- 先确保账号的安全通知开关已开启:路径为「设置-隐私和安全-安全通知-新登录通知」,关闭的话官方不会推送对应消息
- 用Telethon监听该官方账号的消息,过滤匹配关键词即可,代码示例:
from telethon import events, TelegramClient api_id = 你的API_ID api_hash = '你的API_HASH' client = TelegramClient('session_name', api_id, api_hash) # 匹配Telegram官方账号的新登录通知 @client.on(events.NewMessage(from_users='Telegram')) async def handler(event): msg_text = event.raw_text if '新设备登录' in msg_text or 'New login' in msg_text: # 触发新登录逻辑,比如告警、下线操作等 print(f"检测到新设备登录:{msg_text}") client.start() client.run_until_disconnected()
方案2:轮询活跃会话列表(稳定可靠,不依赖消息推送)
你提到的GetAuthorizationsRequest()方案是完全可行的,Telegram对这类低频次的查询请求容忍度很高,只要你把轮询间隔设置在1分钟以上,完全不会触发限流或风控,实际使用时设置5-10分钟的查询间隔就足够满足需求。
代码示例:
from telethon import TelegramClient from telethon.tl.functions.account import GetAuthorizationsRequest import time api_id = 你的API_ID api_hash = '你的API_HASH' client = TelegramClient('session_name', api_id, api_hash) async def check_new_login(): old_auth_ids = set() # 初始化先拉取一次现有会话列表 async with client: auths = await client(GetAuthorizationsRequest()) old_auth_ids = {auth.hash for auth in auths.authorizations} while True: async with client: auths = await client(GetAuthorizationsRequest()) current_auth_ids = {auth.hash for auth in auths.authorizations} new_auths = current_auth_ids - old_auth_ids if new_auths: print(f"检测到{len(new_auths)}个新设备登录") # 可以在这里加告警逻辑,也可以调用接口下线未知设备 old_auth_ids = current_auth_ids # 每5分钟轮询一次 time.sleep(300) client.loop.run_until_complete(check_new_login())
内容的提问来源于stack exchange,提问作者SAL
相关产品推荐
相关产品推荐

