- •Проектная работа
- •Глава 1. Технологии разработки Telegram бота. 4
- •Глава 2. Разработка Telegram-бота 21
- •Перечень терминов и сокращений
- •Введение
- •Глава 1. Технологии разработки Telegram бота.
- •Обзор литературы
- •1.2 История мессенджера Telegram
- •1.3 Сравнительный анализ языков программирования для Telegram-ботов
- •1.4 Характеристика языка программирования Python
- •1.5 Обзор фреймворков и библиотек для создания ботов
- •1.6 Обзор библиотек и методов обработки изображений
- •1.7 Описание алгоритмов и форматов данных
- •1.7.1. Цветовые модели и форматы данных
- •1.7.2 Алгоритм палитризации
- •1.7.3 Алгоритм классификации изображений
- •1.7.4 Алгоритм сжатия jpeg
- •1.7.5 Алгоритм сжатия png
- •Глава 2. Разработка Telegram-бота
- •2.1 Планируемые возможности бота и подходы к их реализации
- •2.2 Разработка модуля обработки изображений
- •2.3 Разработка пользовательского интерфейса
- •2.4 Разработка функций для работы с изображениями и передачи данных
- •2.4.1 Импорты, настройки и словари
- •2.4.2 Пользовательские настройки
- •2.4.3 Функции обработки изображений
- •2.4.4 Функции работы с пользовательскими данными
- •2.4.6 Обработчики команд и сообщений
- •2.4.7 Основной цикл
- •2.5 Описание разработки Telegram-бота
- •2.6 Инструкция пользователя
- •Список литературы
- •Приложение
2.4.6 Обработчики команд и сообщений
Модуль содержит логику взаимодействия с пользователем через Telegram API. Все команды обрабатываются асинхронно, что позволяет боту одновременно обслуживать множество запросов. Команды настроек включают в себя:
· /start — приветствие и краткая справка;
· /quality <значение> — установка качества JPEG;
· /target <КБ> — установка целевого размера файла;
· /maxsize <ширина>x<высота> — ограничение разрешения;
· /auto on|off — включение/выключение автоопределения формата;
· /palette <64|128|256> — установка глубины палитры PNG;
· /strip_exif on|off — включение/выключение удаления EXIF.
· /pdf_start — начало сессии сборки PDF;
· /pdf_done — завершение сессии и отправка готового PDF.
2.4.7 Основной цикл
Цикл работает асинхронно и обрабатывает все входящие сообщения и файлы в реальном времени, обеспечивая высокую производительность даже при одновременной работе множества пользователей.
Является точкой входа в приложение. Содержит:
· Инициализацию бота через aiogram.Bot(token=...);
· Создание диспетчера с использованием MemoryStorage;
· Регистрацию всех обработчиков команд и сообщений;
· Запуск бота в режиме polling через dp.start_polling().
Ключевые особенности реализации:
· Все операции ввода-вывода выполняются асинхронно;
· Обработка изображений происходит в памяти без сохранения временных файлов на диск;
· Поддержка двух режимов загрузки: как документ (без сжатия Telegram) и как фото (уже сжатое Telegram);
· Интеллектуальный выбор формата вывода на основе анализа содержимого изображения.
Цикл работает асинхронно и обрабатывает все входящие сообщения и файлы в реальном времени, обеспечивая высокую производительность даже при одновременной работе множества пользователей.
2.5 Описание разработки Telegram-бота
Telegram-бот для сжатия изображений разработан на языке Python с использованием асинхронного фреймворка aiogram 3.x, что обеспечивает высокую производительность и возможность одновременной обработки запросов от множества пользователей. В отличие от традиционных ботов с пошаговыми сценариями, в данном проекте применена модульная архитектура без использования машины состояний (FSM), что позволило создать более гибкую и отзывчивую систему, ориентированную на потоковую обработку файлов. Основное внимание уделено эффективности алгоритмов сжатия, конфиденциальности данных и удобству пользовательского взаимодействия через интуитивно понятные команды.
Архитектура бота построена по принципу разделения ответственности. Ключевые компоненты системы включают:
1. Модуль конфигурации — отвечает за загрузку переменных окружения (токен бота, рабочий каталог) и установку параметров по умолчанию.
2. Модуль обработки изображений — содержит функции для чтения, анализа, сжатия и конвертации графических файлов.
3. Модуль управления настройками — обеспечивает сохранение и загрузку персональных параметров пользователей в формате JSON.
4. Модуль PDF-сессий — управляет временным хранением изображений в оперативной памяти для последующей сборки в PDF-документ.
5. Модуль обработчиков команд — реализует логику взаимодействия с пользователем через Telegram API.
Сценарий взаимодействия с ботом начинается с команды /start. При её получении бот выводит подробную справку о доступных командах и создаёт для пользователя персональный профиль настроек (если он ещё не создан). В отличие от систем, требующих регистрации, здесь идентификация происходит автоматически на основе Telegram ID пользователя, что обеспечивает моментальный старт работы без дополнительных шагов.
Процесс обработки изображения активируется при загрузке пользователем графического файла (как документа или фотографии). Алгоритм работы включает следующие этапы:
1. Загрузка и валидация — бот определяет тип файла, проверяет его корректность и загружает байты в память. Приоритет отдаётся документам (без дополнительного сжатия Telegram), что сохраняет исходное качество.
2. Анализ изображения — функция classify_image() анализирует характеристики изображения: количество уникальных цветов, резкость краёв, распределение яркости. На основе эвристического алгоритма определяется тип контента: «фотография» (непрерывные тона, плавные переходы) или «графика» (чёткие границы, ограниченная палитра).
3. Применение настроек пользователя — загружаются персональные параметры из JSON-файла: качество сжатия, целевой размер, ограничения разрешения, флаг удаления EXIF.
4. Адаптивное сжатие — в зависимости от типа изображения и настроек применяется один из алгоритмов:
· Для фотографий: JPEG-сжатие с заданным уровнем качества (1–95) и прогрессивной развёрткой. При установленном целевом размере выполняется бинарный поиск оптимального значения качества.
· Для графики: конвертация в палитровый PNG с адаптивной палитрой (до 256 цветов) и дизерингом Флойда-Штайнберга, что сохраняет чёткость контуров при значительном уменьшении размера.
5. Возврат результата — сжатое изображение отправляется пользователю как файл-документ, что предотвращает дополнительное сжатие со стороны Telegram.
Режим сборки PDF реализован через сессионный механизм. При получении команды /pdf_start для пользователя создаётся временная коллекция в оперативной памяти. Все последующие загруженные изображения накапливаются в этой коллекции в порядке получения. По команде /pdf_done вызывается функция bytes_to_pdf(), которая:
1. Конвертирует каждый набор байтов в JPEG-формат для унификации
2. Объединяет все изображения в единый PDF-документ с помощью библиотеки img2pdf
3. Отправляет готовый PDF пользователю как документ
4. Очищает сессию из памяти
Система пользовательских настроек использует файловое хранилище вместо базы данных. Каждый пользователь имеет собственную директорию data/{user_id}/, содержащую файл prefs.json. Это решение обеспечивает:
· Простоту реализации и отладки
· Отсутствие зависимостей от СУБД
· Лёгкое резервное копирование и миграцию данных
· Изоляцию данных между пользователями
Обработка команд настройки (например, /quality 90, /maxsize 1920x1080) происходит через регулярные выражения, которые извлекают числовые параметры из текста сообщения. После валидации значения сохраняются в JSON-файл пользователя и применяются ко всем последующим операциям.
Обработка ошибок включает комплексную валидацию:
· Проверка поддерживаемых форматов изображений
· Контроль корректности числовых параметров
· Обработка повреждённых файлов
· Уведомление пользователя о возникших проблемах на русском языке
Запуск и функционирование бота обеспечивается асинхронным циклом обработки событий через asyncio. При старте система:
1. Загружает конфигурацию из переменных окружения
2. Создаёт необходимые директории для хранения данных
3. Инициализирует обработчики команд и сообщений
4. Запускает бесконечный цикл опроса серверов Telegram (polling)
Все операции ввода-вывода (загрузка файлов, чтение настроек, обработка изображений) выполняются асинхронно, что позволяет эффективно использовать ресурсы системы даже при высокой нагрузке.
Таким образом, Telegram-бот реализует полноценную систему оптимизации изображений с интеллектуальным выбором алгоритмов сжатия, поддержкой пакетной обработки и персонализированными настройками. Использование асинхронной архитектуры, адаптивных алгоритмов обработки графики и файлового хранилища настроек обеспечивает высокую производительность, масштабируемость и удобство использования без необходимости сложных настроек или регистрации.
