/экзамен-панель
опубликовать сразу
Публикует в этом канале панель с кнопкой «Сдать экзамен», предварительно проверив настройки и права бота.
Кнопка «Я прочитал правила» не значит ничего: её жмут, не открывая текст, а потом администрация разбирает одни и те же нарушения от людей, которые «всё приняли». Этот модуль меняет условие: доступ открывается за сданный тест. Вы описываете банк вопросов, бот берёт из него случайные, перемешивает и вопросы, и варианты ответа, и задаёт их по одному — так, что видит их только сдающий. За проходной балл бот сам выдаёт роль доступа и снимает роль новичка, а неудачную попытку записывает и говорит человеку, когда можно пересдать. Начатая попытка живёт в базе, а не в памяти процесса: ночной перезапуск бота не сбросит человека на первый вопрос, а истёкшее время закроет попытку само. Со временем набирается главное — отчёт о том, на каких вопросах люди спотыкаются чаще всего; обычно это не про невнимательность, а про непонятно написанное правило.
Весь путь целиком, шаг за шагом. Справа — то, что реально увидят на вашем сервере.
Вопросы задаются в личном кабинете отдельными строками: сам вопрос, варианты ответа через точку с запятой и номер верного. Вариантов у вопроса от двух до пяти — ровно столько кнопок Discord кладёт в один ряд. Всего можно завести до 50 вопросов, и банк стоит держать заметно больше, чем берётся в одну попытку: тогда пересказать соседу «первый, третий, второй» бесполезно. Строку, которую бот разобрать не смог, он не выбрасывает молча — недочёты банка перечисляются в отчёте и в проверке перед публикацией панели, с указанием, что именно поправить.
Панель публикуется командой в тот канал, где команду дали. Перед публикацией бот проверяет всё, от чего зависит экзамен: есть ли вопросы, на месте ли роль за сдачу, стоит ли роль бота выше неё, доступен ли канал журнала. Если что-то не так, вместо панели приходит список недочётов — панель, которая приводит к невыдаваемой роли, хуже, чем её отсутствие.
Весь экзамен идёт в сообщениях, которые видит один человек. Из банка берутся случайные вопросы, порядок вопросов и порядок вариантов внутри вопроса перемешиваются, а выданный набор запоминается вместе с попыткой — правку банка посреди экзамена человек не заметит и дойдёт до конца на том, что ему выдали. Ответ засчитывается сразу и повторное нажатие той же кнопки уже ничего не меняет: строка захватывается атомарно, по номеру текущего вопроса.
Срок попытки записывается в базу при первом вопросе, и все сравнения со «сейчас» делает тоже база — процесс бота живёт по UTC, база по Москве, и подсчёт в JavaScript ошибался бы на три часа. Поэтому ночной перезапуск не срывает экзамен: человек возвращается той же кнопкой на панели и продолжает с того вопроса, на котором остановился. Брошенные и просроченные попытки раз в минуту закрывает планировщик — время вышло, попытка засчитана как проваленная.
После последнего вопроса человек видит, сколько ответил верно, сдал он или нет и когда можно пересдать. Сдавшему бот выдаёт роль доступа и снимает роль новичка — но только если ему это позволено: роль выше собственной Discord выдать не даст, и тогда бот честно скажет об этом и человеку, и в журнал, а сдачу всё равно зачтёт. Разбор ошибок показывается, только если владелец включил его отдельно: иначе правильные ответы за неделю разойдутся по друзьям. В канал журнала уходит запись: кто сдавал, с каким результатом и сколько времени занял.
Когда правила изменились, одна команда снимает сдачу — всем сразу или одному участнику. Роль доступа снимается, роль новичка возвращается, а в личные сообщения уходит объяснение, почему придётся сдавать заново. Массовая рассылка идёт пачками с паузой и обрабатывает людей по одному: если её прервать, повтор команды продолжит с того места, где она остановилась. Отдельно копится статистика по вопросам — отчёт показывает те, на которых спотыкаются чаще всего, и это почти всегда сигнал переписать само правило, а не ужесточать экзамен.
Всё это меняется в личном кабинете в любой момент — каналы и роли выбираются списками с вашего сервера, вводить ID руками не нужно. Бот подхватывает изменения сам.
Банк вопросов
Правила экзамена
Роли
Тексты результата
Панель
Оформление и журнал
Что вводят на сервере, когда модуль подключён. Команды набираются со слэша — Discord подсказывает список сам, наизусть помнить ничего не нужно.
/экзамен-панель
опубликовать сразу
Публикует в этом канале панель с кнопкой «Сдать экзамен», предварительно проверив настройки и права бота.
/экзамен-итоги
Показывает, сколько человек сдавали и сдали, сколько сейчас пишут экзамен и на каких вопросах ошибаются чаще всего.
/экзамен-сброс
Назначает переаттестацию: снимает сдачу и роль доступа, возвращает роль новичка и пишет человеку в личные, что правила изменились.
/экзамен-статус
Показывает участнику его состояние: сдан ли экзамен и когда, сколько попыток осталось и когда можно пересдать.
Команды для администрации Discord показывает только тем, у кого есть нужное право сервера. Чтобы ими пользовалась ваша модерация без прав администратора, откройте доступ её ролям: Настройки сервера → Интеграции → ваш бот → нужная команда.
Бот разворачивается за пару минут: выбираете модули, вставляете токен, приглашаете на сервер.