# MyFirstProgramm Лёгкий Telegram-бот на Python (aiogram + Playwright) для автоматической проверки и рассылки расписаний, а также набора аддонов. ## Краткое описание Проект периодически проверяет расписание на сайте (через Playwright), делает скриншоты нужных фрагментов, вычисляет хеш (MD5) и отправляет/закрепляет изображение в целевых чатах Telegram только при изменении (чтобы не флудить чат). Также в `addons/` есть дополнительные модули (мини-приложения). ## Структура (важные файлы/папки) - `main.py` — точка входа приложения (запуск бота). - `config.py` — конфигурация (переменные окружения). - `services/` — сервисы: `schedule_service.py`, `watcher_service.py` (логика слежки/хэшей). - `models/state.py` — in-memory состояние бота (кэши, last_clip_hash и т.д.). - `addons/` — набор дополнительных модулей (каждый аддон экспортирует `register` / `unregister`). - `requirements.txt` — зависимости. ## Быстрый старт (локально) 1. Установите зависимости (рекомендуется виртуальное окружение): ```bash python -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` 2. Создайте `.env` (или экспортируйте переменные окружения): - `TELEGRAM_BOT_TOKEN` — токен бота - (опционально) `DEEPGRAM_API_KEY`, `ACCESS_TOKEN` — если используются аддоны Создайте файл `.env` рядом с `config.py`: ```env TELEGRAM_BOT_TOKEN=your_bot_token_here #DEEPGRAM_API_KEY=... #ACCESS_TOKEN=... ``` 3. Запустите бота (пример): ```bash python main.py ``` (В вашем окружении запуск может быть оформлен скриптом — например `./Desktop/my.sh`.) ## Конфигурация Основные настройки находятся в `config.py`. Обратите внимание, что `Config` сейчас поднимает исключение, если `TELEGRAM_BOT_TOKEN` не задан. ## Что изменилось (коротко) - Добавлена проверка MD5-хеша скриншота в `services/watcher_service.py` — теперь бот отправляет фото и закрепляет сообщение только при первом обнаружении и при изменениях. - Исправлен импорт в `addons/x_days_to/__init__.py` (модуль назывался `x_days_to.py`, вместо отсутствующего `handlers`). (Более полный список изменений — в `CHANGELOG.md`.)