keimy@system:~/projects/telegram-schedule-bot$ ./run_overview.sh --extended
███████╗██████╗ ██╗  ██╗███████╗██████╗ ██╗   ██╗██╗     ███████╗
██╔════╝██╔════╝██║  ██║██╔════╝██╔══██╗██║   ██║██║     ██╔════╝
███████╗██║     ███████║█████╗  ██║  ██║██║   ██║██║     █████╗  
╚════██║██║     ██╔══██║██╔══╝  ██║  ██║██║   ██║██║     ██╔══╝  
███████║╚██████╗██║  ██║███████╗██████╔╝╚██████╔╝███████╗███████╗
╚══════╝ ╚═════╝╚═╝  ╚═╝╚══════╝╚═════╝  ╚═════╝ ╚══════╝╚══════╝

Automated Schedule & Alert Service

Telegram-бот для автоматического получения расписания и замен с поддержкой текстового вывода и генерации графических карточек.

Сервис выступает прослойкой между REST API колледжа и пользователем. Он запрашивает данные API, агрегирует их в быстрый локальный кэш, высчитывает чётность недели по иркутскому времени и подсвечивает замены. Пользователи могут выбрать удобный вид ответа — лаконичный текст с эмодзи или сгенерированную картинку.

keimy@system:~/projects/telegram-schedule-bot$
// LOGO
EIK Schedule Bot Logo
TECHNOLOGIES & STACK
Python Python 3.8+
aiogram 2.25
SQLite3
Pillow
Pilmoji
REST API
pytz
Docker
keimy@system:~/projects/telegram-schedule-bot$ ./inspect_modules.sh --all

// АРХИТЕКТУРА И МОДУЛИ

// COMPONENT 01

Парсер REST API & Локальный кэш

Модуль взаимодействия с API колледжа (http://scheduleapi.iek.irk.ru/API/). Запрашивает расписание групп, чётность недели (parityWeek) и сохраняет атомарный кэш cache/{курс}/{группа}.

[ 01 ]
Метод кэширования: опрашивает 38+ групп ИЭК и локально сохраняет структуры для работы без задержек.
[ 02 ]
Определение чётности: определяет чётность недели через эндпоинт API.
[ 03 ]
Формат хранения: кэш распределен по папкам курсов (cache/1/, cache/2/, cache/3/, cache/4/).
Python Python 3.8+
requests
JSON Cache Storage
EIK Schedule Bot bot • @eik_schedule_bot
Today // Asia/Irkutsk (UTC+8)
/start 08:00 AM
Привет! Я бот расписания ИЭК.

Текущая неделя: Нечётная (parityWeek: 1)
Выбранная группа: 3-ИС (в users_group)
Формат выдачи: Моноширинный текст (standart)
Кэш API: < 0.12s (scheduleapi.iek.irk.ru)

Выберите команду в меню ниже: 08:00 AM
// COMPONENT 02

Форматирование расписания

Преобразует данные API в выровненный моноширинный текст. Переносит длинные названия предметов (до 19 символов), подставляет расписание звонков по дням недели и выделяет замены.

[ 01 ]
Автоперенос: перенос длинных дисциплин и ФИО преподавателей без разрыва слов.
[ 02 ]
Учёт замен: подстановка нового кабинета и преподавателя при оперативных изменениях.
[ 03 ]
Разделительные линии: автоматическая вставка разделителей ———————————————————— между парами.
Python Python 3.8+
String Normalizer
EIK Schedule Bot bot
Форматирование текста
/today 08:18 AM
Расписание (Моноширинный текст)
Авто-перенос длинных слов: split_text(19ch)
1 $ Разработка моб.   08:30-10:00 
    приложений          2К-309
    Луковников О.О.
————————————————————————————————————
2 $ Иностранный язык   10:10-11:40 
    Павлюковская        1К-413
    Н.С.//Семёнова Ж.Ю.
08:18 AM
// COMPONENT 03

Графический движок PIL

Генератор графических карточек расписания в формате PNG. Форматирует текст дисциплин, отрисовывает эмодзи и генерирует изображения расписания для удобного просмотра на мобильных устройствах.

[ 01 ]
Моноширинный шрифт: использование шрифта Source Code Pro (22px) для ровной читаемой верстки предметов и аудиторий.
[ 02 ]
Рендеринг эмодзи: интеграция библиотеки Pilmoji для корректного отображения эмодзи часов и меток замен.
[ 03 ]
Динамический размер: автоматическое измерение высоты текста и точное кадрирование изображения под количество пар.
Pillow (PIL)
Pilmoji
SourceCodePro Font
EIK Schedule Bot bot
Формат Photo
/format -> PNG Photo 08:20 AM
Расписание в формате PNG Картинки:

РАСПИСАНИЕ ИЭК — 3-ИС (24.07)
1. Разработка моб. приложений .. Ауд. 2К-309 (08:30)
2. Иностранный язык .......... Ауд. 1К-413 (10:10)
3. Разработка БД ............ Ауд. 2К-212 [ЗАМЕНА]
08:21 AM
// COMPONENT 04

Модуль времени & Эмодзи-часов

Временное ядро бота на базе часового пояса Иркутска. Вычисляет даты на «вчера», «сегодня», «завтра», дни недели и динамически сопоставляет время пары с эмодзи часов.

[ 01 ]
Динамические эмодзи: сопоставление времени пары с эмодзи часов (08:30 -> , 10:10 -> , 12:10 -> ).
[ 02 ]
Часовой пояс Asia/Irkutsk: точный расчет расписания звонков независимо от местоположения сервера.
[ 03 ]
Список дат: генерация списка дат всей текущей недели на русском языке.
pytz (Asia/Irkutsk)
datetime
locale (ru_RU)
EIK Schedule Bot bot
Утренний Пуш // 07:30 AM (Irkutsk Time)
УТРЕННЕЕ УВЕДОМЛЕНИЕ (Asia/Irkutsk)

Доброе утро! Расписание на сегодня:
 1 пара (08:30) — Моб. приложения (2К-309)
 2 пара (10:10) — Иностранный язык (1К-413)
 3 пара (12:20) — Разработка БД (2К-212) 
Первая пара через 1 час! 07:30 AM
// COMPONENT 05

Поисковый движок по преподавателям

Модуль глобального поиска пар конкретного преподавателя во всех кэшированных группах колледжа на текущий день с учётом замен.

[ 01 ]
Поиск по подстроке: поиск совпадений по фамилии преподавателя без учета регистра.
[ 02 ]
Учёт замен преподавателей: проверка как штатного расписания, так и оперативных правок.
[ 03 ]
Сортировка по времени: автоматическое объединение и ранжирование пар преподавателя по номерам.
Python Python 3.8+
JSON Search
Multi-Group Scanner
EIK Schedule Bot bot
Поиск по преподавателям
/teacher_today Луковников 08:24 AM
Расписание преподавателя: Луковников О.О. (Сегодня)
Найдено 2 пары во всех группах ИЭК:
1 $ 3-ИС // Разработка моб. приложений
    08:30-10:00  | Ауд. 2К-309
————————————————————————————————————
2 $ 2-ТИТО // Основы программирования
    10:10-11:40  | Ауд. 2К-309
08:24 AM
// COMPONENT 06

Управление настройками SQLite

Модуль работы с локальной базой данных SQLite. Хранит индивидуальные привязки групп (users_group) и выбранный формат отклика (users_format) для каждого Telegram user_id.

[ 01 ]
users_group: таблица привязки user_id -> group_name (например, '3-ИС', '2-КСК').
[ 02 ]
users_format: таблица формата выдачи user_id -> format_name ('text' или 'photo').
[ 03 ]
CRUD-операции: быстрые точечные SQL-запросы без тяжелых ORM-настроек.
SQLite3
users.db
aiogram FSM
EIK Schedule Bot bot
Выбор группы // SQLite db/users.db
/group 08:25 AM
Выберите ваш курс для записи в БД: 08:25 AM
Группа 3-ИС сохранена!
Запись обновлена в SQLite (users_group). 08:25 AM