docs: add badges, LICENSE and improve README formatting
This commit is contained in:
@@ -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.
|
||||||
@@ -1,21 +1,37 @@
|
|||||||
# UMB — Telegram Bot
|
<div align="center">
|
||||||
|
|
||||||
Бот для модерации стикеров/GIF, восстановления раскладки, погоды и AI-ассистента "Астра".
|
# 🤖 UMB — Telegram Bot
|
||||||
|
|
||||||
## Функции
|
**Универсальный бот-модератор с AI-ассистентом "Астра"**
|
||||||
|
|
||||||
- **Модерация стикеров и GIF** — если пользователь отправляет 25+ стикеров/GIF за 60 секунд, бот удаляет все последующие стикеры и GIF от этого пользователя в течение 5 минут. Текстовые сообщения не затрагиваются.
|
[](LICENSE)
|
||||||
- **Восстановление раскладки (`/res`)** — ответьте командой `/res` на сообщение с текстом в неправильной раскладке, и бот переведёт его (например, `gbdj` → `пиво`).
|
[](https://www.python.org/)
|
||||||
- **Погода (`/weather`)** — покажет подробную погоду в указанном городе через OpenWeatherMap API.
|
[](https://docs.aiogram.dev/)
|
||||||
- **AI-ассистент "Астра" (`/ai`)** — задайте вопрос, ответьте командой `/ai` на сообщение или перешлите сообщение, и Astra проанализирует его с учётом контекста и ранее сохранённых выжимок диалогов.
|
[](https://www.sqlite.org/)
|
||||||
- **Диалог с Астрой** — после `/ai` без вопроса начинается диалог. Отвечайте на сообщения бота, чтобы продолжать.
|
[](https://www.docker.com/)
|
||||||
|
[](tests/)
|
||||||
|
[](#настройка)
|
||||||
|
|
||||||
|
</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>
|
||||||
|
|||||||
Reference in New Issue
Block a user