ci / build-test (push) Canceled after 0s
SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/ Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue, контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер), Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог). Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0, тесты 1340/130/52/38/9 зелёные.
1.6 KiB
1.6 KiB
Task 2: BanGuard (квоты, паузы, flood)
Files:
- Create:
backend/app/services/ban_guard.py
Interfaces:
-
Consumes:
store, настройки из Task 1. -
Produces:
def joins_today_auto() -> int— авто-вступления за текущие UTC-сутки (считаетdisc_logevent='join_auto',created_at >= начало суток).def can_auto_join() -> bool— лимит не исчерпан И нет flood-блокировки на сегодня И нет глобальной паузы.async def wait_join_delay() -> None—asyncio.sleep(random.uniform(min, max)).def note_flood() -> None—store.set_setting("discFloodDay", <start_of_day_ms>).def flood_today() -> booldef global_paused() -> bool/def set_global_pause(v: bool) -> None(settingdiscPaused)def search_pause() -> float—random.uniform(2.0, 4.0).
-
Step 1: Реализовать модуль (~60 строк; начало суток — UTC:
datetime.now(timezone.utc).replace(hour=0,minute=0,second=0,microsecond=0)→ ms). -
Step 2: Проверить на временной БД в контейнере
docker compose run --rm --no-deps -e PYTHONPATH=/srv -e LEADRADAR_DATA=/tmp/lr_bg --entrypoint python app -c "
from app.db import store; store.init()
from app.services import ban_guard as bg
assert bg.can_auto_join() is True
assert bg.joins_today_auto() == 0
bg.note_flood(); assert bg.flood_today() is True
bg.set_global_pause(True); assert bg.can_auto_join() is False
print('BANGUARD OK')
"