Бот для Telegram показывающий расписание занятий. Вы можете протестировать его работу, перейдя по ссылке: @UniversityScheduleBot
Docker Hub: paladin705/telegram_schedule_bot
Бот использует Telegram Bot API и Webhook'и для обработки входящих сообщений. Адрес Webhook'а: http://<WEBHOOK_HOST>:<WEBHOOK_PORT>
. Можно установить Webhook, открыв браузер и перейдя по адресу: http://<WEBHOOK_HOST>:<WEBHOOK_PORT>/reset_webhook. Для работы бота, необходимо создать SSL сертификаты для Webhook'а.
Бот реализованный в docker контейнере не имеет прямого доступа к сети и использует сокет /bot/socket/bot.sock
для обработки запросов. Чтобы передать поступающие запросы боту, можно использовать nginx reverse proxy для передачи их на сокет бота. Также в настройках nginx reverse proxy необходимо указать пути к SSL сертификатам. Без них, бот работать не будет.
Бот использует СУБД PostgreSQL для хранения данных.
Для включения дополнительных функций необходимо установить следующие модули:
- Модуль для автоматической отправки расписания: autoposting
- Модуль для работы с базой данных бота (добавление/изменение/удаление групп и файлов расписания): api_server
На Linux, создать сертифкаты с помощью OpenSSL можно следующим образом:
openssl genrsa -out webhook_pkey.pem 2048
openssl req -new -x509 -days 3650 -key webhook_pkey.pem -out webhook_cert.pem
При вводе пункта Common Name, нужно написать IP адрес сервера, на котором будет запущен бот. После завершения создания сертификата, появятся два файла: webhook_pkey.pem и webhook_cert.pem.
Далее представлен пример конфигурации nginx reverse proxy:
server {
listen 8443 ssl;
ssl_certificate /usr/src/tg_bot_ssl_certificate/webhook_cert.pem;
ssl_certificate_key /usr/src/tg_bot_ssl_certificate/webhook_pkey.pem;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/usr/src/tg_bot_socket/bot.sock;
}
}
В примере были использованы следующие настройки и пути к файлам:
- Порт сервера -
8443
- Путь до webhook_cert.pem -
/usr/src/tg_bot_ssl_certificate/webhook_cert.pem
- Путь до webhook_pkey.pem -
/usr/src/tg_bot_ssl_certificate/webhook_pkey.pem
- Путь до сокета бота -
http://unix:/usr/src/tg_bot_socket/bot.sock
Для запуска docker контейнера загружаемого с Docker Hub можно использовать следующую команду:
docker run \
-v ./tg_bot/socket:/bot/socket \
-v ./tg_bot/log:/bot/log \
-e DB_NAME=<Введите значение параметра> \
-e DB_USER=Введите значение параметра<> \
-e DB_PASSWORD=<Введите значение параметра> \
-e DB_HOST=<Введите значение параметра> \
-e TELEGRAM_API_TOKEN=<Введите значение параметра> \
-e STATISTIC_TOKEN=<Введите значение параметра> \
-e WEEK_TYPE=<Введите значение параметра> \
-e TZ=<Введите значение параметра> \
paladin705/telegram_schedule_bot:latest
/bot/socket
- В данной директории находится сокет бота:bot.sock
. Он используется для обработки запросов к боту/bot/log
- Директория где располагаются логи бота
DB_NAME
- Название базы данных (БД) PostgreSQLDB_USER
- Имя пользователя БДDB_PASSWORD
- Пароль пользователя БДDB_HOST
- Адрес БДTELEGRAM_API_TOKEN
- Токен Telegram Bot APISTATISTIC_TOKEN
- Токен для отправки статистики на chatbase.com. Необязательный параметр (На данный момент не используется - Chatbase прекращает работу 27 сентября 2021 года)WEEK_TYPE
- Тип первой недели семестра 0 - числитель, 1 - знаменательTZ
- Часовой пояс. По умолчаниюEurope/Moscow
Бот принимает текстовые команды, а также команды отправленные с помощью кнопок клавиатуры для ботов.
Команда | Описание команды |
---|---|
/start | Выводит стартовое сообщение и предложение зарегистрироваться |
/help | Выводит информацию о боте и список доступных команд |
/registration | Выбор ВУЗа, факультета и группы для вывода расписания |
/send_report <сообщение> | Можно отправить информацию об ошибке или что то ещё |
/auto_posting_on <время> | Включение и выбор времени для автоматической отправки расписания в диалог, время должно иметь формат ЧЧ:ММ |
/auto_posting_off | Выключение автоматической отправки расписания |
<сообщение> | Будет обработанно в зависимости от введённого текста |
Команды доступны как при обычном текстовом вводе, так и с помощью кнопок.
Список команд:
Вся неделя
- Выводит расписание занятий в общем виде (для числителя и знаменателя) на всю неделюсегодня
,завтра
- Выводит расписание на указанный день с учётом типа недели (числитель/знаменатель)понедельник
,вторник
,среда
,четверг
,пятница
,суббота
,воскресенье
- Выводит расписание на указанный день в общем виде (для числителя и знаменателя)
Для показа расписания экзаменов служит команда экзамены
. Также на клавиатуре за месяц перед каждой сессией появляется кнопка для показа расписания экзаменов.
Для включения этой опции, должен быть установлен скрипт autoposting.
Команда /auto_posting_on <ЧЧ:ММ>
предназначена для включения автоматической рассылки расписания в назначенное время. Команда имеет обязательный парметр, время отправки <ЧЧ:ММ>
. После отправки команды, пользователю будет выведена клавиатура с кнопками <сегодня/завтра>
с помощью которых можно выбрать на какой день будет идти отправка расписания: расписание на сегодня, или расписание завтрашних занятий.
Команда /auto_posting_off
позволяет отключить автоматическую рассылку расписания.
Пользователь может зарегистрироваться с помощью клавиатуры бота, на каждом шаге регистрации выбирая университет, а затем курс и группу. Для начала регистрации необходимо ввести команду /registration
, также пользователю будет предложено зарегистрироваться при первом запуске бота.