# AmneziaVPN Telegram Bot Телеграм-бот на Python для управления [AmneziaVPN](https://github.com/amnezia-vpn/amnezia-client). Этот бот позволяет легко управлять клиентами и продавать доступ через встроенные платежи Telegram. Используется библиотека `aiogram` версии 3.x. Требуется Python 3.10 или новее. Протестировано на Ubuntu 20.04, 22.04, 24.04. ## Оглавление - [Возможности](#возможности) - [Установка](#установка) - [Настройка оплаты](#настройка-оплаты) - [Конфигурация](#конфигурация) - [Запуск](#запуск) - [Заметки](#заметки) - [Поддержка](#поддержка) ## Возможности - Роли: администраторы, модераторы и обычные пользователи - Добавление и удаление клиентов - Создание ключа в формате `vpn://` при генерации нового клиента (и при получении конфигурации), для использования в [AmneziaVPN](https://github.com/amnezia-vpn/amnezia-client) - Статус клиента онлайн/офлайн по реальному времени последнего handshake - Подписки на 1, 3, 6 и 12 месяцев с автоматическим отключением по истечении срока - Продление подписки на период или до произвольной даты; остаток активной подписки не сгорает - **Оплата подписки прямо в Telegram** (провайдер — ЮKassa), с чеками по 54-ФЗ при необходимости - Промокоды двух видов: выдающие ключ бесплатно и дающие скидку при оплате - Настраиваемые цены из интерфейса бота - Создание резервной копии ## Установка 1. Установите [AmneziaVPN](https://github.com/amnezia-vpn/amnezia-client) (без данного шага бот РАБОТАТЬ НЕ БУДЕТ). 2. Пройдите первоначальную [инициализацию](https://docs.amnezia.org/ru/documentation/instructions/install-vpn-on-server/), выбрав протокол AmneziaWG, в клиенте [AmneziaVPN](https://github.com/amnezia-vpn/amnezia-client). 3. Создайте бота в Telegram: - Откройте Telegram и найдите бота [BotFather](https://t.me/BotFather). - Начните диалог, отправив команду `/start`. - Введите команду `/newbot`, чтобы создать нового бота. - Следуйте инструкциям BotFather, чтобы: - Придумать имя для вашего бота (например, `AmneziaWGBot`). - Придумать уникальное имя пользователя для бота (например, `AmneziaWGManagerBot_bot`). Оно должно оканчиваться на `_bot`. - После создания бота BotFather отправит вам токен для доступа к API. Его запросит бот во время первоначальной инициализации. 4. Получите ваш Telegram ID с помощью [Get My ID](https://t.me/getmyid_bot), просто написав боту. 5. Загрузите и запустите скрипт `install.sh`, с помощью которого будет автоматически установлен бот, со всеми зависимостями, в том числе, в качестве системной службы (автозапуск): ```bash curl -O https://raw.githubusercontent.com/viktor138irk/amnezia-bot/main/install.sh && chmod +x install.sh && ./install.sh ``` ## Настройка оплаты Оплата работает на встроенных платежах Telegram, поэтому боту **не нужен публичный HTTPS-адрес, домен или сертификат** — Telegram сам подтверждает платёж. 1. Откройте [BotFather](https://t.me/BotFather) → `/mybots` → ваш бот → **Payments**. 2. Выберите провайдера **ЮKassa** и подключите свой магазин. 3. BotFather выдаст **токен провайдера** (для тестов — с пометкой `TEST`). 4. Положите его в `awg/files/config.json` как `payment_provider_token` либо задайте переменной окружения `AWG_PAYMENT_PROVIDER_TOKEN`. Если токен не задан, бот работает без оплаты: кнопка «Купить ключ» скрывается, ключи выдаются только по промокодам. Минимальная сумма счёта в Telegram — 60 ₽, бот не даст выставить счёт меньше. Для чеков по 54-ФЗ включите блок `payment_receipt` в конфигурации — тогда бот будет запрашивать email покупателя и передавать данные чека в ЮKassa. ## Конфигурация Настройки лежат в `awg/files/config.json`, образец — в [`awg/files/config.json.example`](awg/files/config.json.example). Любую настройку можно переопределить переменной окружения, чтобы не хранить секреты в файле: | Переменная | Назначение | | --- | --- | | `AWG_BOT_HOME` | Каталог с данными бота (по умолчанию — каталог `awg/`) | | `AWG_BOT_TOKEN` | Токен бота | | `AWG_PAYMENT_PROVIDER_TOKEN` | Токен платёжного провайдера | | `AWG_PAYMENT_CURRENCY` | Валюта счетов (по умолчанию `RUB`) | | `AWG_ENDPOINT` | Адрес VPN-сервера | | `AWG_DOCKER_CONTAINER` | Имя контейнера Amnezia | | `AWG_WG_CONFIG_FILE` | Путь к конфигу WireGuard внутри контейнера | | `AWG_LOG_LEVEL` | Уровень логирования (по умолчанию `INFO`) | Каталог установки больше не зашит в код: пути вычисляются относительно расположения файлов бота. `install.sh` тоже понимает `AWG_BOT_HOME`, `AWG_PYTHON_BIN`, `AWG_REPO_URL` и `AWG_REPO_BRANCH`. ### Промокоды Формат добавления: `<код> <скидка%> <дней_действия> <макс_использований|none> <период|none>` - `FREE1M 100 30 10 1_month` — бесплатный ключ на месяц, 10 активаций, промокод живёт 30 дней - `SALE20 20 30 none none` — скидка 20% при оплате, без ограничения по количеству Использование промокода засчитывается только после фактической выдачи ключа. ## Запуск 1. Добавьте бота в Telegram и отправьте команду `/start` или `/help` для начала работы. ## Заметки Для обновления бота, необходимо запустить скрипт `install.sh`. В меню, необходимо выбрать пункт `Проверить обновления`. При создании резервной копии, в архив добавляется директория `users` (конфигурации клиентов), `files` (настройки, промокоды, платежи, сроки подписок) и скрипты бота. Подписки проверяются раз в час: по истечении срока клиент удаляется с сервера, а его владелец получает уведомление. ## Поддержка Если у вас возникли вопросы или проблемы с установкой и использованием бота, создайте [issue](https://github.com/viktor138irk/amnezia-bot/issues) в этом репозитории или обратитесь к разработчику.