/
Mihaham
/
Table-Time
Обзор
Документация
Войти
/
Mihaham
/
Table-Time
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
services/api/app/plugins/base.py
68 строк
2 KB
MihahamYT
feat: dedicated web panels for all 46 games
14 июн 2026, 21:36
14 июн 2026, 21:36
4e11c3f
Код
Авторство
О чём код?
from abc import ABC, abstractmethod from typing import Any from pydantic import BaseModel class ValidationResult(BaseModel): ok: bool error_code: str | None = None message: str | None = None class WebViewModel(BaseModel): board: list[list[Any]] | None = None highlights: list[tuple[int, int]] = [] dice: tuple[int, int] | None = None phase: str = "" current_player_name: str = "" actions_available: list[str] = [] extra: dict[str, Any] = {} class TelegramViewModel(BaseModel): caption: str = "" image_url: str | None = None buttons: list[list[dict[str, str]]] = [] class GamePlugin(ABC): plugin_id: str display_name: str min_players: int max_players: int version: str admin_action_labels: dict[str, str] = {} @abstractmethod def initial_state(self, player_ids: list[str], player_names: dict[str, str], config: dict) -> dict: ... @abstractmethod def validate_action( self, state: dict, action_type: str, payload: dict, player_id: str ) -> ValidationResult: ... @abstractmethod def apply_action( self, state: dict, action_type: str, payload: dict, player_id: str ) -> dict: ... @abstractmethod def get_current_player(self, state: dict) -> str | None: ... @abstractmethod def is_finished(self, state: dict) -> bool: ... @abstractmethod def get_winner(self, state: dict) -> str | None: ... @abstractmethod def render_web( self, state: dict, player_names: dict[str, str], viewer_id: str | None = None ) -> WebViewModel: ... @abstractmethod def render_telegram(self, state: dict, player_names: dict[str, str]) -> TelegramViewModel: ... def allowed_actions(self, state: dict, player_id: str) -> list[str]: return []