97 lines
1.9 KiB
Markdown
97 lines
1.9 KiB
Markdown
# Marzban Telegram VPN Bot
|
||
|
||
Python Telegram bot for issuing one-time VPN invite links and managing Marzban users.
|
||
|
||
## Features
|
||
|
||
- Admin-only one-time invite links.
|
||
- SQLite database with one table: `users`.
|
||
- New users are created in Marzban as `tg{telegram_user_id}`.
|
||
- Trial users: 3 days, 10 GB.
|
||
- Paid extensions:
|
||
- 1 month / 30 days — 50 ₽
|
||
- 2 months / 60 days — 100 ₽
|
||
- 3 months / 90 days — 150 ₽
|
||
- Payment proof is trusted automatically and forwarded to every admin.
|
||
- Paid users get 50 GB after payment.
|
||
- Traffic reset restores 50 GB and floors remaining time to whole 30-day months after an explicit confirmation.
|
||
|
||
## Marzban API requirements
|
||
|
||
On the Marzban panel enable API docs if needed:
|
||
|
||
```env
|
||
DOCS=True
|
||
```
|
||
|
||
Then the panel exposes Swagger at:
|
||
|
||
```text
|
||
https://your-panel.example/docs
|
||
```
|
||
|
||
The bot uses:
|
||
|
||
- `POST /api/admin/token`
|
||
- `POST /api/user`
|
||
- `GET /api/user/{username}`
|
||
- `PUT /api/user/{username}`
|
||
- `POST /api/user/{username}/reset`
|
||
|
||
## Install
|
||
|
||
```bash
|
||
python -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
cp config.example.toml config.toml
|
||
```
|
||
|
||
Edit `config.toml`.
|
||
|
||
## Run
|
||
|
||
```bash
|
||
python bot.py --config config.toml
|
||
```
|
||
|
||
## Admin usage
|
||
|
||
Start the bot from an admin Telegram account, then use:
|
||
|
||
```text
|
||
/new_user
|
||
```
|
||
|
||
or the `➕ New invite` button.
|
||
|
||
The bot returns a one-time link:
|
||
|
||
```text
|
||
https://t.me/<bot_username>?start=<token>
|
||
```
|
||
|
||
Send it to the user.
|
||
|
||
## User flow
|
||
|
||
1. User opens the invite link.
|
||
2. Bot creates Marzban user `tg{telegram_user_id}` with:
|
||
|
||
```json
|
||
{
|
||
"proxies": {"vless": {"flow": "xtls-rprx-vision"}},
|
||
"inbounds": {"vless": ["VLESS TCP REALITY"]},
|
||
"expire": "now + 3 days",
|
||
"data_limit": "10 GiB",
|
||
"data_limit_reset_strategy": "no_reset",
|
||
"status": "active"
|
||
}
|
||
```
|
||
|
||
3. User can view VPN info, extend, or reset traffic.
|
||
|
||
## Notes
|
||
|
||
The bot does not store VPN state locally. Expiration, traffic, status, subscription URL, and links are fetched from Marzban whenever shown.
|