Ведущий викторины

:information_source: Краткое описание Компонент темы, преобразующий личные сообщения с AI-ботом в интерактивный тест.
:hammer_and_wrench: Репозиторий GitHub - VaperinaDEV/discourse-quizmaster: A theme component that transforms private messages with an AI bot into an interactive quiz experience. · GitHub
:question: Руководство по установке Как установить тему или компонент темы
:open_book: Новичок в темах Discourse? Руководство для начинающих по использованию тем Discourse

Установить этот компонент темы

Компонент темы для интерактивных тестов

Привет :waving_hand:
Я создал компонент темы, который превращает личные сообщения с AI-ботом в интерактивный тест. Компонент автоматически форматирует вопросы теста, обрабатывает отправку ответов, отслеживает прогресс и управляет завершением теста, предлагая удобное выпадающее меню в заголовке для быстрого запуска.

Возможности

1. Запуск теста через выпадающее меню в заголовке

Настраиваемая кнопка выпадающего меню в заголовке сайта обеспечивает быстрый доступ к различным типам тестов:

  • Полная настраиваемость через параметры темы с использованием схемы объектов
  • Поддержка нескольких языков с интеграцией i18n для меток, описаний и сообщений
  • Настраиваемые иконки для каждого уровня сложности теста
  • По умолчанию доступны: тесты уровня «Легкий», «Средний», «Сложный» и «Смешанный»
  • Каждая опция отправляет заранее настроенное сообщение AI-боту для начала теста

2. Автоматическое форматирование вопросов теста

Компонент обнаруживает и форматирует вопросы с вариантами ответов из сообщений AI-бота. Когда бот публикует список, начинающийся с «A)», «B)» и т.д., эти пункты автоматически преобразуются в кликабельные варианты ответов с индивидуальным стилем.

3. Отправка ответа в один клик

Пользователи могут нажать непосредственно на варианты ответа (A, B, C, D), чтобы отправить свой выбор. Компонент:

  • Предотвращает повторную отправку с отображением состояния загрузки
  • Автоматически отвечает на правильный пост
  • Форматирует ответы единообразно (например, «Мой ответ: A) Текст варианта»)
  • Обрабатывает ошибки с обратной связью для пользователя

4. Счетчик вопросов

Индикатор прогресса отображается на каждом вопросе теста, показывая:

  • Текущий номер вопроса и максимальное количество
  • Настраиваемое максимальное количество вопросов (по умолчанию: 50)
  • Отображается только в сообщениях AI-бота

5. Автоматическое завершение теста

Компонент включает интеллектуальное управление тестом:

  • Контрольные точки: Кнопка «Завершить тест» появляется каждые 10 вопросов (после 11-го, 21-го, 31-го и т.д.)
  • Принудительное ограничение: Автоматически отправляет сообщение о завершении при достижении максимального количества вопросов
  • Предотвращение дублирования: Отслеживает состояние завершения, чтобы избежать множественных постов о завершении
  • Проверки валидации: Гарантирует, что завершение происходит только при необходимости

6. Модификации интерфейса

Во время тестового диалога:

  • Убирает кнопки «Повторить/Поделиться» из сообщений бота (для не-администраторов)
  • Убирает кнопку «Ответить» из сообщений бота в личных сообщениях
  • Запрещает создателям тестов удалять свои собственные посты (сохраняет историю теста)
  • Добавляет пользовательский CSS-класс тела is-quiz-chat для стилизации

Конфигурация

Компонент использует следующие параметры темы:

# Настройки поведения теста
quizmaster_username: "YourBotUsername"  # Имя пользователя AI-бота
show_for_groups: ""                     # Показывать выпадающее меню в заголовке для групп
quiz_max_questions: 50                  # Максимальное количество вопросов перед автоматическим завершением

# Настройки кнопки в заголовке
button_icon: "question-circle"          # Иконка для главной кнопки теста

# Опции выпадающего меню (схема объектов), макс. 4
dropdown_items:
  type: objects
  default: 
    - label_template: quiz_easy_label
      description_template: quiz_easy_description
      icon: star
      message_template: quizmaster_input_easy
    - label_template: quiz_normal_label
      description_template: quiz_normal_description
      icon: star-half-alt
      message_template: quizmaster_input_normal
    - label_template: quiz_hard_label
      description_template: quiz_hard_description
      icon: certificate
      message_template: quizmaster_input_hard
    - label_template: quiz_mixed_label
      description_template: quiz_mixed_description
      icon: random
      message_template: quizmaster_input_mixed
  schema:
    properties:
      label_template:
        type: string
      description_template:
        type: string
      icon:
        type: string
      message_template:
        type: string
svg_icons:
  default: "far-star-half"
  type: list
  list_type: "compact"
  description: "Список иконок FontAwesome 6, используемых в этом компоненте темы"

Ключи перевода

Добавьте эти ключи в файлы локализации вашей темы для полной поддержки i18n:

Английский (en.yml)

en:
  js:
    # Кнопка в заголовке
    quiz: "Quiz"
    
    # Метки выпадающего меню
    quiz_easy_label: "Easy Quiz"
    quiz_normal_label: "Normal Quiz"
    quiz_hard_label: "Hard Quiz"
    quiz_mixed_label: "Mixed Quiz"
    
    # Описания выпадающего меню
    quiz_easy_description: "Basic questions for beginners"
    quiz_normal_description: "Average difficulty questions"
    quiz_hard_description: "Advanced level challenge"
    quiz_mixed_description: "Random difficulty questions"
    
    # Шаблоны сообщений
    quizmaster_input_easy: "Give me an easy quiz question"
    quizmaster_input_normal: "Give me a normal difficulty quiz question"
    quizmaster_input_hard: "Give me a hard quiz question"
    quizmaster_input_mixed: "Give me a mixed difficulty quiz question"
    
    # Взаимодействие с тестом
    my_answer: "My answer to the question is:"
    terminate_quiz: "Thanks for the game, I'd like a summary!"
    max_questions_text: "questions (or until my source runs dry). Every 10, you choose: stay or venture on."

Сценарии использования

Этот компонент идеально подходит для:

  • Образовательных тестов с AI-репетиторами
  • Оценки обучения
  • Проверки знаний
  • Интерактивных обучающих материалов
  • Геймифицированной доставки контента
  • Приложений для изучения языков
  • Курсов подготовки к сертификации

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

Настройка

Администраторы могут легко настроить опыт прохождения теста, выполнив следующие действия:

  • Изменяя метки и описания сложности теста в файлах локализации
  • Добавляя новые языковые переводы
  • Меняя иконки для различных типов тестов
  • Настраивая шаблоны сообщений, отправляемых AI-боту
  • Конфигурируя, какие группы пользователей видят кнопку в заголовке
  • Устанавливая лимиты максимального количества вопросов

Все настройки выполняются через административный интерфейс без необходимости изменения кода.

Системный промпт для AI

Компонент бесшовно работает с AI-ботами, обнаруживая простой формат списка. Вот пример системного промпта для вашего мистического AI-бота (настройте по необходимости):

Вы — строгий, но справедливый профессиональный Мистический Квестмастер. Говорите с авторитетом и полезностью, как современный волшебник. Используйте некоторые фразы, связанные с магией (например, «Давайте посмотрим, что скрывается в тумане ваших знаний...»), но придерживайтесь технических фактов.

### УРОВНИ СЛОЖНОСТИ ТЕСТА (РЕЖИМЫ)
Пользователь начнет разговор, указав уровень сложности. Используйте следующие рекомендации для калибровки глубины ваших вопросов:

1. **Легкий:**
   [Ваши критерии легкого режима здесь]
   
2. **Средний:**
   [Ваши критерии среднего режима здесь]
   
3. **Сложный:**
   [Ваши критерии сложного режима здесь]
   
4. **Смешанный:** Случайным образом выбирайте уровень сложности и категорию для каждого вопроса.

---

### ДИНАМИЧЕСКАЯ ЛОГИКА ОТВЕТА

**ИНСТРУКЦИЯ:** Для каждого нового вопроса выбирайте категорию (A–E), отличную от категорий предыдущих 5 вопросов.

- **ПРАВИЛА РАЗНООБРАЗИЯ:** Никогда не повторяйте вопрос или его тему в рамках одной сессии.
- **ПРЕДЛОЖЕНИЕ ПОВЫШЕНИЯ УРОВНЯ:** После каждого контрольного рубежа в 10 вопросов, если пользователь имеет 100% успех на уровнях «Легкий» или «Средний», предложите перейти на следующий уровень в блоке оценки.

### ОСНОВНЫЕ ПРАВИЛА:

1. **Непрерывный поток:** После оценки ответа немедленно предоставьте следующий вопрос в ТОМ ЖЕ сообщении.
2. **Завершение игры:**
    * Если пользователь пишет: «Спасибо за игру, я хочу подвести итоги!», немедленно остановитесь.
    * Предоставьте итоговую оценку, основанную ТОЛЬКО на отвеченных вопросах.
    * Предоставьте итоговый счет и мистическое прощание.
3. **ЕДИНЫЙ ВЫХОД:** **КРИТИЧЕСКИ ВАЖНО: Предоставьте оценку, текущий счет и СЛЕДУЮЩИЙ вопрос ровно ОДИН раз. Не повторяйте вопрос или список вариантов в том же ответе.**

### СТРУКТУРА И ФОРМАТИРОВАНИЕ ОТВЕТА (ОБЯЗАТЕЛЬНО):

> [Эмодзи Правильно/Неправильно] **[Краткое объяснение предыдущего ответа.]**

*Текущий счет: [X] очков*

---

### [Текст следующего вопроса]

* A) [ТЕКСТ_ВАРИАНТА_A]
* B) [ТЕКСТ_ВАРИАНТА_B]
* C) [ТЕКСТ_ВАРИАНТА_C]
* D) [ТЕКСТ_ВАРИАНТА_D]

---

### ПРАВИЛА АВТОМАТИЗАЦИИ (ДЛЯ AI):

- **НЕТ ТЕГОВ WRAP:** Не используйте теги `[wrap]` или любой специальный синтаксис Discourse для кнопок.
- **СТРОГИЙ ФОРМАТ СПИСКА:** Вы ДОЛЖНЫ предоставить четыре варианта в виде простого маркированного списка, точно как показано выше, начиная с «A)», «B)», «C)» и «D)».
- **ИНТЕГРАЦИЯ С СИСТЕМОЙ:** Внешняя система автоматически обнаружит ваш список A–D и преобразует его в интерактивные кнопки. Не пытайтесь стилизовать кнопки самостоятельно.

### ОГРАНИЧЕНИЯ:

- **Последовательность языка:** Всегда отвечайте на том же языке, который использовал пользователь.
- Объяснение должно находиться внутри блока цитирования (>).

Примечание: Изначально мы пробовали использовать теги [wrap] для создания кнопок, но AI иногда пропускал закрывающую скобку ], что нарушало функциональность. Простой формат маркированного списка (* A), * B) и т.д.) гораздо надежнее и практически невозможно ошибиться при его генерации. Компонент темы автоматически обнаруживает этот формат и преобразует его в интерактивные кнопки.


Я бы искренне хотел услышать о вашем сценарии использования. Пожалуйста, поделитесь!

10 лайков