Skip to content

DenisTimer/text-bot

Repository files navigation

text-bot

Приватный Telegram-бот, который приводит в порядок тексты и расшифровывает голосовые сообщения. Отправляешь боту черновик текстом или голосом — получаешь чистую, отредактированную версию, а одной кнопкой можешь переключить её стиль или разбить на сообщения для Авито.

Бот заточен под задачи Telegram-разработчика, который переписывается с клиентами: он сохраняет живой авторский тон, но убирает слова-паразиты, ошибки и «воду».

Возможности

  • Текст — присылаешь сообщение, бот возвращает вычищенный вариант.
  • Голосовые и аудиофайлы — распознаёт речь через Whisper и восстанавливает смысл: убирает слова-паразиты, чинит ошибки распознавания, разбивает на абзацы. Поддерживает голосовые, а также аудио, отправленные файлом (.ogg, .mp3, .m4a, .wav, .webm, до 25 МБ).
  • 4 стиля на выбор — переключаются inline-кнопками прямо под ответом:
    • Как сказано — чистит текст, максимально сохраняя авторский стиль;
    • Формальный — деловой, но тёплый тон;
    • Дружелюбный — лёгкий стиль для общения на «ты»;
    • Конспект — структурированная выжимка с тезисами и эмодзи.
  • Разбивка для Авито — режет длинный текст на сообщения по 500–700 символов для отправки в чат Авито.
  • Приватный доступ — бот отвечает только пользователям из белого списка (ALLOWED_USERS).

Как это работает

  1. Сообщение проходит через middleware авторизации — если Telegram ID не в белом списке, бот отвечает отказом.
  2. Голос/аудио скачивается во временный файл, распознаётся через Whisper (whisper-1), затем текст постобрабатывается моделью OpenAI.
  3. Текст улучшается моделью OpenAI (gpt-4o-mini) с системным промптом, задающим Tone of Voice и выбранный стиль.
  4. Ответ хранится в памяти (последние 100 сообщений), чтобы кнопки смены стиля и разбивки работали с исходником.

Стек

  • Python 3.12
  • aiogram 3.x — асинхронный фреймворк для Telegram Bot API
  • OpenAI API — Chat Completions (gpt-4o-mini) и Whisper (whisper-1)
  • Docker / docker-compose — для развёртывания

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

text-bot/
├── bot.py               # точка входа: инициализация бота, роутеров, middleware
├── config.py            # загрузка и валидация переменных окружения
├── handlers/            # обработчики сообщений
│   ├── start.py         #   /start и приветствие
│   ├── text.py          #   текст + callback-кнопки (смена стиля, разбивка)
│   ├── voice.py         #   голосовые сообщения
│   ├── document.py      #   аудио, отправленное файлом
│   └── state.py         #   хранилище текстов в памяти
├── services/            # интеграции с OpenAI
│   ├── openai_client.py #   инициализация клиента
│   ├── chatgpt.py       #   улучшение текста и разбивка для Авито
│   └── whisper.py       #   распознавание и постобработка речи
├── prompts/styles.py    # системные промпты и настройки стилей
├── keyboards/inline.py  # inline-клавиатуры
├── middlewares/auth.py  # проверка доступа по белому списку
├── Dockerfile
└── docker-compose.yml

Установка и запуск

Требования

  • Python 3.12+
  • Токен Telegram-бота (получить у @BotFather)
  • Ключ OpenAI API

1. Настрой окружение

Скопируй пример конфигурации и заполни своими значениями:

cp .env.example .env
TELEGRAM_TOKEN=токен_от_BotFather
OPENAI_API_KEY=ключ_OpenAI
ALLOWED_USERS=123456789,987654321   # Telegram ID через запятую

.env уже в .gitignore — секреты не попадут в репозиторий.

2. Запуск локально

pip install -r requirements.txt
python bot.py

3. Запуск в Docker

docker compose up -d --build

Бот работает в режиме long polling — внешний домен и вебхуки не нужны.

Конфигурация

Переменная Описание
TELEGRAM_TOKEN Токен бота от BotFather
OPENAI_API_KEY Ключ OpenAI API
ALLOWED_USERS Telegram ID пользователей через запятую (белый список)

При старте бот проверяет, что обязательные переменные заданы, и предупреждает, если ALLOWED_USERS пуст (тогда бот никому не отвечает).

About

Telegram-бот на aiogram: улучшает тексты и расшифровывает голосовые через OpenAI (GPT + Whisper)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors