# Telegram VPN bot (Marzban + Telegram Stars) Async Telegram bot for selling and extending Marzban VPN subscriptions. ## Features - Plans: - 1 month = ⭐️100 - 3 months = ⭐️270 - 6 months = ⭐️500 - Marzban username format: `tg` (example: `tg12345678`). - New users are created with: - `data_limit = 50 GB` - `data_limit_reset_strategy = month` - `proxies = {"vless": {"flow": "xtls-rprx-vision"}}` - `inbounds = {"vless": ["VLESS TCP REALITY"]}` - `note` containing Telegram first name, last name, and phone (if available) - If user has active subscription, a new purchase extends from current expiration. - Bot sends **subscription URL** after successful purchase. - Admin notifications for every creation/extension. - Per-user price multiplier support (`price_multiplier`) that affects invoice stars (final amount is always integer). - `/stats` command for admins: - payments count - stars earned - sold months - marzban users - traffic usage/total quota ## Admin user management - `/select_user ` — select user for further updates and show current values. - `/selected_user` — show the currently selected user and current values. - `/set_expire ` — set selected user expiration (UTC). - `/set_traffic ` — set selected user monthly traffic limit in GB. - `/set_multiplier ` — set selected user price multiplier. ## Setup ```bash python -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env ``` Fill `.env` and run: ```bash set -a source .env set +a python bot.py ``` ## Container image The image contains only the application and Python dependencies. Runtime secrets and the SQLite database are deliberately excluded. Build and verify it locally: ```bash docker build --pull -t tt-simple:dev . docker run --rm --entrypoint sh tt-simple:dev -c \ 'test ! -e /app/.env && test ! -e /app/stats.db && test -e /app/bot.py' ``` Run it with environment variables and persistent SQLite storage: ```bash docker volume create tt-simple-data docker run --rm \ --env-file .env \ --env DB_PATH=/data/stats.db \ --volume tt-simple-data:/data \ tt-simple:dev ``` ### Publishing to GHCR `.github/workflows/container.yml` publishes a multi-architecture image to: ```text ghcr.io/kr0sh512/tt-simple ``` A push to `main` publishes `latest` and `sha-` tags. A Git tag such as `v0.1.0` publishes the matching version tag: ```bash git tag v0.1.0 git push origin main v0.1.0 ``` ## Notes - Telegram Stars invoices use `currency="XTR"` and empty `provider_token`. - Local SQLite database stores only payment statistics. User state is read from Marzban API.