Files
popa_minecraft_launcher_api/main.py
2025-12-12 20:31:40 +05:00

74 lines
2.2 KiB
Python

from contextlib import asynccontextmanager
import os
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
import httpx
from app.api import news, users, skins, capes, meta, server, store, pranks, marketplace, bonuses, case
from fastapi.middleware.cors import CORSMiddleware
from app.core.config import CAPES_DIR, CAPES_STORE_DIR, SKINS_DIR
from app.webhooks import telegram
app = FastAPI()
###################### БОТ ######################
BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
PUBLIC_WEBHOOK_URL = os.getenv("PUBLIC_WEBHOOK_URL") # https://minecraft.api.popa-popa.ru/telegram/webhook
WEBHOOK_SECRET = os.getenv("TELEGRAM_WEBHOOK_SECRET", "")
@asynccontextmanager
async def lifespan(app: FastAPI):
# ===== STARTUP =====
if BOT_TOKEN and PUBLIC_WEBHOOK_URL:
payload = {"url": PUBLIC_WEBHOOK_URL}
if WEBHOOK_SECRET:
payload["secret_token"] = WEBHOOK_SECRET
async with httpx.AsyncClient(timeout=20) as client:
await client.post(
f"https://api.telegram.org/bot{BOT_TOKEN}/setWebhook",
json=payload,
)
yield
# ===== SHUTDOWN =====
async with httpx.AsyncClient(timeout=20) as client:
await client.post(
f"https://api.telegram.org/bot{BOT_TOKEN}/deleteWebhook"
)
app = FastAPI(lifespan=lifespan)
##################################################
app.include_router(meta.router)
app.include_router(users.router)
app.include_router(skins.router)
app.include_router(capes.router)
app.include_router(server.router)
app.include_router(store.router)
app.include_router(pranks.router)
app.include_router(marketplace.router)
app.include_router(bonuses.router)
app.include_router(news.router)
app.include_router(case.router)
app.include_router(telegram.router)
# Монтируем статику
app.mount("/skins", StaticFiles(directory=str(SKINS_DIR)), name="skins")
app.mount("/capes", StaticFiles(directory=str(CAPES_DIR)), name="capes")
app.mount("/capes_store", StaticFiles(directory=str(CAPES_STORE_DIR)), name="capes_store")
# CORS, middleware и т.д.
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)