refactoring

This commit is contained in:
2025-07-17 03:45:44 +05:00
parent b79b0ae69f
commit 733977f56e
25 changed files with 300 additions and 363 deletions

53
main.py
View File

@ -1,40 +1,25 @@
from fastapi import FastAPI, HTTPException
from aiomcrcon import Client, RCONConnectionError, IncorrectPasswordError
import asyncio
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from app.api import users, skins, capes, meta
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# Конфигурация RCON (замените на свои данные)
RCON_CONFIG = {
"hub": {"host": "minecraft.hub.popa-popa.ru", "port": 29001, "password": "2006siT_"},
"survival": {"host": "minecraft.survival.popa-popa.ru", "port": 25575, "password": "пароль_survival"},
"pillars": {"host": "minecraft.pillars.popa-popa.ru", "port": 29003, "password": "2006siT_"},
"velocity": {"host": "minecraft.velocity.popa-popa.ru", "port": 25575, "password": "пароль_velocity"}
}
app.include_router(meta.router)
app.include_router(users.router)
app.include_router(skins.router)
app.include_router(capes.router)
async def send_rcon_command(server_type: str, command: str) -> str:
"""Отправляет RCON-команду на указанный сервер."""
config = RCON_CONFIG.get(server_type)
if not config:
raise HTTPException(status_code=400, detail="Неверный тип сервера")
# Монтируем статику
app.mount("/skins", StaticFiles(directory="app/static/skins"), name="skins")
app.mount("/capes", StaticFiles(directory="app/static/capes"), name="capes")
try:
async with Client(config["host"], config["port"], config["password"]) as client:
response = await client.send_cmd(command)
return response
except RCONConnectionError:
raise HTTPException(status_code=503, detail="Не удалось подключиться к серверу")
except IncorrectPasswordError:
raise HTTPException(status_code=403, detail="Неверный пароль RCON")
# CORS, middleware и т.д.
@app.get("/rcon/")
async def execute_rcon(server_type: str, command: str):
"""Выполняет RCON-команду на указанном сервере."""
result = await send_rcon_command(server_type, command)
return {"server": server_type, "command": command, "response": result}
@app.get("/players/online/")
async def get_online_players(server_type: str):
"""Возвращает список игроков онлайн на сервере."""
players = await send_rcon_command(server_type, "list")
return {"server": server_type, "online_players": players}
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)