Files
2026-08-20 04:18:28 +09:00

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 в коде нет.