- •Проектная работа
- •Глава 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.4 Функции работы с пользовательскими данными
Этот модуль отвечает за управление персональными настройками пользователей и организацию их данных в локальной файловой системе. Вместо использования полноценной базы данных была выбрана файловая система, что упрощает развертывание, отладку и обеспечивает прозрачность хранения данных. Каждый пользователь имеет изолированное пространство в виде отдельной директории, названной по его Telegram ID.
Управление настройками:
1. user_dir(user_id: int) -> Path — создаёт и возвращает путь к персональной директории пользователя. Если директория не существует, она создаётся автоматически. Это обеспечивает готовность файловой системы к сохранению данных при первом обращении пользователя к боту.
2. prefs_path(user_id: int) -> Path — возвращает полный путь к файлу настроек пользователя prefs.json. Файл хранится внутри персональной директории и содержит все персонализированные параметры обработки изображений.
3. load_prefs(user_id: int) -> Dict[str, Any] — загружает настройки пользователя из JSON-файла. Если файл не существует или повреждён, функция возвращает значения по умолчанию. При загрузке происходит слияние дефолтных настроек и пользовательских, что гарантирует наличие всех необходимых полей. Пример работы:
· Проверяется существование файла prefs.json.
· Если файл есть, он читается и парсится как JSON.
· Если файла нет или он некорректен, возвращается копия DEFAULT_PREFS.
· Настройки пользователя имеют приоритет над дефолтными.
4. save_prefs(user_id: int, prefs: Dict[str, Any]) -> None — сохраняет обновлённые настройки пользователя в JSON-файл. Функция выполняет слияние текущих настроек с дефолтными, чтобы избежать потери обязательных полей, затем сериализует данные в формат JSON с отступами для удобства чтения и сохраняет файл в кодировке UTF-8.
2.4.5 PDF-сессии:
Модуль PDF-сессий реализует механизм временного хранения изображений в оперативной памяти для последующей сборки в единый PDF-документ. Это позволяет пользователю последовательно загружать несколько изображений, которые затем будут объединены в правильном порядке без необходимости их повторной загрузки или сохранения на диск.
Структура хранения сессий:
PDF_SESSIONS: Dict[int, List[bytes]] = {}
Рис. 17 – Словарь для сессий
· Ключ: user_id (int) — идентификатор пользователя в Telegram.
· Значение: список байтовых строк List[bytes], каждая из которых представляет собой исходное (несжатое) изображение.
Жизненный цикл PDF-сессии:
1. Инициация сессии — при получении команды /pdf_start для пользователя создаётся пустой список в словаре PDF_SESSIONS. Все последующие загруженные изображения будут добавляться в этот список.
2. Накопление изображений — каждое изображение, отправленное пользователем после начала сессии, сохраняется в виде исходных байтов (без сжатия) в соответствующем списке. Это гарантирует, что при сборке PDF будут использованы файлы максимального качества.
3. Завершение сессии — при получении команды /pdf_done:
· Из словаря извлекается список изображений пользователя.
· Если список пуст, пользователь получает соответствующее уведомление.
