diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..edb3639
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/README.md b/README.md
index cd9388d..6447f1e 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,37 @@
-# UMB — Telegram Bot
+
-Бот для модерации стикеров/GIF, восстановления раскладки, погоды и AI-ассистента "Астра".
+# 🤖 UMB — Telegram Bot
-## Функции
+**Универсальный бот-модератор с AI-ассистентом "Астра"**
-- **Модерация стикеров и GIF** — если пользователь отправляет 25+ стикеров/GIF за 60 секунд, бот удаляет все последующие стикеры и GIF от этого пользователя в течение 5 минут. Текстовые сообщения не затрагиваются.
-- **Восстановление раскладки (`/res`)** — ответьте командой `/res` на сообщение с текстом в неправильной раскладке, и бот переведёт его (например, `gbdj` → `пиво`).
-- **Погода (`/weather`)** — покажет подробную погоду в указанном городе через OpenWeatherMap API.
-- **AI-ассистент "Астра" (`/ai`)** — задайте вопрос, ответьте командой `/ai` на сообщение или перешлите сообщение, и Astra проанализирует его с учётом контекста и ранее сохранённых выжимок диалогов.
-- **Диалог с Астрой** — после `/ai` без вопроса начинается диалог. Отвечайте на сообщения бота, чтобы продолжать.
+[](LICENSE)
+[](https://www.python.org/)
+[](https://docs.aiogram.dev/)
+[](https://www.sqlite.org/)
+[](https://www.docker.com/)
+[](tests/)
+[](#настройка)
+
+
+
+---
+
+UMB — это Telegram-бот для модерации стикеров/GIF, восстановления раскладки, получения погоды и общения с AI-ассистентом **Астра**.
+
+## ✨ Функции
+
+- **🛡️ Модерация стикеров и GIF** — если пользователь отправляет 25+ стикеров/GIF за 60 секунд, бот удаляет все последующие стикеры и GIF от этого пользователя в течение 5 минут. Текстовые сообщения не затрагиваются.
+- **⌨️ Восстановление раскладки (`/res`)** — ответьте командой `/res` на сообщение с текстом в неправильной раскладке, и бот переведёт его (например, `gbdj` → `пиво`).
+- **🌤️ Погода (`/weather`)** — покажет подробную погоду в указанном городе через OpenWeatherMap API.
+- **🤖 AI-ассистент "Астра" (`/ai`)** — задайте вопрос, ответьте командой `/ai` на сообщение или перешлите сообщение, и Astra проанализирует его с учётом контекста и ранее сохранённых выжимок диалогов.
+- **💬 Диалог с Астрой** — после `/ai` без вопроса начинается диалог. Отвечайте на сообщения бота, чтобы продолжать.
- Фаза 1: до 50 сообщений.
- Фаза 2: дополнительно до 20 сообщений.
- После исчерпания лимита — перерыв 1 час.
-- **Управление AI (`/aino`, `/aiyes`)** — владелец чата может заблокировать/разблокировать пользователя от AI.
-- **Поддержка SOCKS5 прокси** — настраивается через `.env`.
+- **🔒 Управление AI (`/aino`, `/aiyes`)** — владелец чата может заблокировать/разблокировать пользователя от AI.
+- **🧦 Поддержка SOCKS5 прокси** — настраивается через `.env`.
-## Структура проекта
+## 🏗️ Структура проекта
```
umb/
@@ -53,7 +69,7 @@ umb/
└── logging_config.py # настройка логирования
```
-## Установка
+## 🚀 Установка
```bash
cd umb
@@ -62,7 +78,7 @@ source .venv/bin/activate
pip install -r requirements.txt
```
-## Настройка
+## ⚙️ Настройка
Откройте `.env` и укажите необходимые ключи:
@@ -83,14 +99,14 @@ AI_HEALTH_CHECK_INTERVAL=600
Для включения прокси установите `PROXY_ENABLED=true` и укажите корректный `PROXY_URL`.
-## Запуск
+## ▶️ Запуск
```bash
source .venv/bin/activate
python main.py
```
-## Запуск в Docker
+## 🐳 Запуск в Docker
```bash
docker compose up -d --build
@@ -98,7 +114,14 @@ docker compose up -d --build
Модели Whisper сохраняются в `./models`, база данных и логи — в `./bot/data`.
-## Команды
+## 🧪 Тесты
+
+```bash
+source .venv/bin/activate
+pytest tests/ -v
+```
+
+## 📋 Команды
| Команда | Описание |
|---------|----------|
@@ -115,7 +138,7 @@ docker compose up -d --build
| `/ydf <ссылка>` | Скачать файл с Яндекс.Диска |
| `/ydf (new) <ссылка>` | Скачать файл, игнорируя кеш Telegram |
-## Настройки модерации
+## ⚖️ Настройки модерации
Изменяются в `config.py`:
@@ -123,7 +146,7 @@ docker compose up -d --build
- `MODERATION_WINDOW = 60` — окно подсчёта в секундах
- `MODERATION_BAN_DURATION = 300` — длительность бана в секундах
-## AI-ассистент "Астра"
+## 🧠 AI-ассистент "Астра"
- **Бесплатные модели** (OpenRouter): пробует по очереди доступные модели с суффиксом `:free`. При rate-limit автоматически переключается на следующую.
- **Платный fallback** (RouterAI): если все бесплатные модели недоступны, используется `deepseek/deepseek-v4-flash` через `routerai.ru`. В ответе добавляется уведомление `⚡ Обработано через платный API`.
@@ -131,3 +154,11 @@ docker compose up -d --build
- **Долгосрочная память**: при переходе между фазами диалога и при `/aiclear` создаётся краткая выжимка, которая затем подбирается по смыслу к новым вопросам.
- **Стиль**: отвечает кратко и по делу, если не просят развёрнуто.
- **Потеря контекста**: говорит что-то милое ("я потеряла мысль", "смотри, какая птичка!")
+
+---
+
+
+
+Сделано с помощью [aiogram](https://docs.aiogram.dev/) · [SQLAlchemy](https://www.sqlalchemy.org/) · [faster-whisper](https://github.com/SYSTRAN/faster-whisper)
+
+