tg2 / Dockerfile
wangdang's picture
Create Dockerfile
d97a679 verified
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