| FROM python:3.9-slim |
|
|
| WORKDIR /app |
|
|
| RUN echo "telethon" > requirements.txt && pip install --no-cache-dir -r requirements.txt |
|
|
| RUN echo 'import asyncio\n\ |
| import os\n\ |
| import sys\n\ |
| import re\n\ |
| from telethon import TelegramClient, events\n\ |
| from telethon.sessions import StringSession\n\ |
| \n\ |
| sys.stdout.reconfigure(line_buffering=True)\n\ |
| \n\ |
| API_ID = int(os.environ.get("API_ID", "0"))\n\ |
| API_HASH = os.environ.get("API_HASH")\n\ |
| SESSION_STRING = os.environ.get("TG_SESSION_STRING")\n\ |
| \n\ |
| if not all([API_ID, API_HASH, SESSION_STRING]):\n\ |
| print("缺少必要的环境变量")\n\ |
| sys.exit(1)\n\ |
| \n\ |
| async def get_recent_verification_messages(client, count=5):\n\ |
| """获取来自官方通知用户(777000)的最近 count 条消息,并打印完整内容和验证码"""\n\ |
| print(f"正在获取来自官方通知用户的最近 {count} 条消息...")\n\ |
| messages = []\n\ |
| async for msg in client.iter_messages(777000, limit=count, reverse=False):\n\ |
| messages.append(msg)\n\ |
| # 按时间顺序从旧到新打印\n\ |
| for i, msg in enumerate(reversed(messages), 1):\n\ |
| text = msg.text\n\ |
| print(f"--- 第 {i} 条({msg.date})---")\n\ |
| print(f"消息内容: {text}")\n\ |
| match = re.search(r"\\b(\\d{5,6})\\b", text)\n\ |
| if match:\n\ |
| print(f"验证码: {match.group(1)}")\n\ |
| else:\n\ |
| print("未找到验证码")\n\ |
| if not messages:\n\ |
| print("未找到来自官方通知用户的消息")\n\ |
| \n\ |
| async def main():\n\ |
| # 延迟 60 秒启动,让旧容器完全退出,避免 session 冲突\n\ |
| print("等待 60 秒,确保旧容器已退出...")\n\ |
| await asyncio.sleep(60)\n\ |
| \n\ |
| client = TelegramClient(StringSession(SESSION_STRING), API_ID, API_HASH)\n\ |
| await client.start()\n\ |
| print("连接成功")\n\ |
| \n\ |
| # 启动时获取最近 5 条验证码消息\n\ |
| await get_recent_verification_messages(client, count=5)\n\ |
| \n\ |
| # 添加实时监听验证码(官方通知用户 777000)\n\ |
| @client.on(events.NewMessage(from_users=777000))\n\ |
| async def verification_handler(event):\n\ |
| text = event.message.text\n\ |
| print(f"收到新官方通知(实时)")\n\ |
| print(f"消息内容: {text}")\n\ |
| match = re.search(r"\\b(\\d{5,6})\\b", text)\n\ |
| if match:\n\ |
| print(f"验证码: {match.group(1)}")\n\ |
| else:\n\ |
| print("未找到验证码")\n\ |
| \n\ |
| print("验证码监听已启动,等待新消息...")\n\ |
| await client.run_until_disconnected()\n\ |
| \n\ |
| if __name__ == "__main__":\n\ |
| try:\n\ |
| asyncio.run(main())\n\ |
| except KeyboardInterrupt:\n\ |
| print("停止")\n\ |
| except Exception as e:\n\ |
| print(f"主程序异常: {e}")\n\ |
| import traceback\n\ |
| traceback.print_exc()\n' > verif_monitor.py |
|
|
| EXPOSE 7860 |
| CMD python -u verif_monitor.py 2>&1 & python -m http.server 7860 |