tebrox / main.py
understanding's picture
Update main.py
431014c verified
# main.py
import logging
import asyncio
from fastapi import FastAPI
from fastapi.responses import HTMLResponse, PlainTextResponse
import uvicorn
from bot import start_bot
import db_utils
import config
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
)
logger = logging.getLogger("main")
# --- App & Bot setup ---
app = FastAPI(title="Terabox Downloader Bot API")
dp, bot = start_bot()
# --- Status Variables ---
APP_STATUS = {
"bot_running": False,
"workers": config.CONCURRENT_WORKERS,
"active_batches": 0,
"active_users": 0,
}
# --- Background Bot Runner ---
async def run_bot_polling():
from aiogram import Dispatcher
APP_STATUS["bot_running"] = True
await dp.start_polling(bot)
# --- FastAPI Routes ---
@app.on_event("startup")
async def on_startup():
logger.info("===== Application Startup =====")
await db_utils.initialize_database()
# Count users
active_users = await db_utils.get_all_active_user_ids_db()
APP_STATUS["active_users"] = len(active_users)
# Start bot in background
logger.info("Starting bot polling in background...")
asyncio.create_task(run_bot_polling())
@app.get("/health", response_class=PlainTextResponse)
async def health_check():
return "βœ… Terabox Bot is running."
@app.get("/", response_class=HTMLResponse)
async def index_page():
html = f"""
<html>
<head>
<title>πŸš€ Terabox Downloader Bot Dashboard</title>
<style>
body {{ font-family: Arial, sans-serif; background-color: #f9f9f9; color: #333; }}
.container {{ max-width: 600px; margin: auto; padding: 20px; text-align: center; }}
.status {{ background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }}
.status h2 {{ color: #2c3e50; }}
.status p {{ font-size: 18px; }}
.footer {{ margin-top: 20px; font-size: 14px; color: #888; }}
</style>
</head>
<body>
<div class="container">
<h1>πŸš€ Terabox Downloader Bot</h1>
<div class="status">
<h2>Status</h2>
<p>Bot Running: <b style="color:green;">{APP_STATUS['bot_running']}</b></p>
<p>Concurrent Workers: <b>{APP_STATUS['workers']}</b></p>
<p>Active Users (cached): <b>{APP_STATUS['active_users']}</b></p>
<p>Active Batches (live): <b>{APP_STATUS['active_batches']}</b></p>
</div>
<div class="footer">
&copy; 2025 Terabox Bot | Powered by FastAPI & Aiogram
</div>
</div>
</body>
</html>
"""
return html
# --- Main runner ---
if __name__ == "__main__":
logger.info("===== Starting Uvicorn Server =====")
uvicorn.run("main:app", host="0.0.0.0", port=7860)