No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-19 18:16:39 +03:00
handlers арчик сорян 2026-10-19 18:13:50 +03:00
scripts Проебалнился с конфигом( 2026-10-10 22:31:05 +03:00
utils надеюсь, что я ничего не потерял 2026-10-18 21:53:02 +03:00
.env.example бэкапчики ключики а то будет плаки плаки 2026-10-10 22:22:04 +03:00
.gitignore ну и полный уход на uv 2026-10-18 22:31:25 +03:00
__init__.py Add source Code 2026-08-29 15:55:19 +03:00
__main__.py ну и полный уход на uv 2026-10-18 22:31:25 +03:00
config.py ну и полный уход на uv 2026-10-18 22:31:25 +03:00
LICENSE Initial commit 2026-08-29 15:28:36 +03:00
PluginsBot.example.service ЫЫЫ СИСТЕМД ЭКСПОЛИТ ГСС 2026-10-19 17:43:02 +03:00
pyproject.toml ну и полный уход на uv 2026-10-18 22:31:25 +03:00
README.md ЫЫЫ СИСТЕМД ЭКСПОЛИТ ГСС 2026-10-19 17:43:02 +03:00
requirements.txt айограммммммммммммммм 2026-10-18 21:36:14 +03:00

PluginsBot

Telegram-бот для управления репозиторием на базе KPM Store на базе aiogram 3.x.

Требования

  • Python 3.11+
  • uv (быстрый менеджер пакетов и виртуальных окружений)
  • Git с SSH-доступом к репозиторию магазина
  • SSH-ключ, добавленный в Gitea (бот пушит через SSH)
  • Токен Telegram-бота
  • Telegram-группа с топиками (форум) для отправки плагинов
  • Telegram-канал/топик для уведомлений об обновлениях

Настройка SSH-ключа

Бот пушит коммиты через SSH. Убедись, что:

  1. У тебя есть пара SSH-ключей (~/.ssh/id_ed25519 или ~/.ssh/id_rsa).
  2. Публичный ключ добавлен в Gitea (Settings > SSH keys).
  3. Ключ загружен в ssh-agent:
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_ed25519
    
  4. Проверь подключение:
    ssh -T git@git.kangel.xyz
    

Установка

git clone <your repo>
cd PluginsBot
uv sync

Конфигурация

Скопируй .env.example в .env и заполни значения:

cp .env.example .env
nano .env

Запуск

Запуск бота осуществляется через uv:

# Обычный запуск:
uv run bot

# Демо-режим (тестирование вёрстки сообщений и интерактивных кнопок):
uv run bot --demo

Совет: Если вы активируете виртуальное окружение (source .venv/bin/activate на Linux/macOS или .venv\Scripts\Activate.ps1 на Windows), бот доступен напрямую командой:

bot
# или
bot --demo

Автозапуск через systemd

В репозитории лежит готовый юнит PluginsBot.service. Установка:

sudo cp PluginsBot.example.service /etc/systemd/system/PluginsBot.service
sudo systemctl daemon-reload
sudo systemctl enable --now PluginsBot

Полезное:

journalctl -u PluginsBot -f        # живые логи
sudo systemctl restart PluginsBot  # рестарт после git pull (зависимости пересоберутся сами)
sudo systemctl status PluginsBot   # статус

Перед каждым запуском ExecStartPre делает uv sync --upgrade — пакеты ставятся/обновляются до свежих версий, затем стартует бот. После git pull достаточно перезапустить службу.

Автобэкап ключей и данных

Раз в сутки бот сам присылает создателю (BACKUP_CHAT_ID) архив с ключами и данными: private_key.pem, public_key.pem, .env, store.json (+ всё, что перечислишь в BACKUP_INCLUDE). Если задан KEY_BACKUP_PASSWORD — архив шифруется AES-256 ZIP и открывается обычным 7-Zip / WinRAR / Keka по паролю (Python на приёмной стороне не нужен).

Настройки в .env:

BACKUP_ENABLED=1
BACKUP_CHAT_ID=<твой telegram user id>
BACKUP_INTERVAL_HOURS=24
KEY_BACKUP_PASSWORD=<пароль шифрования архива>
BACKUP_INCLUDE=<доп. пути через запятую, опционально>

Ручной запуск в любой момент — команда /backup в личке боту.

Открыть архив: в 7-Zip/WinRAR выбрать kpm-backup-*.zip → ввести KEY_BACKUP_PASSWORD. Резервный способ (без сторонних утилит) — скриптом:

KEY_BACKUP_PASSWORD=<пароль> uv run scripts/decrypt_backup.py kpm-backup-XXXX.zip ./restore

⚠️ Без KEY_BACKUP_PASSWORD архив уходит в открытом виде (ключ окажется в облаке Telegram). Всегда задавай пароль и храни его отдельно от архива.

Отправка плагинов

Плагины можно отправить двумя способами:

  • В личные сообщения боту — бот проверит подписку на канал, предложит выбрать категорию и отправит заявку в группу на рассмотрение.
  • Напрямую в группу — бот обработает файл и создаст карточку с кнопками «Принять / Отклонить».

Лицензия

GPL-3.0 — см. LICENSE.