На данной странице находится вся необходимая информация как для пользователя, так и для разработчиков, касающаяся чат-бота Zulip, использующегося для проектного семинара. Описывается содержимое каталога zulip_bot
.
Сценарий каждого урока представлен в виде листа в таблице – для данного бота используются листы wiki
, smartlms
, trello
, taiga
, methodology_taiga
, wekan
. Discovery-таблица для уроков располагается по адресу.
Основной компонент бота для Zulip, выполняет поллинг Zulip API для получения и обработки новых сообщений и голосов в опросах.
При обнаружении нового события (сообщения, голоса) обработка зависит от типа события и состояния пользователя.
Если пришло сообщение, находит пользователя в базе или регистрирует нового, реагирует на команду /report
, отсылая отзыв в канал поддержки в Zulip. Если пользователь не находится в уроке и пишет "Привет", то в ответ присылается меню выбора урока с инструкцией.
Выбор опции в меню запускает соответствубщий урок. Среди уроков есть интерактивные (прохождение которых происходит непосредственно на платформе урока) и текстовые (прохождение который целиком остается в чате). Для интерактивных уроков запрос о начале урока отсылается в core и дальнейший прогресс по уроку мониторит он. Для текстовых уроков вызывается start_basic_lesson
, создается временный объект пользователя в базе в таблице урока для сохранения прогресса и присылается первый вопрос
Сценарий текстового урока задается таблицей в сервисе Google Sheets со следующими колонками:
Для работы с таблицей из кода существует класс Step, преобразующий строку таблицы в объект для более удобной работы с ней. По достижении окончания урока в чат присылается итоговая оценка, детализация баллов по вопросам урока и ссылка на таблицу с оценками всех пользователей, прошедших урок, также оценка возвращается в SmartLMS, если урок был начат оттуда, что позволяет включать уроки в образовательную программу.
В этом столбце таблицы находится строка в формате json, пример:
{
"3": {
"reljmp": 1,
"message": "Неверно! Настройка железа происходит в фазе \"Разработка, внедрение и развертывание\"",
"mark": 0
},
"3,4": {
"reljmp": 1,
"message": "Нет, это происходит в других фазах",
"mark": 0
},
"1,3|1,4|1,3,4": {
"reljmp": 1,
"message": "Фаза \"Дизайн системы\" определяет элементы системы, модули, компоненты уровень безопасности и архитектуру. Настройка \"железа\" и тестирование происходят в следующих фазах.",
"mark": 0.5
},
"1,2": {
"reljmp": 1,
"message": "Верно!",
"mark": 1
}
}
Ключами на верхнем уровне являются возможные ответы пользователя (написанные им текстом или номера ответа в опросе), через вертикальную черту задаются варианты ответов, приводящие к одинаковой реакции (например, когда вопрос имеет несколько верных ответов).
На каждый вариант структура реакции следующая:
reljmp
, absjmp
– задается один из ключей, определяет абсолютный или относительный переход при совпадении ответаmessage
– сообщение, присылаемое при совпадении ответа, может быть null
mark
– оценка, выставляемая за шаг при совпадении ответаДля оценивания используется класс Scorer.
В модуле drawing нахоятся методы для построения визульной статистики по прогрессу урока.
Пакет google
в составе zulip_bot
реализует обертку для работы с таблицами сценариев, с переездом таблиц в базу данных из всей обертки используется только инструментарий создания и обновления таблиц успеваемости.
Этот пакет представляет собой миниатюрный сервер на FastAPI, который использует часть кода из zulip_bot
и используется для получения апдейтов по прогрессу урока из core и регистрации урока в SmartLMS