Skip to content

IvanSCP/elapoly-schedule-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

elapoly-schedule-bot

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

Этот репозиторий содержит скрипт 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 # Файл логов

config.json

Основная настройка работы бота выполняется при помощи конфига.

bot_token и group_id

Основные переменные для работы бота.

"bot_token": "YOUR_TOKEN_HERE",
"group_id": -1001234567890,

В bot_token указывается токен созданного бота, который будет управляться скриптами.

В group_id указывается ID группы/канала, куда бот будет направлять расписание в определённое время, а также откуда бот будет брать список участников при проверке разрешения на парсинг расписания. Для каналов и большинства групп (супер-групп) в начале ID нужно добавить -100. Не забудьте назначить бота администратором для его правильной функциональности!

files

Пути к файлам, с которыми работает бот.

"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_parser

Настройки парсинга 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_parser

Настройки парсинга расписания в файле 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.

Логика поиска расписания в файле schedule.xlsx

scheduler

Планировщик задач, который отвечает за автоматическую отправку расписания в группу/канал.

"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.

buttons_text

Тексты кнопок клавиатур, отображающиеся в чате с пользователем (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": "❌ Отменить"
  }
},

messages

Шаблоны сообщений, отправляемых ботов в чаты и группы/каналы.

callback_answers

Шаблоны ответов, отправляемых на callback запросы при взаимодействии с инлайн-клавиатурами в панели управления.

reactions

Эмодзи реакций, оставляемых ботом на сообщения пользователя.

"reactions": {
  "parsing": "👨‍💻",
  "no_permission" : "😐",
  "banned": "🤡",
  "ping": "👍"
}

logger_messages

Шаблоны сообщений, выводимых в консоль и файл логов bot.log.

main.py

Основной файл, который хостит бота. В нём настроено логгирование, происходит инициализация бота, загрузка модулей, запускается планировщик задач, а также настроены обработчики комманд.

file_handler.py

Осуществляет замену или обновление файла расписания schedule.xlsx.

permission_checker.py

Проверяет права доступа пользователей.

Студентам даёт возможность парсить расписание.

Администраторам позволяет использовать команду /cp и управлять ботом при помощи панели управления.

Не даёт пользоваться парсингом заблокированным пользователям.

schedule_parser.py

Парсит расписание в файле schedule.xlsx.

Логика работы:

  1. Найти нужную дату в date_column;

  2. Спуститься на 4 строки вниз и найти ячейку с group_name;

  3. Вернуть значения ячеек, объединяя time_column с group_column в строках, расположенных ниже. Количество строк зависит от дня недели (будни - rows_to_fetch, субботы - rtf_saturday).

About

Telegram bot for search and send the schedule of classes for a specific academic group

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages