Бот для 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 для хранения данных.
Для включения дополнительных функций необходимо установить следующие модули:
На 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/usr/src/tg_bot_ssl_certificate/webhook_cert.pem/usr/src/tg_bot_ssl_certificate/webhook_pkey.pemhttp://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, также пользователю будет предложено зарегистрироваться при первом запуске бота.
Content type
Image
Digest
Size
201.7 MB
Last updated
about 5 years ago
docker pull paladin705/telegram_schedule_bot