8.5 KiB
amnezia-bot (форк)
Telegram-бот на Python для управления сервером AmneziaVPN / AmneziaWG: выдача и отзыв клиентских конфигов, срок действия подписки, промокоды, резервные копии. Бот работает на том же сервере, где развёрнут AmneziaWG в Docker-контейнере, и управляет им через docker exec и правку wg0.conf.
Форк сделан как резервная копия исходного проекта stevefoxru/amnezia-bot в самохостовом Gitea — чтобы код оставался доступен независимо от судьбы репозитория на GitHub.
Документация оригинала (установка, возможности, поддержка) сохранена в README.upstream.md.
Отличия от оригинала
Изменений нет. Все 85 коммитов принадлежат автору оригинала (stevefoxru), собственных правок владельца форка в истории нет. Форк взят как резервная копия.
Стек
- Python 3.11
- aiogram 2.25.2 (Telegram Bot API, inline-меню, FSM)
- aiohttp 3.8.6, aiofiles — HTTP-запросы и асинхронный файловый ввод-вывод
- APScheduler 3.10.4 — планировщик (истечение срока подписок)
- pytz, humanize, Babel — время и форматирование
- yookassa 2.4.0, YooMoney 0.1.0 — заявлены в
requirements.txt, в коде не используются - Bash-скрипты + Docker CLI +
wg/awgдля управления WireGuard/AmneziaWG - Хранение данных — JSON-файлы (не БД)
Структура
| Путь | Назначение |
|---|---|
awg/bot_manager.py |
Точка входа бота (executor.start_polling), ~1000 строк: inline-меню, все callback-обработчики (добавление/удаление клиентов, список, конфиги, промокоды, бэкапы, настройки цен, админы/модераторы) |
awg/db.py |
Слой данных: чтение/запись JSON-файлов files/config.json, files/user_expiration.json, files/user_telegram.json, files/promocodes.json; работа со списком клиентов и промокодами |
awg/wg.py |
Генерация пары ключей WireGuard, выделение IP из подсети 10.0.0.0/24, добавление пира в wg0.conf, wg syncconf внутри контейнера amnezia-awg |
awg/awg-decode.py |
Кодирование/декодирование конфига в ссылку формата vpn:// (Qt-совместимое zlib-сжатие + base64) для импорта в клиент AmneziaVPN |
awg/newclient.sh |
Создание клиента: аргументы CLIENT_NAME ENDPOINT WG_CONFIG_FILE DOCKER_CONTAINER, генерация .conf |
awg/removeclient.sh |
Удаление клиента из конфигурации сервера |
handlers/add_client.py |
Отдельный FSM-обработчик /add_client с выбором протокола WireGuard/XRay; не подключён к боту (импортирует несуществующий модуль loader) |
install.sh |
Bash-скрипт: клонирование репозитория в /root/amnezia-bot, проверка обновлений через GitHub API, самообновление, пересоздание venv, перезапуск службы awg_bot |
requirements.txt |
Пиннутые версии Python-зависимостей |
LICENSE |
GPL-3.0 |
Каталог awg/files/ (конфиги, JSON-состояние, wg0.conf) в репозиторий не входит и создаётся на сервере при работе.
Как собрать/запустить
Предполагается уже установленный и инициализированный AmneziaVPN с протоколом AmneziaWG.
Установка/обновление через штатный скрипт (от root):
curl -O https://raw.githubusercontent.com/stevefoxru/amnezia-bot/main/install.sh
chmod +x install.sh
./install.sh # интерактивная проверка обновлений
./install.sh --check-update # то же без вопросов
Скрипт требует git, curl, jq, python3.11, работает с каталогом /root/amnezia-bot и службой systemd awg_bot.
Ручной запуск:
python3.11 -m venv myenv
source myenv/bin/activate
pip install -r requirements.txt
cd awg && python3.11 bot_manager.py
Перед запуском должен существовать awg/files/config.json — без обязательных полей бот завершается с ошибкой.
Конфигурация
Все настройки — в awg/files/config.json (в репозиторий не входит). Обязательные поля:
| Ключ | Назначение |
|---|---|
bot_token |
Токен Telegram-бота от BotFather — реальное значение хранить только в config.json на сервере |
admin_ids |
Список Telegram ID администраторов (полный доступ) |
moderator_ids |
Список Telegram ID модераторов (ограниченное меню) |
wg_config_file |
Путь к конфигурации WireGuard/AmneziaWG на сервере |
docker_container |
Имя Docker-контейнера AmneziaWG (в коде wg.py жёстко amnezia-awg) |
endpoint |
Внешний адрес сервера, подставляемый в клиентские конфиги |
pricing |
Необязательный словарь цен: 1_month, 3_months, 6_months, 12_months (по умолчанию 1000/2500/4500/8000) |
Прочие файлы состояния в awg/files/: user_expiration.json (сроки и лимиты трафика), user_telegram.json (привязка клиента к Telegram ID), promocodes.json (промокоды).
Пути /root/amnezia-bot/... захардкожены в wg.py и install.sh — при установке в другой каталог потребуется правка кода.
Секретов в репозитории нет: токены и ключи в код не закоммичены.
Состояние
Рабочий, но заброшенный: 85 коммитов, последний — 28.04.2025 (stevefoxru, «Update install.sh»). Собственных коммитов владельца форка нет, поэтому дата последней своей правки отсутствует.
Что не доделано
handlers/add_client.py— нерабочий: импортирует модульloader, которого в репозитории нет; ветка XRay (amnezia client add --proto xray) нигде больше не используется. Фактически заготовка.install.shв текущем виде только клонирует репозиторий и проверяет обновления. Он не создаёт systemd-юнитawg_botи не формируетfiles/config.json, хотя README оригинала описывает его как полноценный установщик с интерактивной инициализацией (первая версия скрипта была на 305 строк против нынешних 190).- В
install.shсписок пакетов при обновлении зависимостей задан отдельно отrequirements.txtи с другими версиями (aiogram==2.25.1,humanize==4.9.0,pytz==2023.3.post1) — рассинхронизация. yookassaиYooMoneyвrequirements.txtне используются ни в одном модуле: оплата подписок, судя по коду, не реализована (есть только цены и промокоды).- Явных меток TODO/FIXME в коде нет.