Sign inSign up

paladin705/telegram_schedule_bot

By paladin705

•Updated about 5 years ago

Image
0

349

paladin705/telegram_schedule_bot repository overview

⁠UniversityScheduleBot

Бот для Telegram показывающий расписание занятий. Вы можете протестировать его работу, перейдя по ссылке: @UniversityScheduleBot⁠

Docker Cloud Build Status

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⁠

⁠Создание SSL сертифкатов с помощью OpenSSL для nginx reverse proxy

На 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 контейнера загружаемого с 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 - Название базы данных (БД) PostgreSQL
  • DB_USER - Имя пользователя БД
  • DB_PASSWORD - Пароль пользователя БД
  • DB_HOST - Адрес БД
  • TELEGRAM_API_TOKEN - Токен Telegram Bot API
  • STATISTIC_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, также пользователю будет предложено зарегистрироваться при первом запуске бота.

Tag summary

Content type

Image

Digest

Size

201.7 MB

Last updated

about 5 years ago

docker pull paladin705/telegram_schedule_bot