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
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 и т.д.).
Шаги установки
-
Клонируйте репозиторий:
git clone https://github.com/machka-pasla/remnawave-tg-shop cd remnawave-tg-shop -
Создайте и настройте файл
.env: Скопируйтеenv.exampleв.envи заполните своими данными.cp .env.example .env nano .envНиже перечислены ключевые переменные.
Основные настройки
Переменная Описание Пример BOT_TOKENОбязательно. Токен вашего Telegram-бота. 1234567890:ABC-DEF1234ghIkl-zyx57W2v1u123ew11ADMIN_IDSОбязательно. ID администраторов в Telegram через запятую. 12345678,98765432DEFAULT_LANGUAGEЯзык по умолчанию для новых пользователей. ruSUPPORT_LINK(Опционально) Ссылка на поддержку. https://t.me/your_supportSUBSCRIPTION_MINI_APP_URL(Опционально) URL Mini App для показа подписки. https://t.me/your_bot/appMY_DEVICES_SECTION_ENABLEDВключить раздел «Мои устройства» в меню подписки ( true/false).falseREQUIRED_CHANNEL_ID(Опционально) ID канала, на который пользователь должен подписаться перед использованием. Оставьте пустым, если проверка не нужна. -1001234567890REQUIRED_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_IDID вашего магазина в YooKassa. YOOKASSA_SECRET_KEYСекретный ключ магазина YooKassa. CRYPTOPAY_ENABLEDВключить/выключить CryptoPay ( true/false).CRYPTOPAY_TOKENТокен из вашего CryptoPay App. FREEKASSA_ENABLEDВключить/выключить FreeKassa ( true/false).FREEKASSA_MERCHANT_IDID вашего магазина в FreeKassa. FREEKASSA_API_KEYAPI-ключ для запросов к 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_IDID метода оплаты через магазин FreeKassa. По умолчанию 44.STARS_ENABLEDВключить/выключить Telegram Stars ( true/false).TRIBUTE_ENABLEDВключить/выключить Tribute ( true/false).Настройки подписок
Для каждого периода (1, 3, 6, 12 месяцев) можно настроить доступность и цены:
1_MONTH_ENABLED:trueилиfalseRUB_PRICE_1_MONTH: Цена в рубляхSTARS_PRICE_1_MONTH: Цена в Telegram StarsTRIBUTE_LINK_1_MONTH: Ссылка для оплаты через Tribute Аналогичные переменные есть для3_MONTHS,6_MONTHS,12_MONTHS.
Настройки панели Remnawave
Переменная Описание PANEL_API_URLURL API вашей панели Remnawave. PANEL_API_KEYAPI ключ для доступа к панели. PANEL_WEBHOOK_SECRETСекретный ключ для проверки вебхуков от панели. USER_SQUAD_UUIDSID отрядов для новых пользователей. 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Лимит трафика для пробного периода в ГБ. -
Запустите контейнеры:
docker compose up -dЭта команда скачает образ и запустит сервис в фоновом режиме.
-
Настройка вебхуков (Обязательно): Вебхуки являются обязательным компонентом для работы бота, так как они используются для получения уведомлений от платежных систем (YooKassa, FreeKassa, CryptoPay, Tribute) и панели Remnawave.
Вам понадобится обратный прокси (например, Nginx) для обработки HTTPS-трафика и перенаправления запросов на контейнер с ботом.
Пути для перенаправления:
https://<ваш_домен>/webhook/yookassa→http://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/yookassahttps://<ваш_домен>/webhook/freekassa→http://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/freekassahttps://<ваш_домен>/webhook/cryptopay→http://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/cryptopayhttps://<ваш_домен>/webhook/tribute→http://remnawave-tg-shop:<WEB_SERVER_PORT>/webhook/tributehttps://<ваш_домен>/webhook/panel→http://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. -
Просмотр логов:
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