Skip to content

Bosi4ok/send

Repository files navigation

Telegram Translator Bot 🇷🇺 ➡️ 🇬🇧

Автоматический переводчик постов из одного канала на другой Telegram: переводит русскоязычные посты на английский с помощью GPT‑4o и публикует их с сохранением форматирования и медиа.


✨ Функции

  • Онлайн‑мониторинг указанного канала.
  • Перевод GPT‑4o текста с сохранением форматирования HTML/Markdown, списков, эмодзи и ссылок.
  • Медиа (фото, видео) публикуются с оригинальным файлом и переведённой подписью.
  • Маппинг русских ссылок на англоязычные
  • Фильтр хэштегов — можно игнорировать определённые сообщения.
  • Управление состоянием: Администраторы могут активировать или деактивировать бота; состояние сохраняется между перезапусками.
  • Подробное логирование в файл (и при желании в отдельный канал).

🚀 Установка (Быстрый старт)

# 1. Клонируем репозиторий
$ git clone https://github.com/yourname/telegram-translation-bot.git && cd telegram-translation-bot

# 2. Создаём и активируем виртуальное окружение
$ python -m venv venv
$ source venv/bin/activate  # Windows: venv\Scripts\activate

# 3. Ставим зависимости
$ pip install -r requirements.txt

# 4. Настраиваем переменные
$ cp .env.example .env
# → Заполняем .env своими данными Telegram и OpenAI

# 5. Запускаем бота
$ python main.py

Docker‑вариант

$ docker build -t telegram-translation-bot .
$ docker run --env-file .env telegram-translation-bot

🧪 Тестирование

Для проверки корректности работы ключевых модулей проекта, в частности модуля translation.py, используются автоматизированные тесты.

  1. Убедитесь, что pytest установлен (он должен быть включен в requirements.txt):
    $ pip install pytest # Если еще не установлен через requirements.txt
  2. Для запуска всех тестов выполните команду из корневой директории проекта:
    $ pytest
    Для более детального вывода можно использовать флаг -v:
    $ pytest -v

Тесты находятся в директории tests/. По состоянию на Май 2025, все тесты для модуля перевода успешно проходят.


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

main.py — точка входа config.py — все настройки/переменные окружения translation.py — переводчик (OpenAI) publisher.py — публикация сообщений (и медиа) в целевой канал handlers/ — обработчики сообщений (текст, медиа, фильтры, команды управления) bot_state.py — асинхронное управление состоянием активности бота (вкл/выкл) с использованием aiosqlite (SQLite) logger.py — логирование с ротацией файлов


🛠 Пример рабочего процесса (Sample workflow)

А. Управление состоянием бота (Администратор):

  1. Администратор бота (указанный в ADMIN_IDS в файле .env) может отправить боту команду /control в личном чате.
  2. В ответ бот покажет текущее состояние (активен/неактивен для перевода) и предложит кнопки для активации или деактивации.
  3. Выбранное состояние сохраняется в локальной базе данных (bot_state.db) и будет учитываться даже после перезапуска бота.

Б. Обработка входящих сообщений из исходного канала (когда бот запущен):

  1. В исходном Telegram-канале (указанном в SOURCE_CHANNEL_ID) появляется новое сообщение или медиа (например, текст или фото с подписью).
  2. Проверка состояния активности: Бот сначала проверяет свое текущее состояние (активен/неактивен), установленное администратором.
    • Если бот деактивирован, он игнорирует новое сообщение и никаких дальнейших действий не предпринимает.
    • Если бот активен, он переходит к следующему шагу.
  3. Проверка фильтров: Бот анализирует сообщение на наличие исключённых хэштегов или ключевых слов (заданных в EXCLUDED_HASHTAGS и EXCLUDED_KEYWORDS).
    • Если обнаружен исключающий хэштег или ключевое слово, сообщение пропускается. Информация об этом логируется.
  4. Перевод и обработка (если не пропущено):
    • Для текстовых сообщений: Текст сообщения (с сохранением HTML-структуры) отправляется на перевод через OpenAI API (используется модель, указанная в translation.py, например, GPT-4o).
    • Для медиа (фото/видео): Если у медиа есть подпись, эта подпись переводится аналогично текстовому сообщению. Сам медиафайл (фото/видео) остается оригинальным.
  5. Публикация: Переведённое сообщение (или медиа с переведённой подписью) публикуется в целевом Telegram-канале (указанном в TARGET_CHANNEL_ID). Бот старается максимально сохранить исходное форматирование.
  6. Логирование: Все ключевые действия, этапы обработки, а также возможные ошибки подробно записываются в консоль и/или в лог-файл (LOG_FILE), и опционально в специальный лог-канал (LOG_CHANNEL_ID).

⚙️ Переменные окружения

Переменная Описание
TELEGRAM_BOT_TOKEN Токен Telegram-бота, полученный у @BotFather
SOURCE_CHANNEL_ID ID русского канала для чтения (например -100123…)
TARGET_CHANNEL_ID ID англоязычного канала для публикации перевода
LOG_CHANNEL_ID опционально — канал для логов
OPENAI_API_KEY API‑ключ OpenAI
EXCLUDED_HASHTAGS Список хэштегов, по которым сообщение пропускается
LOG_FILE опционально — имя лог-файла.

🛠️ Кастомизация

  • Другие типы медиа — добавьте соответствующие хэндлеры в handlers/media.py.
  • Дополнительные правила для ссылок — расширьте LINK_MAP в translation.py.
  • Смена модели — измените параметр model в translation.py.
  • Webhook‑деплой — вместо start_polling используйте start_webhook.

Важно

  • Бот должен быть админом в обоих каналах.
  • Для OpenAI нужен активный аккаунт и оплаченное API.

📄 Лицензия

MIT License © 2025 Bosi4ok & AndrChu Company Сделано с ❤️ на Python и aiogram.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages