chore: replace README with docs link, pin remnapy to commit, minor fixes

- replaced README content with link to external docs (en + ru)
- cleaned up .env.example by removing optional commented variables
- pinned remnapy source to specific commit rev instead of tag
- added panel version display via get_metadata in system getter with fallback
- skipped update check for dev builds in update task
This commit is contained in:
Ilay
2026-03-24 15:44:00 +05:00
parent 68969a0ac6
commit 199d382831
7 changed files with 41 additions and 686 deletions

View File

@@ -1,5 +1,3 @@
# TODO: See remnashop docs env
# Domain through which your bot is publicly accessible.
# Used for receiving webhooks from services (e.g., Telegram, payment systems).
# !!! WARNING: Specify domain WITHOUT HTTP/HTTPS and WITHOUT trailing slash.
@@ -45,50 +43,4 @@ REMNAWAVE_TOKEN=change_me
REMNAWAVE_WEBHOOK_SECRET=change_me
# Password for the database.
DATABASE_PASSWORD=change_me
# Optional settings with default values (uncomment and modify as needed):
# APP_HOST = "0.0.0.0"
# APP_PORT = 5000
# APP_LOCALES = "en, ru"
# APP_DEFAULT_LOCALE = "en"
# APP_ASSETS_DIR = "/app/assets"
# APP_ORIGINS = "a, b"
# BOT_RESET_WEBHOOK = false
# BOT_DROP_PENDING_UPDATES = false
# BOT_SETUP_COMMANDS= true
# BOT_USE_BANNERS = true
# DATABASE_HOST = "remnashop-db"
# DATABASE_PORT = 5432
# DATABASE_NAME = "remnashop"
# DATABASE_USER = "remnashop"
# DATABASE_ECHO = false
# DATABASE_ECHO_POOL = false
# DATABASE_POOL_SIZE = 30
# DATABASE_MAX_OVERFLOW = 30
# DATABASE_POOL_TIMEOUT = 10
# DATABASE_POOL_RECYCLE = 3600
# LOG_TO_FILE = true
# LOG_LEVEL = "DEBUG"
# LOG_ROTATION = "100MB"
# LOG_COMPRESSION = "zip"
# LOG_RETENTION = "3 days"
# REDIS_HOST: str = "remnashop-redis"
# REDIS_PORT: int = 6379
# REDIS_NAME: str = "0"
# REDIS_PASSWORD = # Optional
# REMNAWAVE_CADDY_TOKEN = ""
# REMNAWAVE_COOKIE = ":"
# REMNAWAVE_CF_CLIENT_ID = ""
# REMNAWAVE_CF_CLIENT_SECRET = ""
DATABASE_PASSWORD=change_me

330
README.md
View File

@@ -12,322 +12,16 @@
[![Static Badge](https://img.shields.io/badge/public_group-white?style=social&logo=Telegram&logoColor=blue&logoSize=auto&labelColor=white&link=https%3A%2F%2Ft.me%2Fsn0ups)](https://t.me/remna_shop)
[![Static Badge](https://img.shields.io/badge/remnawave-white?style=social&logo=Telegram&logoColor=blue&logoSize=auto&labelColor=white&link=https%3A%2F%2Ft.me%2Fsnoups)](https://t.me/+xQs17zMzwCY1NzYy)
![GitHub Repo stars](https://img.shields.io/github/stars/snoups/remnashop)
</div>
# ✨ Features
- **📦 Plans**
> Unique architecture that allows flexible plan creation and precise availability control.
> Supports any limits — by traffic, devices, both, or unlimited.
> Control plan availability for specific user types or individual users.
> Link internal and external squads to specific plans.
> Support for any subscription duration.
> Ability to make any duration free of charge.
> Multi-currency pricing for each duration.
> Customizable plan display order.
> Built-in plan configurator directly in the bot interface.
- **🎟️ Promocodes**
> Multiple reward types: extra days, traffic, subscription activation for a chosen plan, personal discount, or discount for the next purchase.
> Configurable lifetime: by time or number of activations.
> Convenient promocode configurator.
- **📢 Broadcasts**
> View all previously sent messages with content preview.
> Send by user category: all users, by plan, with subscription, without subscription, expired, or trial.
> Supports photos, videos, GIFs, and stickers.
> Supports HTML tags for message formatting.
> Preview messages before sending.
> Option to stop an active broadcast.
> Option to delete sent messages.
- **🔔 Notifications**
> Configurable notification system directly in the bot interface.
> User notifications: subscription expiring, expired, traffic exhausted.
> System notifications: bot lifecycle, bot update, new user registration, subscription activation, promocode activation, get trial, node status, first user connection, device add/remove events.
- **🧪 Trial**
> Configurable trial setup through the plan configurator.
> Supports any limits.
> Supports multiple trial plans.
> Separate internal and external squad assignments.
> Availability settings for users who joined via referral or ad links.
- **👥 Referral System**
> Detailed referral statistics.
> Referral system configurator.
> Reward customization: points or extra days.
> Two-level referral support.
- **💳 Flexible Payment System**
> Supports multiple payment gateways: Telegram Stars, YooKassa, YooMoney, Cryptomus, Heleket, CryptoPay, RoboKassa.
> Payment gateway configurator.
> Default currency setup.
> Ability to run test payments for selected gateways.
> Customizable display order for payment methods.
- **📱 Device Management**
> Allows users to manage their connected devices (only with active subscriptions and within device limits).
> Configurable cooldown for device reset actions.
- **🏷️ Discount System**
> Two discount types: personal and next purchase.
> Discounts do not stack — the largest discount is applied.
> Discount display on purchase buttons.
- **🔐 Access Mode**
> Five access modes: full restriction, open for all, invite-only, purchase restricted, and register restricted.
> Automatic notifications for users who attempted to purchase during restricted mode.
> Conditional access support: rule acceptance and channel subscription.
- **📈 Ad Links**
> Create links to track traffic sources and user acquisition.
> Built-in link configurator.
> View detailed analytics for each link.
- **📊 Statistics**
> Detailed analytics by category: users, transactions, subscriptions, plans, promocodes, referrals.
- **👤 User Editor**
> Complete user information: profile data, stats, subscription, transactions.
> Edit personal discounts.
> Manage roles: developer, admin, user.
> Block users.
> Grant plan access for purchase.
> Full subscription editor: modify limits, reset traffic, manage devices, squads, expiration date, toggle subscription status, delete, or get connection link.
> View all banned users.
> Search by name, username and id.
> View recent registrations and active users.
> Quick access via forwarded messages, system notifications, or main menu search.
- **🔄 User Synchronization**
> Automatic synchronization with the panel.
> Edit user data both from the bot and the panel.
- **🔍 User Audit**
> View full user activity history.
- **🌐 Internationalization**
> Ability to set unique banners for each locale.
> Support for interface translations into multiple languages.
> Automatic language detection on the user's first launch and after subsequent changes.
- **🧭 Migration**
> Seamless migration from other bots.
- **🪄 MiniApp Subscription Page Support**
# ⚙️ Installation and configuration
## Requirements
- Hardware:
- OS: Recommended Ubuntu or Debian
- RAM: Minimum 2 GB, recommended 4 GB
- CPU: Minimum 2 cores, recommended 4 cores
- Storage: 20 GB, minimum and recommended
- Software:
- [Docker](https://docs.docker.com/get-started/get-docker/)
Install Docker using official script
```
sudo curl -fsSL https://get.docker.com | sh
```
> [!WARNING]
> **The latest version of the bot is compatible only with RemnaWave panel version 2.32.4.x**
> Before installation, make sure your panel matches this version.
## Step 1 Download required files
Create the project directory
```
mkdir /opt/remnashop && cd /opt/remnashop
```
Download `docker-compose.yml` compose-file and `.env` by running these commands:
- Get `docker-compose.yml` file:
- For external panel **(the bot is hosted on a separate server from the panel)**:
```
curl -o docker-compose.yml https://raw.githubusercontent.com/snoups/remnashop/refs/heads/main/docker-compose.prod.external.yml
```
- For internal panel **(the bot and panel are hosted on the same server)**:
```
curl -o docker-compose.yml https://raw.githubusercontent.com/snoups/remnashop/refs/heads/main/docker-compose.prod.internal.yml
```
- Get `.env` file
```
curl -o .env https://raw.githubusercontent.com/snoups/remnashop/refs/heads/main/.env.example
```
## Step 2 Configure the .env file
Generate secret keys by running the following commands:
- Generate secure keys
```
sed -i "s|^APP_CRYPT_KEY=.*|APP_CRYPT_KEY=$(openssl rand -base64 32 | tr -d '\n')|" .env && sed -i "s|^BOT_SECRET_TOKEN=.*|BOT_SECRET_TOKEN=$(openssl rand -hex 64 | tr -d '\n')|" .env
```
- Generate passwords
```
sed -i "s|^DATABASE_PASSWORD=.*|DATABASE_PASSWORD=$(openssl rand -hex 24 | tr -d '\n')|" .env && sed -i "s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=$(openssl rand -hex 24 | tr -d '\n')|" .env
```
Now, open the .env file and update the variables:
- **`APP_DOMAIN`** : The domain used by Telegram and Remnawave to reach your bot.
- **`BOT_TOKEN`** : Your bot token from BotFather.
- **`BOT_DEV_ID`** : Telegram ID of the main developer.
- **`BOT_SUPPORT_USERNAME`** : Support username without the `@` symbol.
- **`REMNAWAVE_HOST`** : The domain or Docker container name.
- **`REMNAWAVE_TOKEN`** : Remnawave API token, created in the panel.
- **`REMNAWAVE_WEBHOOK_SECRET`** : Must match the value of `WEBHOOK_SECRET_HEADER` from `.env` the panel.
> [!WARNING]
> Depending on your configuration, also pay attention to the following variables: **`BOT_MINI_APP`**, **`REMNAWAVE_CADDY_TOKEN`**, **`REMNAWAVE_COOKIE`**.
> [!IMPORTANT]
> The bot requires a properly configured webhook to function.
> In the Remnawave Panel `.env` file, set:
>
> ```
> WEBHOOK_ENABLED=true
> WEBHOOK_URL=https://bot.domain.com/api/v1/remnawave
> ```
> Replace `bot.domain.com` with your actual domain.
> This step is critically important for the bot to receive events correctly.
## Step 3 Start the containers
Start the containers by running the following command:
```
docker compose up -d && docker compose logs -f -t
```
After a few seconds, you should see the bot successfully start.
## Step 4 - Reverse proxies
A reverse proxy is required to run Remnashop properly.
It is needed to receive webhooks from Telegram, the Remnawave panel, and payment systems.
**This guide does not cover how to install or configure a reverse proxy.**
You can use any proxy solution, similar to how it is done for [**Remnawave**](https://docs.rw/docs/install/reverse-proxies/).
> If you are installing the bot on the same server as the panel, you probably already have a proxy configured.
> In this case, you only need to add a forwarding rule to route traffic to the bot container.
**Configure the following path to forward requests to the bot container:**
`https://your-domain/api/v1` -> `http://remnashop:5000`
## Step 5 How to upgrade
To update and restart the bot, run the following command:
```
cd /opt/remnashop && docker compose pull && docker compose down && RESET_ASSETS=true docker compose up -d && docker compose logs -f
```
When using `RESET_ASSETS=true`, the following actions are performed:
- All current assets are backed up with a timestamp (`/opt/remnashop/assets/*.bak`).
- New assets from the image are downloaded and unpacked.
- After the update, the bot will use the latest files.
> [!CAUTION]
> If you do not use `RESET_ASSETS=true`, the old assets will remain unchanged.
> This may cause the bot to work incorrectly after the update.
# 🖼️ Banners
The bot supports custom banners for each page category and locale: `menu`, `dashboard`, `subscription`, `promocode`, `referral`.
To set a custom banner, name it according to the target page and ensure it uses one of the supported formats: `jpg`, `jpeg`, `png`, `gif`, `webp`.
Banners should be placed in: `/opt/remnashop/assets/banners/(locale)/`
Example: `/opt/remnashop/assets/banners/en/menu.gif`
> [!IMPORTANT]
> Do not delete the `default.jpg` file — it is required for proper operation.
# 🌐 Translations
You can edit any translation file located in:
`/opt/remnashop/assets/translations/(locale)/`
After making changes, you need to restart the container for the updates to take effect.
> [!IMPORTANT]
> Currently, translation persistence during bot updates is not supported.
> When updating, your previous assets will be archived in: `/opt/remnashop/assets/*.bak`
# 💸 Project Support
Any support helps me dedicate more time to development and accelerate project progress!
> Russian and international cards - [**Tribute**](https://t.me/tribute/app?startapp=drsi)
> SBP, ЮMoney, SberPay, T-Pay - [**ЮKassa**](https://yookassa.ru/my/i/Z8AkHJ_F9sO_/l)
> USDT TRC-20 - **`TPnpmwD4P9znKs3Hp4Hrh9rhJ7u1m6UA1B`**
<p align="center">
<br />
<p align="center">
<a href="https://remnashop.mintlify.app/docs/en/overview/releases">
<img src="https://img.shields.io/badge/Get%20Started-%E2%86%92-0969da?style=for-the-badge&labelColor=0969da&color=0969da" alt="Get Started" width="200" height="auto">
</a>
</p>
<a href="https://github.com/snoups/remnashop/releases">
<img src="https://img.shields.io/github/v/release/snoups/remnashop?label=Latest%20release&style=social" alt="Latest release">
</a>
</p>
</div>

View File

@@ -12,319 +12,16 @@
[![Static Badge](https://img.shields.io/badge/public_group-white?style=social&logo=Telegram&logoColor=blue&logoSize=auto&labelColor=white&link=https%3A%2F%2Ft.me%2Fsn0ups)](https://t.me/remna_shop)
[![Static Badge](https://img.shields.io/badge/remnawave-white?style=social&logo=Telegram&logoColor=blue&logoSize=auto&labelColor=white&link=https%3A%2F%2Ft.me%2Fsnoups)](https://t.me/+xQs17zMzwCY1NzYy)
![GitHub Repo stars](https://img.shields.io/github/stars/snoups/remnashop)
</div>
# ✨ Возможности
- **📦 Планы**
> Уникальная архитектура, позволяющая гибко создавать тарифы и управлять их доступностью.
> Поддержка любых лимитов — по трафику, устройствам, вместе или без ограничений.
> Управление доступностью для конкретных пользователей или типов пользователей.
> Привязка внутренних и внешних сквадов к конкретным планам.
> Поддержка любых длительностей подписки.
> Возможность сделать бесплатный вариант длительности.
> Мультивалютные цены для каждой длительности.
> Настраиваемый порядок отображения планов.
> Конфигуратор планов прямо в интерфейсе бота.
- **🎟️ Промокоды**
> Различные типы наград: дополнительные дни, трафик, выдача подписки по плану, персональная скидка или скидка на следующую покупку.
> Настройка времени жизни: по времени или количеству активаций.
> Удобный конфигуратор промокодов.
- **📢 Рассылки**
> Просмотр всех отправленных сообщений с контентом.
> Отправка по категориям пользователей: всем, по плану, с подпиской, без подписки, с истекшей подпиской или с пробником.
> Поддержка фото, видео, GIF и стикеров.
> Поддержка HTML-тегов для форматирования текста.
> Предпросмотр перед отправкой.
> Возможность остановить активную рассылку.
> Возможность удалить отправленные сообщения.
- **🔔 Уведомления**
> Настраиваемая система уведомлений прямо в интерфейсе бота.
> Пользовательские уведомления: истечение подписки, подписка истекла, исчерпан трафик.
> Системные уведомления: жизненный цикл бота, обновление бота, регистрация, оформление подписки, активация промокода, статус узла, первое подключение пользователя, добавление/удаление устройства пользователя.
- **🧪 Пробный период**
> Настройка пробников через конфигуратор планов.
> Поддержка любых лимитов.
> Поддержка нескольких пробных планов.
> Привязка разных внутренних и внешних сквадов.
> Настройка доступности для пользователей с рекламных или реферальных ссылок.
- **👥 Реферальная система**
> Подробная статистика рефералов.
> Конфигуратор реферальной системы.
> Настройка наград: баллы или дни.
> Поддержка двухуровневых рефералов.
- **💳 Гибкая платежная система**
> Поддержка множества агрегаторов: Telegram Stars, YooKassa, YooMoney, Cryptomus, Heleket, CryptoPay, RoboKassa.
> Конфигуратор платежных шлюзов.
> Настройка валюты по умолчанию.
> Возможность проведения тестовых платежей.
> Настройка порядка отображения способов оплаты.
- **📱 Управление устройствами**
> Возможность пользователям управлять своими устройствами (при активной подписке и лимите).
> Настройка интервала между сбросами устройств.
- **🏷️ Система скидок**
> Два типа скидок: персональная и на следующую покупку.
> Скидки не суммируются — применяется наибольшая.
> Отображение скидки на кнопках покупки.
- **🔐 Режим доступа**
> Пять режимов: полное ограничение, открытый доступ, по приглашениям, запрет покупок и запрет регистрации.
> Автоуведомления пользователям, пытавшимся купить при активном ограничении.
> Условия доступа: принятие правил и подписка на канал.
- **📈 Рекламные ссылки**
> Создание ссылок для отслеживания источников трафика и пользователей.
> Встроенный конфигуратор ссылок.
> Просмотр детальной аналитики.
- **📊 Статистика**
> Подробная статистика по категориям: пользователи, транзакции, подписки, планы, промокоды, рефералы.
- **👤 Редактор пользователей**
> Полная информация: данные, статистика, подписка, транзакции.
> Редактирование персональных скидок.
> Управление ролями: разработчик, администратор, пользователь.
> Блокировка пользователя.
> Выдача доступа к покупке плана.
> Редактор подписки: лимиты, сброс трафика, устройства, сквады, дата окончания, включение/отключение, удаление, получение ссылки на подключение.
> Просмотр заблокированных пользователей.
> Поиск по имени, username и идентификатору.
> Списки последних зарегистрированных и активных.
> Быстрый доступ к пользователям через пересланные сообщения и уведомления.
- **🔄 Синхронизация пользователей**
> Автоматическая синхронизация с панелью.
> Возможность изменять данные пользователей как в боте так и через панель.
- **🔍 Аудит пользователей**
> Просмотр всей активности пользователей.
- **🌐 Интернационализация**
> Возможность задавать уникальные баннеры для каждой локали.
> Поддержка переводов интерфейса на разные языки.
> Автоматическое определение языка при первой регистрации и последующих изменениях.
- **🧭 Миграция**
> Простая миграция с других ботов.
- **🪄 Поддержка страницы подписки MiniApp**
# ⚙️ Установка и настройка
## Требования
- Аппаратные:
- ОС: рекомендуется Ubuntu или Debian
- ОЗУ: минимум 2 ГБ, рекомендуется 4 ГБ
- ЦПУ: минимум 2 ядра, рекомендуется 4 ядра
- Хранилище: минимум 20 ГБ
- Программные:
- [Docker](https://docs.docker.com/get-started/get-docker/)
Установить Docker с помощью официального скрипта
```
sudo curl -fsSL https://get.docker.com | sh
```
> [!WARNING]
> **Последняя версия бота совместима только с панелью RemnaWave версии 2.32.4.x**
> Перед установкой убедитесь, что ваша панель соответствует этой версии.
## Шаг 1 Скачивание необходимых файлов
Создайте директорию проекта:
```
mkdir /opt/remnashop && cd /opt/remnashop
```
Скачайте файлы `docker-compose.yml` и `.env`, выполнив команды ниже:
- Скачать `docker-compose.yml`:
- Для внешней панели **(бот и панель находятся на разных серверах)**:
```
curl -o docker-compose.yml https://raw.githubusercontent.com/snoups/remnashop/refs/heads/main/docker-compose.prod.external.yml
```
- Для внутренней панели **(бот и панель находятся на одном сервере)**:
```
curl -o docker-compose.yml https://raw.githubusercontent.com/snoups/remnashop/refs/heads/main/docker-compose.prod.internal.yml
```
- Скачать `.env`:
```
curl -o .env https://raw.githubusercontent.com/snoups/remnashop/refs/heads/main/.env.example
```
## Шаг 2 Настройка файла .env
Сгенерируйте секретные ключи, выполнив команды:
- Генерация ключей безопасности:
```
sed -i "s|^APP_CRYPT_KEY=.*|APP_CRYPT_KEY=$(openssl rand -base64 32 | tr -d '\n')|" .env && sed -i "s|^BOT_SECRET_TOKEN=.*|BOT_SECRET_TOKEN=$(openssl rand -hex 64 | tr -d '\n')|" .env
```
- Генерация паролей:
```
sed -i "s|^DATABASE_PASSWORD=.*|DATABASE_PASSWORD=$(openssl rand -hex 24 | tr -d '\n')|" .env && sed -i "s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=$(openssl rand -hex 24 | tr -d '\n')|" .env
```
Теперь откройте файл `.env` и обновите значения переменных:
- **`APP_DOMAIN`** : Домен, используемый Telegram и Remnawave для доступа к вашему боту.
- **`BOT_TOKEN`** : Токен бота, полученный от BotFather.
- **`BOT_DEV_ID`** : Telegram ID главного разработчика.
- **`BOT_SUPPORT_USERNAME`** : Имя пользователя поддержки без символа `@`.
- **`REMNAWAVE_HOST`** : Домен или имя контейнера Docker.
- **`REMNAWAVE_TOKEN`** : API-токен Remnawave, созданный в панели.
- **`REMNAWAVE_WEBHOOK_SECRET`** : Должен совпадать со значением `WEBHOOK_SECRET_HEADER` из `.env` панели.
> [!WARNING]
> Также в зависимости от вашей конфигурации обратите внимание на данные переменные: **`BOT_MINI_APP`**, **`REMNAWAVE_CADDY_TOKEN`**, **`REMNAWAVE_COOKIE`**.
> [!IMPORTANT]
> Для корректной работы бота необходимо правильно настроить вебхук.
> В файле `.env` панели Remnawave укажите:
> ```
> WEBHOOK_ENABLED=true
> WEBHOOK_URL=https://bot.domain.com/api/v1/remnawave
> ```
> Замените `bot.domain.com` на ваш реальный домен.
> Этот шаг критически важен для корректного получения событий ботом.
## Шаг 3 Запуск контейнеров
Запустите контейнеры командой:
```
docker compose up -d && docker compose logs -f -t
```
Через несколько секунд вы должны увидеть сообщение об успешном запуске бота.
## Шаг 4 Настройка обратного прокси
Для корректной работы Remnashop требуется настроенный обратный прокси.
Он необходим для получения вебхуков от Telegram, панели Remnawave и платежных систем.
**В этом руководстве не описывается установка или настройка прокси.**
Вы можете использовать любой прокси-сервер по аналогии с [**Remnawave**](https://docs.rw/docs/install/reverse-proxies/).
> Если бот установлен на том же сервере, что и панель, прокси, вероятно, уже настроен.
> В этом случае нужно лишь добавить правило для перенаправления трафика в контейнер бота.
**Добавьте правило для маршрута:**
`https://your-domain/api/v1` -> `http://remnashop:5000`
## Шаг 5 Как обновить
Для обновления и перезапуска бота выполните следующую команду:
```
cd /opt/remnashop && docker compose pull && docker compose down && RESET_ASSETS=true docker compose up -d && docker compose logs -f
```
При использовании `RESET_ASSETS=true` выполняются следующие действия:
- Все текущие ассеты сохраняются в резервные копии с отметкой времени (`/opt/remnashop/assets/*.bak`).
- Загружаются и распаковываются новые ассеты из образа.
- После обновления бот гарантированно использует актуальные файлы.
> [!CAUTION]
> Если не использовать `RESET_ASSETS=true`, старые ассеты останутся без изменений.
> Это может привести к некорректной работе бота после обновления.
# 🖼️ Баннеры
Бот поддерживает установку собственных баннеров для каждой категории страницы и локали: `menu`, `dashboard`, `subscription`, `promocode`, `referral`.
Чтобы задать баннер, назовите его в соответствии со страницей и используйте один из поддерживаемых форматов: `jpg`, `jpeg`, `png`, `gif`, `webp`.
Разместите баннеры по пути: `/opt/remnashop/assets/banners/(locale)/`
Пример: `/opt/remnashop/assets/banners/en/menu.gif`
> [!IMPORTANT]
> Не удаляйте файл `default.jpg` — он необходим для корректной работы.
# 🌐 Переводы
Вы можете изменить любой файл перевода, расположенный по пути:
`/opt/remnashop/assets/translations/(locale)/`
После внесения изменений перезапустите контейнер, чтобы обновления вступили в силу.
> [!IMPORTANT]
> На данный момент обновления переводов при апдейте бота не сохраняются.
> При обновлении ваши предыдущие ассеты будут архивированы в: `/opt/remnashop/assets/*.bak`
# 💸 Поддержка проекта
Любая поддержка поможет мне уделять больше времени разработке и ускорить развитие проекта!
> Российские и международные карты - [**Tribute**](https://t.me/tribute/app?startapp=drsi)
> СБП, ЮMoney, SberPay, T-Pay - [**ЮKassa**](https://yookassa.ru/my/i/Z8AkHJ_F9sO_/l)
> USDT TRC-20 - **`TPnpmwD4P9znKs3Hp4Hrh9rhJ7u1m6UA1B`**
<p align="center">
<br />
<p align="center">
<a href="https://remnashop.mintlify.app/docs/ru/overview/releases">
<img src="https://img.shields.io/badge/Начать-%E2%86%92-0969da?style=for-the-badge&labelColor=0969da&color=0969da" alt="Начать" width="200" height="auto">
</a>
</p>
<a href="https://github.com/snoups/remnashop/releases">
<img src="https://img.shields.io/github/v/release/snoups/remnashop?label=Latest%20release&style=social" alt="Latest release">
</a>
</p>
</div>

View File

@@ -33,7 +33,7 @@ dependencies = [
]
[tool.uv.sources]
remnapy = { git = "https://github.com/snoups/remnapy", tag = "v2.6.3" }
remnapy = { git = "https://github.com/snoups/remnapy", rev = "bec1c72" }
[project.urls]
homepage = "https://t.me/@remna_shop"

View File

@@ -25,6 +25,10 @@ async def check_bot_update(
redis: FromDishka[Redis],
event_publisher: FromDishka[EventPublisher],
) -> None:
if not config.build.tag or config.build.tag == "dev":
logger.debug("Local version is a development build, skipping update check")
return
local_version = config.build.tag.replace("v", "") if config.build.tag else None
if not local_version:

View File

@@ -4,6 +4,7 @@ from aiogram_dialog import DialogManager
from aiogram_dialog.widgets.common import ManagedScroll
from dishka import FromDishka
from dishka.integrations.aiogram_dialog import inject
from loguru import logger
from remnapy import RemnawaveSDK
from src.application.common import TranslatorRunner
@@ -18,9 +19,16 @@ async def system_getter(
**kwargs: Any,
) -> dict[str, Any]:
result = await remnawave_sdk.system.get_stats()
metadata = None
# for compatibility with older versions of Remnawave, where the metadata endpoint might not be available
try:
metadata = await remnawave_sdk.system.get_metadata()
except Exception as e:
logger.error(f"Error occurred while fetching metadata: {e}")
return {
"version": "", # TODO: Add panel version
"version": metadata.version if metadata else "",
"cpu_cores": result.cpu.physical_cores,
"cpu_threads": result.cpu.cores,
"ram_used": i18n_format_bytes_to_unit(result.memory.active),

4
uv.lock generated
View File

@@ -1039,7 +1039,7 @@ wheels = [
[[package]]
name = "remnapy"
version = "2.1.2.dev106+gbec1c72b3"
source = { git = "https://github.com/snoups/remnapy?tag=v2.6.3#bec1c72b321886a069e1ba33aa346f447f7a8455" }
source = { git = "https://github.com/snoups/remnapy?rev=bec1c72#bec1c72b321886a069e1ba33aa346f447f7a8455" }
dependencies = [
{ name = "cryptography" },
{ name = "httpx" },
@@ -1105,7 +1105,7 @@ requires-dist = [
{ name = "pydantic-settings", specifier = "~=2.11.0" },
{ name = "qrcode", extras = ["pil"], specifier = ">=8.2" },
{ name = "redis", specifier = "~=7.0.0" },
{ name = "remnapy", git = "https://github.com/snoups/remnapy?tag=v2.6.3" },
{ name = "remnapy", git = "https://github.com/snoups/remnapy?rev=bec1c72" },
{ name = "sqlalchemy", extras = ["mypy"], specifier = ">=2.0.0" },
{ name = "taskiq", extras = ["orjson"], specifier = "~=0.12.1" },
{ name = "taskiq-redis", specifier = "~=1.2.1" },