import asyncio
import os
import sys
import re
from telethon import TelegramClient, events
from telethon.sessions import StringSession

sys.stdout.reconfigure(line_buffering=True)

API_ID = int(os.environ.get("API_ID", "0"))
API_HASH = os.environ.get("API_HASH")
SESSION_STRING = os.environ.get("TG_SESSION_STRING")

if not all([API_ID, API_HASH, SESSION_STRING]):
    print("缺少必要的环境变量")
    sys.exit(1)

async def get_recent_verification_messages(client, count=5):
    """获取来自官方通知用户(777000)的最近 count 条消息，并打印完整内容和验证码"""
    print(f"正在获取来自官方通知用户的最近 {count} 条消息...")
    messages = []
    async for msg in client.iter_messages(777000, limit=count, reverse=False):
        messages.append(msg)
    for i, msg in enumerate(reversed(messages), 1):
        text = msg.text
        print(f"--- 第 {i} 条（{msg.date}）---")
        print(f"消息内容: {text}")
        match = re.search(r"\b(\d{5,6})\b", text)
        if match:
            print(f"验证码: {match.group(1)}")
        else:
            print("未找到验证码")
    if not messages:
        print("未找到来自官方通知用户的消息")

async def main():
    print("等待 60 秒，确保旧容器已退出...")
    await asyncio.sleep(60)

    client = TelegramClient(StringSession(SESSION_STRING), API_ID, API_HASH)
    await client.start()
    print("连接成功")

    await get_recent_verification_messages(client, count=5)

    @client.on(events.NewMessage(from_users=777000))
    async def verification_handler(event):
        text = event.message.text
        print(f"收到新官方通知（实时）")
        print(f"消息内容: {text}")
        match = re.search(r"\b(\d{5,6})\b", text)
        if match:
            print(f"验证码: {match.group(1)}")
        else:
            print("未找到验证码")

    print("验证码监听已启动，等待新消息...")
    await client.run_until_disconnected()

if __name__ == "__main__":
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print("停止")
    except Exception as e:
        print(f"主程序异常: {e}")
        import traceback
        traceback.print_exc()

