-
Notifications
You must be signed in to change notification settings - Fork 0
Architecture
AFETZ edited this page Jun 25, 2026
·
1 revision
AFZVPN Bot состоит из Telegram-бота, aiohttp web app, локальной базы, Redis и внешних 3X-UI панелей. 3X-UI остается источником правды для реальных VPN-клиентов, inbound, traffic и expiry.
Telegram
-> aiogram Router
-> Services layer
-> SQLite / Redis / 3X-UI
-> aiohttp public endpoints
-> Happ / payment gateways / web cabinet
| Компонент | Ответственность |
|---|---|
app/__main__.py |
старт bot + web app, polling/webhook, scheduler, Redis, payment gateways |
app/bot/routers |
Telegram UI, callback navigation, user/admin flows |
app/bot/services |
подписки, VPN, server pool, notifications, job locks, runtime metrics |
app/bot/tasks |
фоновые reconciliation и expiry jobs |
app/web |
subscription proxy, additional profiles, connection redirect, cabinet |
app/db |
SQLAlchemy models, Alembic migrations |
plans.json |
коммерческий каталог тарифов |
| Route | Назначение |
|---|---|
/healthz |
health check |
/webhook |
Telegram webhook endpoint |
/connection |
redirect для Happ deep-links |
/sub/{vpn_id} |
основная подписка |
/wl-filtered/{vpn_id} |
рекомендуемая подписка обхода БС |
/wl/{vpn_id} |
запасная подписка обхода БС |
/cabinet/{vpn_id} |
web cabinet |
| payment callbacks | YooKassa, YooMoney, Cryptomus, Heleket |
| Данные | Где источник правды |
|---|---|
| Telegram user, plan, local state | bot SQLite |
| VPN client, traffic, expiry | 3X-UI |
| FSM/background state | Redis |
| тарифы | plans.json |
| платежные транзакции | bot SQLite + payment gateway callback |
- Бот не должен отдавать подписку неактивному пользователю.
- Web endpoints валидируют
vpn_idи состояние подписки. - Runtime state не хранится в Git.
- Миграции Alembic должны быть совместимы с существующей production-базой.