UMB — Telegram Bot

Бот для модерации стикеров/GIF, восстановления раскладки, погоды и AI-ассистента "Астра".

Функции

  • Модерация стикеров и GIF — если пользователь отправляет 25+ стикеров/GIF за 60 секунд, бот удаляет все последующие стикеры и GIF от этого пользователя в течение 5 минут. Текстовые сообщения не затрагиваются.
  • Восстановление раскладки (/res) — ответьте командой /res на сообщение с текстом в неправильной раскладке, и бот переведёт его (например, gbdjпиво).
  • Погода (/weather) — покажет подробную погоду в указанном городе через OpenWeatherMap API.
  • AI-ассистент "Астра" (/ai) — перешлите сообщение или ответьте на него командой /ai, и Astra проанализирует его с учётом контекста последних 10 сообщений.
  • Управление AI (/aino, /aiyes) — владелец чата может заблокировать/разблокировать пользователя от AI.
  • Поддержка SOCKS5 прокси — настраивается через .env.

Структура проекта

umb/
├── .env                      # настройки: токен, прокси, API ключи
├── .gitignore
├── requirements.txt
├── main.py                   # точка входа
├── config.py                 # конфигурация
└── bot/
    ├── __init__.py
    ├── bot.py                # инициализация бота и сессии
    ├── routers/
    │   ├── __init__.py
    │   ├── moderation.py     # роутер модерации стикеров/GIF
    │   ├── layout.py         # роутер /start, /res
    │   ├── weather.py        # роутер /weather
    │   └── ai.py             # роутер /ai, /aino, /aiyes
    ├── utils/
    │   ├── __init__.py
    │   ├── layout_converter.py  # конвертер раскладки en→ru
    │   ├── weather.py           # функция получения погоды
    │   ├── ai_client.py         # OpenRouter AI клиент
    │   ├── database.py          # SQLAlchemy модели и функции БД
    │   └── moderation.py        # логика модерации (устарел, теперь в database.py)
    └── data/
        └── umb.db              # SQLite база данных

Установка

cd umb
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Настройка

Откройте .env и укажите необходимые ключи:

BOT_TOKEN=your_bot_token_here
PROXY_ENABLED=false
PROXY_URL=socks5://user:pass@host:port
API_WEATHER=your_openweather_api_key
OPENROUTER_API_KEY=your_openrouter_api_key
ROUTERAI_API_KEY=your_routerai_api_key
ROUTERAI_BASE_URL=https://routerai.ru/api/v1

Для включения прокси установите PROXY_ENABLED=true и укажите корректный PROXY_URL.

Запуск

source .venv/bin/activate
python main.py

Команды

Команда Описание
/start Приветствие и информация о боте
/res Восстановить раскладку (ответить на сообщение)
/weather <город> Погода в указанном городе
/ai AI-анализ пересланного/ответного сообщения
/aino @username Заблокировать пользователя от AI (только creator, 24ч)
/aiyes @username Разблокировать пользователя от AI (только creator)

Настройки модерации

Изменяются в config.py:

  • MODERATION_LIMIT = 25 — количество стикеров/GIF за окно
  • MODERATION_WINDOW = 60 — окно подсчёта в секундах
  • MODERATION_BAN_DURATION = 300 — длительность бана в секундах

AI-ассистент "Астра"

  • Бесплатные модели (OpenRouter): пробует по очереди все, при rate-limit переключается на следующую
    • deepseek/deepseek-v4-flash:free
    • google/gemma-4-26b-a4b-it:free
    • minimax/minimax-m2.5:free
    • qwen/qwen3-next-80b-a3b-instruct:free
  • Платный fallback (RouterAI): если все бесплатные модели вернули 429, используется deepseek/deepseek-v4-flash через routerai.ru. В ответе добавляется уведомление ⚡ Обработано через платный API.
  • Контекст: хранит последние 10 сообщений каждого пользователя в SQLite
  • Стиль: отвечает кратко и по делу, если не просят развёрнуто
  • Потеря контекста: говорит что-то милое ("я потеряла мысль", "смотри, какая птичка!")
S
Description
UMB Telegram Bot
Readme
109 KiB
Languages
Python 99.7%
Dockerfile 0.3%