74 lines
2.2 KiB
Python
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=["*"],
|
|
)
|