Skip to content

Latest commit

 

History

History

vk_bot

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

VkScheduleBot

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

Docker Cloud Build Status

Docker Hub: paladin705/vk_schedule_bot

Зависимости

Бот использует VK Callback API. Он должен обрабатывать следующие типы событий: Входящие сообщения и Запрет на получение. Адрес: http://<адрес сервера><FLASK_ROUTE_PATH>. Можно изменить с помощью параметра FLASK_ROUTE_PATH в конфигурационном файле.

Бот реализованный в docker контейнере не имеет прямого доступа к сети и использует сокет /bot/socket/bot.sock для обработки запросов. Чтобы передать поступающие запросы боту, можно использовать nginx reverse proxy для передачи их на сокет бота.

Бот использует СУБД PostgreSQL для хранения данных.

Для включения дополнительных функций необходимо установить следующие модули:

  • Модуль для автоматической отправки расписания: autoposting
  • Модуль для работы с базой данных бота (добавление/изменение/удаление групп и файлов расписания): api_server
  • Панель управления базой данных бота: VkScheduleBot Control Panel. Предоставляет веб-интерфейс для взаимодействия с БД расписания, а также позволяет редактировать пользователей API бота (модуль api_server)

Docker

Для запуска docker контейнера загружаемого с Docker Hub можно использовать следующую команду:

docker run \
    -v ./vk_bot/socket:/bot/socket \
    -v ./vk_bot/log:/bot/log \
    -e DB_NAME=<Введите значение параметра> \
    -e DB_USER=Введите значение параметра<> \
    -e DB_PASSWORD=<Введите значение параметра> \
    -e DB_HOST=<Введите значение параметра> \
    -e DB_USER_TAG=<Введите значение параметра> \
    -e FLASK_ROUTE_PATH=<Введите значение параметра> \
    -e VK_CONFIRMATION_TOKEN=<Введите значение параметра> \
    -e VK_API_TOKEN=<Введите значение параметра> \
    -e STATISTIC_TOKEN=<Введите значение параметра> \
    -e WEEK_TYPE=<Введите значение параметра> \
    -e ADMIN_VK_ID=<Введите значение параметра> \
    -e VK_ID_BLACKLIST=<Введите значение параметра> \
    -e TZ=<Введите значение параметра> \
    paladin705/vk_schedule_bot:latest

Файлы

  • /bot/socket - В данной директории находится сокет бота: bot.sock. Он используется для обработки запросов к боту
  • /bot/log - Директория где располагаются логи бота

Переменные среды

  • DB_NAME - Название базы данных (БД) PostgreSQL
  • DB_USER - Имя пользователя БД
  • DB_PASSWORD - Пароль пользователя БД
  • DB_HOST - Адрес БД
  • DB_USER_TAG - Идентификатор пользователей бота (используется для разделения пользователей, при общей базе данных для нескольких ботов
  • FLASK_ROUTE_PATH - Опредлеляет адрес сервера бота для VK Callback API
  • VK_CONFIRMATION_TOKEN - Токен для подтверждения адреса сервера. Параметр VK Callback API
  • VK_API_TOKEN - Ключ доступа к сообщениям сообщества. Параметр VK API
  • STATISTIC_TOKEN - Токен для отправки статистики на chatbase.com. Необязательный параметр (На данный момент не используется - Chatbase прекращает работу 27 сентября 2021 года)
  • WEEK_TYPE - Тип первой недели семестра 0 - числитель, 1 - знаменатель
  • ADMIN_VK_ID - VK ID страницы администратора (только номер) для отправки информации о состоянии сервера
  • VK_ID_BLACKLIST - Чёрный список VK ID через запятую (Пример: 1,2,3,4,5). Бот не будет отвечать на сообщения из этого списка. Необязательный параметр
  • TZ - Часовой пояс. Необязательный параметр. По умолчанию Europe/Moscow

Команды бота

Бот принимает текстовые команды, а также команды отправленные с помощью кнопок клавиатуры для ботов.

Далее описаны лишь основные типы команд. Все файлы команд бота расположены в дирректории vk_bot/app/commands.

Расписание занятий

Команды доступны как при обычном текстовом вводе, так и с помощью кнопок (кроме команд расписание, неделя, вчера, послезавтра - они доступны только при текстовом вводе).

Список команд:

  • расписание, неделя - Выводит расписание занятий в общем виде (для числителя и знаменателя) на всю неделю
  • вчера, сегодня, завтра, послезавтра - Выводит расписание на указанный день с учётом типа недели (числитель/знаменатель)
  • понедельник, вторник, среда, четверг, пятница, суббота, воскресенье - Выводит расписание на указанный день в общем виде (для числителя и знаменателя)

Расписание экзаменов

Для показа расписания экзаменов служит команда экзамены и её вариации: экзамен, /exams и exams. Также на клавиатуре за месяц перед каждой сессией появляется кнопка для показа расписания экзаменов.

Автоматическая отправка расписания

Для включения этой опции, должен быть установлен скрипт autoposting.

Команда ap <ЧЧ:ММ> <сегодня/завтра> предназначена для включения автоматической рассылки расписания в назначенное время. Команда имеет обязательный парметр, время отправки <ЧЧ:ММ> и необязательный параметр <сегодня/завтра> который определяет на какой день будет идти отправка расписания: сегодня/завтра (если не указать параметр, то отправка будет вестись на <сегодня>.

Команда ap off позволяет отключить автоматическую рассылку расписания.

Отключение автоматической рассылки расписания также происходит, если пользователь установил запрет на получение сообщений.

Регистрация

Пользователь может зарегистрироваться с помощью клавиатуры бота, на каждом шаге регистрации выбирая университет, а затем курс и группу. Также доступна регистрация в текстовом режиме, с помощью команды reg <группа где пользователь хочет зарегистрироваться>. Чем точнее пользователь напишет название группы (<группа где пользователь хочет зарегистрироваться>) тем больше вероятность регистрации в нужной группе. Если группа распознана не точно, то также выводится список групп названия которых больше всего совпадают с запросом (5 наиболее совпадающих групп в порядке уменьшения совпадения с запросом).