docs: add badges, LICENSE and improve README formatting

This commit is contained in:
Галингер Р.С.
2026-07-08 09:31:28 +07:00
parent 0f674f8832
commit 0432155c8f
2 changed files with 70 additions and 18 deletions
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 UMB Bot Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+49 -18
View File
@@ -1,21 +1,37 @@
# UMB — Telegram Bot <div align="center">
Бот для модерации стикеров/GIF, восстановления раскладки, погоды и AI-ассистента "Астра". # 🤖 UMB — Telegram Bot
## Функции **Универсальный бот-модератор с AI-ассистентом "Астра"**
- **Модерация стикеров и GIF** — если пользователь отправляет 25+ стикеров/GIF за 60 секунд, бот удаляет все последующие стикеры и GIF от этого пользователя в течение 5 минут. Текстовые сообщения не затрагиваются. [![License: MIT](https://img.shields.io/badge/license-MIT-lightgrey.svg)](LICENSE)
- **Восстановление раскладки (`/res`)** — ответьте командой `/res` на сообщение с текстом в неправильной раскладке, и бот переведёт его (например, `gbdj``пиво`). [![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/)
- **Погода (`/weather`)** — покажет подробную погоду в указанном городе через OpenWeatherMap API. [![aiogram 3.x](https://img.shields.io/badge/aiogram-3.x-2CA5E0.svg)](https://docs.aiogram.dev/)
- **AI-ассистент "Астра" (`/ai`)** — задайте вопрос, ответьте командой `/ai` на сообщение или перешлите сообщение, и Astra проанализирует его с учётом контекста и ранее сохранённых выжимок диалогов. [![SQLite](https://img.shields.io/badge/sqlite-async-003B57.svg)](https://www.sqlite.org/)
- **Диалог с Астрой** — после `/ai` без вопроса начинается диалог. Отвечайте на сообщения бота, чтобы продолжать. [![Docker](https://img.shields.io/badge/docker-ready-2496ED.svg)](https://www.docker.com/)
[![Tests](https://img.shields.io/badge/tests-pytest-brightgreen.svg)](tests/)
[![SOCKS5 Proxy](https://img.shields.io/badge/proxy-SOCKS5-orange.svg)](#настройка)
</div>
---
UMB — это Telegram-бот для модерации стикеров/GIF, восстановления раскладки, получения погоды и общения с AI-ассистентом **Астра**.
## ✨ Функции
- **🛡️ Модерация стикеров и GIF** — если пользователь отправляет 25+ стикеров/GIF за 60 секунд, бот удаляет все последующие стикеры и GIF от этого пользователя в течение 5 минут. Текстовые сообщения не затрагиваются.
- **⌨️ Восстановление раскладки (`/res`)** — ответьте командой `/res` на сообщение с текстом в неправильной раскладке, и бот переведёт его (например, `gbdj``пиво`).
- **🌤️ Погода (`/weather`)** — покажет подробную погоду в указанном городе через OpenWeatherMap API.
- **🤖 AI-ассистент "Астра" (`/ai`)** — задайте вопрос, ответьте командой `/ai` на сообщение или перешлите сообщение, и Astra проанализирует его с учётом контекста и ранее сохранённых выжимок диалогов.
- **💬 Диалог с Астрой** — после `/ai` без вопроса начинается диалог. Отвечайте на сообщения бота, чтобы продолжать.
- Фаза 1: до 50 сообщений. - Фаза 1: до 50 сообщений.
- Фаза 2: дополнительно до 20 сообщений. - Фаза 2: дополнительно до 20 сообщений.
- После исчерпания лимита — перерыв 1 час. - После исчерпания лимита — перерыв 1 час.
- **Управление AI (`/aino`, `/aiyes`)** — владелец чата может заблокировать/разблокировать пользователя от AI. - **🔒 Управление AI (`/aino`, `/aiyes`)** — владелец чата может заблокировать/разблокировать пользователя от AI.
- **Поддержка SOCKS5 прокси** — настраивается через `.env`. - **🧦 Поддержка SOCKS5 прокси** — настраивается через `.env`.
## Структура проекта ## 🏗️ Структура проекта
``` ```
umb/ umb/
@@ -53,7 +69,7 @@ umb/
└── logging_config.py # настройка логирования └── logging_config.py # настройка логирования
``` ```
## Установка ## 🚀 Установка
```bash ```bash
cd umb cd umb
@@ -62,7 +78,7 @@ source .venv/bin/activate
pip install -r requirements.txt pip install -r requirements.txt
``` ```
## Настройка ## ⚙️ Настройка
Откройте `.env` и укажите необходимые ключи: Откройте `.env` и укажите необходимые ключи:
@@ -83,14 +99,14 @@ AI_HEALTH_CHECK_INTERVAL=600
Для включения прокси установите `PROXY_ENABLED=true` и укажите корректный `PROXY_URL`. Для включения прокси установите `PROXY_ENABLED=true` и укажите корректный `PROXY_URL`.
## Запуск ## ▶️ Запуск
```bash ```bash
source .venv/bin/activate source .venv/bin/activate
python main.py python main.py
``` ```
## Запуск в Docker ## 🐳 Запуск в Docker
```bash ```bash
docker compose up -d --build docker compose up -d --build
@@ -98,7 +114,14 @@ docker compose up -d --build
Модели Whisper сохраняются в `./models`, база данных и логи — в `./bot/data`. Модели Whisper сохраняются в `./models`, база данных и логи — в `./bot/data`.
## Команды ## 🧪 Тесты
```bash
source .venv/bin/activate
pytest tests/ -v
```
## 📋 Команды
| Команда | Описание | | Команда | Описание |
|---------|----------| |---------|----------|
@@ -115,7 +138,7 @@ docker compose up -d --build
| `/ydf <ссылка>` | Скачать файл с Яндекс.Диска | | `/ydf <ссылка>` | Скачать файл с Яндекс.Диска |
| `/ydf (new) <ссылка>` | Скачать файл, игнорируя кеш Telegram | | `/ydf (new) <ссылка>` | Скачать файл, игнорируя кеш Telegram |
## Настройки модерации ## ⚖️ Настройки модерации
Изменяются в `config.py`: Изменяются в `config.py`:
@@ -123,7 +146,7 @@ docker compose up -d --build
- `MODERATION_WINDOW = 60` — окно подсчёта в секундах - `MODERATION_WINDOW = 60` — окно подсчёта в секундах
- `MODERATION_BAN_DURATION = 300` — длительность бана в секундах - `MODERATION_BAN_DURATION = 300` — длительность бана в секундах
## AI-ассистент "Астра" ## 🧠 AI-ассистент "Астра"
- **Бесплатные модели** (OpenRouter): пробует по очереди доступные модели с суффиксом `:free`. При rate-limit автоматически переключается на следующую. - **Бесплатные модели** (OpenRouter): пробует по очереди доступные модели с суффиксом `:free`. При rate-limit автоматически переключается на следующую.
- **Платный fallback** (RouterAI): если все бесплатные модели недоступны, используется `deepseek/deepseek-v4-flash` через `routerai.ru`. В ответе добавляется уведомление `⚡ Обработано через платный API`. - **Платный fallback** (RouterAI): если все бесплатные модели недоступны, используется `deepseek/deepseek-v4-flash` через `routerai.ru`. В ответе добавляется уведомление `⚡ Обработано через платный API`.
@@ -131,3 +154,11 @@ docker compose up -d --build
- **Долгосрочная память**: при переходе между фазами диалога и при `/aiclear` создаётся краткая выжимка, которая затем подбирается по смыслу к новым вопросам. - **Долгосрочная память**: при переходе между фазами диалога и при `/aiclear` создаётся краткая выжимка, которая затем подбирается по смыслу к новым вопросам.
- **Стиль**: отвечает кратко и по делу, если не просят развёрнуто. - **Стиль**: отвечает кратко и по делу, если не просят развёрнуто.
- **Потеря контекста**: говорит что-то милое ("я потеряла мысль", "смотри, какая птичка!") - **Потеря контекста**: говорит что-то милое ("я потеряла мысль", "смотри, какая птичка!")
---
<div align="center">
Сделано с помощью [aiogram](https://docs.aiogram.dev/) · [SQLAlchemy](https://www.sqlalchemy.org/) · [faster-whisper](https://github.com/SYSTRAN/faster-whisper)
</div>