
Этот репозиторий содержит скрипт Telegram-бота, созданного на языке python с использованием библиотеки aiogram. Его основное назначение - парсинг расписания с сайта Елабужского Политехнического Колледжа и его отправка пользователю в чат и/или канал Telegram. Настраивается индивидуально под конкретную академическую группу.
Отправка расписания на сегодня/завтра: Пользователи могут запросить расписание на сегодня или завтра с помощью команд /today и /tomorrow или кнопок на клавиатуре.
Автоматическая отправка по расписанию: Бот может автоматически отправлять расписание на завтра группе в указанное время (используя планировщик задач на основе cron).
Логирование: все действия и ошибки регистрируются в файле bot.log и консоли.
Управление ботом: Администраторы при помощи команды /cp могут вызвать панель управления, в которой имеется возможность замены/обновления файла расписания в один клик и управления разрешениями пользователей.
/today: Парсит и направляет расписание на сегодня.
/tomorrow: Парсит и направляет расписание на завтра.
/getfile: Отправляет текущий файл расписания отправителю запроса.
/ping: Отвечает простым текстовым сообщением, подтверждая работоспособность бота.
/cp: Control panel. Администраторы получают панель управления ботом.
Для предотвращения высокой нагрузки на сервер, парсить расписание могут только пользователи, находящиеся в определённой группе/канале (по логике, студенты).
Имеется возможность выдать доступ пользователям, отсутствующим в группе/канале, путём добавления их ID в файл permissions.txt при помощи панели управления.
Таким же образом устроена выдача роли *администратора (administrators.txt) и занесение недоброжелательных пользователей в чёрный список (blacklist.txt).
elapoly-schedule-bot/
│
├── main.py # Главный файл с ботом
├── config.json # Конфигурационный файл
│
├── modules/ # Директория с модулями
│ ├── __init__.py # Пустой файл, делающий modules пакетом
│ ├── permission_checker.py # Проверка доступов
│ ├── schedule_parser.py # Поиск и выдача расписания
│ └── file_handler.py # Работа с файлами
│
├── files/ # Директория с Файлами
│ ├── permissions.txt # Файл с ID пользователей, которые могут парсить расписание (если отсутствуют в группе/канале)
│ ├── administrators.txt # Файл с ID администраторов
│ ├── blacklist.txt # Файл с ID заблокированных пользователей
│ ├── schedule.xlsx # Файл с расписанием
|
└── logs/
└── bot.log # Файл логов
Основная настройка работы бота выполняется при помощи конфига.
Основные переменные для работы бота.
"bot_token": "YOUR_TOKEN_HERE",
"group_id": -1001234567890,В bot_token указывается токен созданного бота, который будет управляться скриптами.
В group_id указывается ID группы/канала, куда бот будет направлять расписание в определённое время, а также откуда бот будет брать список участников при проверке разрешения на парсинг расписания. Для каналов и большинства групп (супер-групп) в начале ID нужно добавить -100. Не забудьте назначить бота администратором для его правильной функциональности!
Пути к файлам, с которыми работает бот.
"files": {
"log_file": "logs/bot.log",
"permissions_file": "files/permissions.txt",
"schedule_file": "files/schedule.xlsx",
"blacklist_file": "files/blacklist.txt",
"admins_file": "files/administrators.txt"
},Настройки парсинга URL страницы сайта ЕПК.
"url_parser": {
"base_url": "https://edu.tatar.ru",
"schedule_page_url": "https://edu.tatar.ru/elabuga/page891.htm/page868242.htm",
"schedule_link_text": "Расписание 4 курс"
},schedule_page_url - URL страницы сайта ЕПК, на которой находятся тексты с гиперссылками на файлы расписания.
schedule_link_text - текст гиперссылки, которая ведёт на нужный файл расписания.
base_url - основа для ссылки к файлу, к которой добавляется ссылка на файл для последующей загрузки.
Настройки парсинга расписания в файле schedule.xlsx.
"schedule_parser": {
"target_sheet": "ОЭЗ",
"date_column": "B",
"time_column": "B",
"group_column": "E",
"group_name": "215-1",
"rows_to_fetch": 16,
"rtf_saturday": 10
},В target_sheet указывается имя листа, на котором будет осуществляться поиск расписания для вашей группы.
В date_column и time_column по умолчанию указана колонка B, так как в ней находятся ячейки с датами и временем.
group_column - колонка, в которой располагается расписание вашей группы
group_name - номер вашей группы
rows_to_fetch и rtf_saturday определяют количество строк, в которых расположено расписание.
Файл расписания ЕПК построен шаблонно: для будней выделено 16 строк, а для суббот - 10.
Планировщик задач, который отвечает за автоматическую отправку расписания в группу/канал.
"scheduler": {
"is_activated": true,
"settings": "00 22 * * 0,1,2,3,4,6"
},Настройка написана в settings в виде выражения cron. По умолчанию указано выражение 00 22 * * 0-5, что означает выполнение каждый понедельник-пятницу и воскресенье (sunday-friday) в 22:00.
Может быть деактивирован путём указания false в is_activated.
Тексты кнопок клавиатур, отображающиеся в чате с пользователем (reply) и в панели управления для администраторов (inline).
"buttons_text": {
"reply": {
"today": "Сегодня",
"tomorrow": "Завтра"
},
"inline": {
"dummy1": "📁 Файл расписания",
"replace_file": "🗃️ Заменить", "update_schedule": "🔄️ Обновить",
"dummy2": "🪪 Пользователи",
"permissions": "👨🎓 Доступ", "admins": "👑 Админы", "blacklist": "🛑 Баны",
"add_id": "➕", "remove_id": "➖", "list_ids": "📋",
"back_to_control": "◀️ Назад",
"cancel_action": "❌ Отменить"
}
},Шаблоны сообщений, отправляемых ботов в чаты и группы/каналы.
Шаблоны ответов, отправляемых на callback запросы при взаимодействии с инлайн-клавиатурами в панели управления.
Эмодзи реакций, оставляемых ботом на сообщения пользователя.
"reactions": {
"parsing": "👨💻",
"no_permission" : "😐",
"banned": "🤡",
"ping": "👍"
}Шаблоны сообщений, выводимых в консоль и файл логов bot.log.
Основной файл, который хостит бота. В нём настроено логгирование, происходит инициализация бота, загрузка модулей, запускается планировщик задач, а также настроены обработчики комманд.
Осуществляет замену или обновление файла расписания schedule.xlsx.
Проверяет права доступа пользователей.
Студентам даёт возможность парсить расписание.
Администраторам позволяет использовать команду /cp и управлять ботом при помощи панели управления.
Не даёт пользоваться парсингом заблокированным пользователям.
Парсит расписание в файле schedule.xlsx.
Логика работы:
-
Найти нужную дату в
date_column; -
Спуститься на 4 строки вниз и найти ячейку с
group_name; -
Вернуть значения ячеек, объединяя
time_columnсgroup_columnв строках, расположенных ниже. Количество строк зависит от дня недели (будни -rows_to_fetch, субботы -rtf_saturday).
