Bogdan Strielecki 5791f2e58c Add user profile links
User profile buttons quickly opens user's telegram profile

Add user profile link button to log messages
Add user profile link button to user card in admin panel
Add referrer profile link button to log messages
Add referrer profile link button to user card in admin panel
2025-11-03 16:00:50 +03:00
2025-10-28 14:39:47 +03:00
2025-11-03 16:00:50 +03:00
2025-10-24 20:21:35 +03:00
2025-11-03 16:00:50 +03:00
2025-09-08 22:35:43 +05:00
2025-10-24 20:21:35 +03:00
2025-05-21 11:14:13 +00:00
2025-05-20 18:41:32 +00:00
2025-10-28 14:39:47 +03:00
2025-07-25 20:25:20 +03:00

Telegram-бот для продажи подписок Remnawave

Этот Telegram-бот предназначен для автоматизации продажи и управления подписками для панели Remnawave. Он интегрируется с API Remnawave для управления пользователями и подписками, а также использует различные платежные системы для приема платежей.

Ключевые возможности

Для пользователей:

  • Регистрация и выбор языка: Поддержка русского и английского языков.
  • Просмотр подписки: Пользователи могут видеть статус своей подписки, дату окончания и ссылку на конфигурацию.
  • Мои устройства: Опциональный раздел для просмотра и отключения подключенных устройств (активируется через переменную MY_DEVICES_SECTION_ENABLED).
  • Пробная подписка: Система пробных подписок для новых пользователей (активируется вручную по кнопке).
  • Промокоды: Возможность применять промокоды для получения скидок или бонусных дней.
  • Реферальная программа: Пользователи могут приглашать друзей и получать за это бонусные дни подписки.
  • Оплата: Поддержка оплаты через YooKassa, FreeKassa (REST API), CryptoPay, Telegram Stars и Tribute.

Для администраторов:

  • Защищенная админ-панель: Доступ только для администраторов, указанных в ADMIN_IDS.
  • Статистика: Просмотр статистики использования бота (общее количество пользователей, забаненные, активные подписки), недавние платежи и статус синхронизации с панелью.
  • Управление пользователями: Блокировка/разблокировка пользователей, просмотр списка забаненных и детальной информации о пользователе.
  • Рассылка: Отправка сообщений всем пользователям, пользователям с активной или истекшей подпиской.
  • Управление промокодами: Создание и просмотр промокодов.
  • Синхронизация с панелью: Ручной запуск синхронизации пользователей и подписок с панелью Remnawave.
  • Логи действий: Просмотр логов всех действий пользователей.

🚀 Технологии

  • Python 3.11
  • Aiogram 3.x: Асинхронный фреймворк для Telegram ботов.
  • aiohttp: Для запуска веб-сервера (вебхуки).
  • SQLAlchemy 2.x & asyncpg: Асинхронная работа с базой данных PostgreSQL.
  • YooKassa, FreeKassa API, aiocryptopay: Интеграции с платежными системами.
  • Pydantic: Для управления настройками из .env файла.
  • Docker & Docker Compose: Для контейнеризации и развертывания.

⚙️ Установка и запуск

Предварительные требования

  • Установленные Docker и Docker Compose.
  • Рабочая панель Remnawave.
  • Токен Telegram-бота.
  • Данные для подключения к платежным системам (YooKassa, CryptoPay и т.д.).

Шаги установки

  1. Клонируйте репозиторий:

    git clone https://github.com/machka-pasla/remnawave-tg-shop
    cd remnawave-tg-shop
    
  2. Создайте и настройте файл .env: Скопируйте env.example в .env и заполните своими данными.

    cp .env.example .env
    nano .env 
    

    Ниже перечислены ключевые переменные.

    Основные настройки
    Переменная Описание Пример
    BOT_TOKEN Обязательно. Токен вашего Telegram-бота. 1234567890:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
    ADMIN_IDS Обязательно. ID администраторов в Telegram через запятую. 12345678,98765432
    DEFAULT_LANGUAGE Язык по умолчанию для новых пользователей. ru
    SUPPORT_LINK (Опционально) Ссылка на поддержку. https://t.me/your_support
    SUBSCRIPTION_MINI_APP_URL (Опционально) URL Mini App для показа подписки. https://t.me/your_bot/app
    MY_DEVICES_SECTION_ENABLED Включить раздел «Мои устройства» в меню подписки (true/false). false
    REQUIRED_CHANNEL_ID (Опционально) ID канала, на который пользователь должен подписаться перед использованием. Оставьте пустым, если проверка не нужна. -1001234567890
    REQUIRED_CHANNEL_LINK (Опционально) Публичная ссылка или invite на канал для кнопки «Проверить подписку». https://t.me/your_channel
    Настройки платежей и вебхуков
    Переменная Описание
    WEBHOOK_BASE_URL Обязательно. Базовый URL для вебхуков, например https://your.domain.com.
    WEB_SERVER_HOST Хост для веб-сервера.
    WEB_SERVER_PORT Порт для веб-сервера.
    YOOKASSA_ENABLED Включить/выключить YooKassa (true/false).
    YOOKASSA_SHOP_ID ID вашего магазина в YooKassa.
    YOOKASSA_SECRET_KEY Секретный ключ магазина YooKassa.
    CRYPTOPAY_ENABLED Включить/выключить CryptoPay (true/false).
    CRYPTOPAY_TOKEN Токен из вашего CryptoPay App.
    FREEKASSA_ENABLED Включить/выключить FreeKassa (true/false).
    FREEKASSA_MERCHANT_ID ID вашего магазина в FreeKassa.
    FREEKASSA_API_KEY API-ключ для запросов к FreeKassa REST API.
    FREEKASSA_SECOND_SECRET Секретное слово №2 — используется для проверки уведомлений от FreeKassa.
    FREEKASSA_PAYMENT_URL (Опционально, legacy SCI) Базовый URL платёжной формы FreeKassa. По умолчанию https://pay.freekassa.ru/.
    FREEKASSA_PAYMENT_IP Внешний IP вашего сервера, который будет передаваться в запрос оплаты.
    FREEKASSA_PAYMENT_METHOD_ID ID метода оплаты через магазин FreeKassa. По умолчанию 44.
    STARS_ENABLED Включить/выключить Telegram Stars (true/false).
    TRIBUTE_ENABLED Включить/выключить Tribute (true/false).
    Настройки подписок

    Для каждого периода (1, 3, 6, 12 месяцев) можно настроить доступность и цены:

    • 1_MONTH_ENABLED: true или false
    • RUB_PRICE_1_MONTH: Цена в рублях
    • STARS_PRICE_1_MONTH: Цена в Telegram Stars
    • TRIBUTE_LINK_1_MONTH: Ссылка для оплаты через Tribute Аналогичные переменные есть для 3_MONTHS, 6_MONTHS, 12_MONTHS.
    Настройки панели Remnawave
    Переменная Описание
    PANEL_API_URL URL API вашей панели Remnawave.
    PANEL_API_KEY API ключ для доступа к панели.
    PANEL_WEBHOOK_SECRET Секретный ключ для проверки вебхуков от панели.
    USER_SQUAD_UUIDS ID отрядов для новых пользователей.
    USER_TRAFFIC_LIMIT_GB Лимит трафика в ГБ (0 - безлимит).
    USER_HWID_DEVICE_LIMIT Лимит устройств (HWID) для новых пользователей (0 - безлимит).

    Раздел "Мои устройства" становится доступен пользователям только при включении MY_DEVICES_SECTION_ENABLED. Значение лимита устройств при создании записей в панели берётся из USER_HWID_DEVICE_LIMIT.

    Настройки пробного периода
    Переменная Описание
    TRIAL_ENABLED Включить/выключить пробный период (true/false).
    TRIAL_DURATION_DAYS Длительность пробного периода в днях.
    TRIAL_TRAFFIC_LIMIT_GB Лимит трафика для пробного периода в ГБ.
  3. Запустите контейнеры:

    docker compose up -d
    

    Эта команда скачает образ и запустит сервис в фоновом режиме.

  4. Настройка вебхуков (Обязательно): Вебхуки являются обязательным компонентом для работы бота, так как они используются для получения уведомлений от платежных систем (YooKassa, FreeKassa, CryptoPay, Tribute) и панели Remnawave.

    Вам понадобится обратный прокси (например, Nginx) для обработки HTTPS-трафика и перенаправления запросов на контейнер с ботом.

    Пути для перенаправления:

    • https://<ваш_домен>/webhook/yookassahttp://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/yookassa
    • https://<ваш_домен>/webhook/freekassahttp://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/freekassa
    • https://<ваш_домен>/webhook/cryptopayhttp://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/cryptopay
    • https://<ваш_домен>/webhook/tributehttp://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/tribute
    • https://<ваш_домен>/webhook/panelhttp://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/panel
    • Для Telegram: Бот автоматически установит вебхук, если в .env указан WEBHOOK_BASE_URL. Путь будет https://<ваш_домен>/<BOT_TOKEN>.

    Где remnawave-tg-shop — это имя сервиса из docker-compose.yml, а <WEB_SERVER_PORT> — порт, указанный в .env.

  5. Просмотр логов:

    docker compose logs -f remnawave-tg-shop
    

    💡 Если включена проверка подписки на канал (REQUIRED_CHANNEL_ID), добавьте бота администратором в этот канал. Пользователь увидит кнопку «Проверить подписку», и, после первого успешного подтверждения, дальнейшие действия блокироваться не будут.

🐳 Docker

Файлы Dockerfile и docker-compose.yml уже настроены для сборки и запуска проекта. docker-compose.yml использует готовый образ с GitHub Container Registry, но вы можете раскомментировать build: . для локальной сборки.

Для автоматической публикации образов настроены GitHub Actions (.github/workflows). По умолчанию образы пушатся в GitHub Container Registry и Docker Hub. Добавьте в Secrets репозитория значения DOCKERHUB_USERNAME и DOCKERHUB_TOKEN (персональный access token или пароль для Docker Hub), чтобы загрузка в Docker Hub работала корректно.

📁 Структура проекта

.
├── bot/
│   ├── filters/          # Пользовательские фильтры Aiogram
│   ├── handlers/         # Обработчики сообщений и колбэков
│   ├── keyboards/        # Клавиатуры
│   ├── middlewares/      # Промежуточные слои (i18n, проверка бана)
│   ├── services/         # Бизнес-логика (платежи, API панели)
│   ├── states/           # Состояния FSM
│   └── main_bot.py       # Основная логика бота
├── config/
│   └── settings.py       # Настройки Pydantic
├── db/
│   ├── dal/              # Слой доступа к данным (DAL)
│   ├── database_setup.py # Настройка БД
│   └── models.py         # Модели SQLAlchemy
├── locales/              # Файлы локализации (ru, en)
├── .env.example          # Пример файла с переменными окружения
├── Dockerfile            # Инструкции для сборки Docker-образа
├── docker-compose.yml    # Файл для оркестрации контейнеров
├── requirements.txt      # Зависимости Python
└── main.py               # Точка входа в приложение

🔮 Планы на будущее

  • Расширенные типы промокодов (например, скидки в процентах).

❤️ Поддержка

  • Карты РФ и зарубежные: Tribute
  • Crypto: USDT TRC-20 TT3SqBbfU4vYm6SUwUVNZsy278m2xbM4GE
S
Description
Remnawave shop with webapp and tg bot. Flexible tariffs, custom themes and email auth
Readme MIT
8.3 MiB
Languages
JavaScript 51.5%
Python 36.5%
Svelte 7.7%
CSS 3.4%
Shell 0.5%
Other 0.2%