Русскоязычный Telegram-бот на базе OpenAI с характером. Представьте себе AI-друга, который может общаться, рисовать картинки и понимать голосовые сообщения. Ну и говорит он по-русски, потому что так надо.
Gopobot — это полнофункциональный Telegram-бот, который приносит мощь GPT в ваши чаты. Это как иметь очень умного (и слегка саркастичного) друга, который:
- 💬 Общается с контекстом - Он реально помнит, о чём вы говорили (до 100 сообщений!)
- 🎨 Рисует что угодно - Просто скажи "нарисуй" и опиши, что хочешь
- 🎤 Понимает голосовые сообщения - Отправь аудио, получи текстовый ответ (на базе Whisper)
- 📍 Знает географию - Поделись локацией и он расскажет, что рядом
- 🧠 Держит фокус - Ограничение частоты запросов, чтобы предотвратить спам (даже ботам нужны границы)
Тебе понадобится:
- Python 3.12 (да, именно 3.12)
- Redis (для хранения истории чата)
- FFmpeg (для магии с аудио)
- Токен Telegram-бота (получи у @BotFather)
- API-ключ OpenAI (потому что AI не бесплатен, увы)
- Клонируй репозиторий:
git clone https://github.com/yourusername/gopobot.git
cd gopobot- Установи зависимости с uv (потому что Poetry — это уже вчерашний день):
pip install uv
uv sync- Настрой секреты:
Создай файл
.envв корне проекта:
TOKEN=твой_токен_telegram_бота
OPENAI_API_KEY=твой_ключ_openai
ADMIN_USERS=твой_telegram_user_id,другой_admin_id
REDIS_URL=redis://localhost:6379/0
LIMIT_TIME=86400
LIMIT_MESSAGES=20
MAX_HISTORY_MESSAGES=100- Запусти Redis:
docker run -d -p 6379:6379 redis:7-alpine- Запусти бота:
uv run python -m src.botХочешь запустить в продакшене? Без проблем:
docker-compose up -dИли если ты фанат Docker Swarm:
docker stack deploy -c docker-compose.yml gopobotКогда бот запущен, найди его в Telegram и:
/start- Разбудить бота/help- Получить помощь/reset- Очистить историю разговора
Обычное общение:
Ты: Привет! Как дела?
Бот: *отвечает с AI-мудростью*
Генерация изображений:
Ты: нарисуй космического кота на луне
Бот: *отправляет AI-сгенерированное изображение космического кота*
Голосовые сообщения:
Ты: *отправляет голосовое сообщение на русском*
Бот: *расшифровывает его и отвечает*
Поделиться локацией:
Ты: *делится GPS-координатами*
Бот: *рассказывает о достопримечательностях рядом*
Сбросить разговор:
Ты: сброс
Бот: История сообщений очищена!
┌─────────────────┐
│ Telegram Bot │
└────────┬────────┘
│
├──► Текстовые сообщения ──► GPT-4.1-nano ──► Ответ
│
├──► "нарисуй..." ──► DALL-E ──► Изображение
│
├──► Голосовые сообщения ──► Whisper ──► Текст ──► GPT
│
└──► Локация ──► GPT (с координатами)
└──► Redis (хранит историю разговоров)
- Python 3.12 - Язык богов
- python-telegram-bot - Обёртка для Telegram API
- OpenAI API - GPT-4.1-nano, DALL-E, Whisper
- Redis - Быстрое хранилище в памяти для истории чатов
- Docker - Потому что мы профессионалы
- uv - Молниеносно быстрый менеджер пакетов Python
Вся конфигурация выполняется через переменные окружения:
| Переменная | Описание | По умолчанию |
|---|---|---|
TOKEN |
Токен Telegram-бота | Обязательно |
OPENAI_API_KEY |
Ключ API OpenAI | Обязательно |
ADMIN_USERS |
ID админов через запятую | Обязательно |
REDIS_URL |
Строка подключения к Redis | redis://localhost:6379/0 |
LIMIT_TIME |
Временное окно лимита (секунды) | 86400 (24 часа) |
LIMIT_MESSAGES |
Макс. сообщений за период | 20 |
MAX_HISTORY_MESSAGES |
Размер контекста разговора | 100 |
Бот запоминает ваш разговор через Redis. Он хранит до MAX_HISTORY_MESSAGES сообщений и включает их в контекст при общении с GPT.
Пользователи получают дневной лимит сообщений (по умолчанию: 20 сообщений за 24 часа). Админы освобождены от этого лимита, потому что власть развращает, и нам это нравится.
Просто начни сообщение с "нарисуй" или "рисуй", и бот передаст остальную часть твоего сообщения в DALL-E. Генерирует изображения 1024x1024.
Отправь голосовое сообщение, и бот:
- Конвертирует его из OGG в MP3 (потому что так надо)
- Отправит в Whisper для расшифровки
- Обработает расшифрованный текст как обычное сообщение
Нашёл баг? Хочешь добавить фичу? Pull request'ы приветствуются! Просто, пожалуйста:
- Сохраняй стиль кода консистентным
- Добавляй комментарии на русском или английском (мы тут билингвы)
- Тестируй свои изменения (хотя у нас пока нет тестов 😅)
Этот проект open source и доступен под MIT License.
Есть проблемы? Нашёл баг? Открой issue на GitHub, и я постараюсь помочь!
Сделано с ❤️ и кучей API-вызовов