From 0432155c8fcfca113bed7ffd83aa0ca733f948ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=B0=D0=BB=D0=B8=D0=BD=D0=B3=D0=B5=D1=80=20=D0=A0?= =?UTF-8?q?=2E=D0=A1=2E?= Date: Wed, 8 Jul 2026 09:31:28 +0700 Subject: [PATCH] docs: add badges, LICENSE and improve README formatting --- LICENSE | 21 +++++++++++++++++ README.md | 67 ++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 LICENSE 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: MIT](https://img.shields.io/badge/license-MIT-lightgrey.svg)](LICENSE) +[![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/) +[![aiogram 3.x](https://img.shields.io/badge/aiogram-3.x-2CA5E0.svg)](https://docs.aiogram.dev/) +[![SQLite](https://img.shields.io/badge/sqlite-async-003B57.svg)](https://www.sqlite.org/) +[![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)](#настройка) + +
+ +--- + +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) + +