Бот для анализа и суммаризации истории Telegram чатов с использованием OpenRouter-compatible LLM API.
- 📊 Суммаризация переписок - получение краткого резюме обсуждений за любой период
- 💬 Свободные запросы - вопросы о содержании чатов ("о чем говорили?", "до чего договорились?")
- 🤖 Естественный язык - команды описываются обычным текстом, AI понимает ваши запросы
- 📅 Гибкие периоды - "за неделю", "вчера", "сегодня", "за последний час", "последние 1000 сообщений" или без указания периода
- 🔍 Умный поиск чатов - находит чаты даже при неточном совпадении названия
- 💾 Контекст запросов - запоминает последний чат и период для быстрых запросов
- 🔐 Доступ ко всем чатам - через Telethon получаем доступ ко всей вашей истории переписок
- 🤖 Гибкая модель LLM - настраивается через
/setmodel, можно задать несколько моделей по приоритету - 🔒 Безопасность - работает только для вас, все данные хранятся локально
- ⚡ Простота - runtime-переопределение URL/токена/модели через команды
./setup.shСкрипт автоматически:
- Проверит наличие Python
- Создаст виртуальное окружение
- Установит все зависимости
- Предложит создать файл
.env
1. Убедитесь, что Python 3.8+ установлен:
python3 --versionЕсли Python не установлен, см. docs/INSTALL.md
2. Создайте виртуальное окружение:
python3 -m venv venv
source venv/bin/activate3. Установите зависимости:
pip install -r requirements.txt📖 Подробная инструкция по установке: docs/INSTALL.md
- Найдите @BotFather в Telegram
- Отправьте команду
/newbot - Следуйте инструкциям и получите токен
- Перейдите на https://my.telegram.org
- Войдите с вашим номером телефона
- Перейдите в "API development tools"
- Создайте приложение и получите
api_idиapi_hash
- Перейдите на https://openrouter.ai/keys
- Создайте API ключ для доступа к OpenRouter-compatible API
- Ключ можно задать сразу в
.envили позже через команду/settoken
- Найдите @userinfobot в Telegram
- Отправьте ему любое сообщение
- Скопируйте ваш ID
Скопируйте env.example в .env:
cp env.example .envЗаполните значения в файле .env:
# Telegram
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_API_ID=your_api_id_here
TELEGRAM_API_HASH=your_api_hash_here
TELEGRAM_PHONE=+79991234567
# OpenRouter-compatible LLM API (опционально)
# Получите токен: https://openrouter.ai/keys
PRIMARY_LLM_URL=https://openrouter.ai/api/v1/chat/completions
PRIMARY_LLM_MODEL=meta-llama/llama-3.3-70b-instruct:free,qwen/qwen3-32b:free
PRIMARY_LLM_API_KEY=your_openrouter_api_key_here
# Или Yandex Cloud AliceAI
# folder_id указывается прямо в model, отдельная env-переменная не нужна
# PRIMARY_LLM_URL=https://ai.api.cloud.yandex.net/v1/chat/completions
# PRIMARY_LLM_MODEL=gpt://your_folder_id/aliceai-llm/latest
# PRIMARY_LLM_API_KEY=your_yandex_api_key_here
# Опциональный fallback
FALLBACK_LLM_URL=https://openrouter.ai/api/v1/chat/completions
FALLBACK_LLM_MODEL=openrouter/free
FALLBACK_LLM_TOKEN=
# Admin
ADMIN_USER_ID=your_telegram_user_id_hereУстановите правильные права доступа:
chmod 600 .envПростой способ (с автоматической проверкой):
./start.shСкрипт автоматически проверит конфигурацию и запустит бота.
Ручной способ:
python bot.pyПри первом запуске Telethon попросит вас авторизоваться:
- Введите код подтверждения из Telegram
- Если у вас включена двухфакторная аутентификация, введите пароль
После первого запуска сессия сохранится, и повторная авторизация не потребуется.
/start- приветствие и информация о боте/help- показать все доступные команды/context- показать текущий контекст (последний чат и период)/reset- сбросить контекст/llmconfig- показать текущие runtime-настройки LLM/limits [primary|fallback]- показать лимиты/квоты API ключа/seturl [primary|fallback] <url>- задать URL OpenAI-compatible endpoint/setmodel [primary|fallback] <model[,model2,...]>- задать одну или несколько моделей/settoken [primary|fallback] <token>- задать API ключ
Для Yandex Cloud достаточно задать:
PRIMARY_LLM_URL=https://ai.api.cloud.yandex.net/v1/chat/completionsPRIMARY_LLM_MODEL=gpt://<folder_id>/aliceai-llm/latestPRIMARY_LLM_API_KEY=<api_key>
Бот сам переключит заголовок авторизации на Authorization: Api-Key ... и возьмет x-folder-id из model URI.
/limits для Yandex Cloud не поддерживается, так как у него нет OpenRouter-style endpoint .../key.
Команды /seturl, /setmodel, /settoken сохраняют изменения в .env, поэтому настройки сохраняются после перезапуска.
Периодические расписания суммаризации сохраняются в локальной SQLite базе schedules.db.
Логи пишутся в bot.log и llm_traffic.log с ротацией (LOG_* и LLM_TRAFFIC_LOG_* в .env).
Значения по умолчанию можно изменить в config.py, а во время работы переопределять командами /seturl, /setmodel, /settoken:
# Количество сообщений для загрузки, если период не указан
DEFAULT_MESSAGES_LIMIT = 300
# Runtime LLM (OpenRouter-compatible)
DEFAULT_LLM_URL = "https://openrouter.ai/api/v1/chat/completions"
DEFAULT_LLM_MODEL = "meta-llama/llama-3.3-70b-instruct:free"
DEFAULT_LLM_TOKEN = os.getenv("PRIMARY_LLM_API_KEY", "")Бот использует primary + fallback runtime-модели для парсинга команд и анализа переписок.
По умолчанию primary — meta-llama/llama-3.3-70b-instruct:free, fallback — openrouter/free.
Изменение через /setmodel primary <model> и /setmodel fallback <model>.
Для primary и fallback можно задать список моделей через запятую:
/setmodel primary meta-llama/llama-3.3-70b-instruct:free,qwen/qwen3-32b:free
/setmodel fallback openrouter/free,deepseek/deepseek-chat-v3-0324:free
Логика выбора такая:
- внутри одной попытки бот перебирает модели по порядку без паузы
- если модель вернула
429или некачественный ответ, бот сразу пробует следующую - пауза применяется только после полного неуспешного прохода по всему списку
- затем бот повторяет тот же список моделей
После запуска бота найдите его в Telegram и отправьте /start.
📖 Полный список примеров в EXAMPLES.md
Суммаризируй что происходило в чате Работа за последние сутки
Сделай краткую выжимку из чата Проект за неделю
Что обсуждали вчера в личке с Иваном?
Что сегодня писали в чате Команда?
Покажи что было за последний час в чате Поддержка
Дай последние 500 сообщений из чата Разработка
Суммаризируй чат Работа за неделю
# Бот анализирует и запоминает чат "Работа" и период "неделя"
О чем договорились?
# Бот использует тот же чат и период!
А какие следующие шаги?
# Снова тот же чат и период
О чем говорили в чате Проект на тему дедлайнов?
До чего договорились в чате Команда, какие следующие шаги?
Что писал Александр в чате Встречи?
Найди чат "Замедл"
# Бот найдет "Замедление в такси-зоне" с 75% схожестью
- Telegram Bot API (
python-telegram-bot) - получение команд от пользователя - Telethon - доступ к истории всех чатов от вашего имени
- OpenRouter-compatible API - доступ к LLM модели
- Получение команды: Пользователь отправляет запрос боту на естественном языке
- Парсинг: Бот отправляет текст в настроенную LLM-модель для парсинга команды
- Извлечение структуры: AI возвращает JSON с названием чата, периодом и запросом
- Контекст: Если чат/период не указаны, используется сохраненный контекст
- Поиск чата: Telethon находит нужный чат (с нечетким поиском ~72% схожести)
- Загрузка истории:
- За N часов: "за последний час", "за последние 5 часов"
- За N дней: "за неделю", "за 3 дня", "вчера"
- Сегодня: "сегодня" (с начала суток)
- Последние N сообщений: "последние 100 сообщений"
- По умолчанию: последние 300 сообщений
- Обработка: История + запрос отправляются в ту же LLM-модель для анализа
- Анализ: AI анализирует переписку и генерирует ответ
- Сохранение контекста: Чат и период сохраняются для следующих запросов
- Результат: Бот отправляет ответ пользователю
Файл .env:
- ✅ Содержит все API ключи и токены
- ✅ Автоматически исключен из git (
.gitignore) - ✅ Рекомендуется установить права доступа:
chmod 600 .env - 📌 Это стандартная практика для хранения конфигурации
Telethon сессия:
- ✅ Файл
telethon_session.sessionсохраняет авторизацию - ✅ Избавляет от необходимости вводить код при каждом запуске
- ✅ Данные зашифрованы и безопасны
- ✅ Автоматически исключен из git
- 📌 Рекомендуется установить права доступа:
chmod 600 *.session
- ✅ Бот работает только с одним пользователем (проверка
ADMIN_USER_ID) - ✅ Даже если кто-то узнает токен бота, он не сможет его использовать
⚠️ Не делитесь своими API ключами и токенами
- После создания
.envфайла выполните:chmod 600 .env - После первого запуска выполните:
chmod 600 *.session - Регулярно обновляйте зависимости:
pip install -U -r requirements.txt - Храните резервные копии
.envв безопасном месте
- Python 3.11 - 3.13 (рекомендуется 3.11 или 3.12)
- Активный Telegram аккаунт
- OpenRouter API ключ (опционально, можно задать через
/settoken)
Примечание: Python 3.14 пока не поддерживается из-за несовместимости библиотек.
MIT
Если возникли проблемы, проверьте:
- 📖 docs/FAQ.md - часто задаваемые вопросы и решения
- Логи бота в консоли на наличие ошибок
- Все ли переменные окружения заполнены в
.env(бот проверяет это при запуске)
Если ваша проблема не решена:
- Проверьте docs/FAQ.md
- Проверьте docs/EXAMPLES.md для примеров использования
- Создайте Issue в репозитории с описанием проблемы и логами