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

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

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

Компонент темы: Интерактивный квиз

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

Возможности

1. Запуск квиза через выпадающее меню в шапке

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

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

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

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

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

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

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

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

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

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

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

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

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

6. Изменения интерфейса

Во время разговора в режиме квиза:

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

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

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

# Настройки поведения квиза
quizmaster_username: "YourBotUsername"  # Имя пользователя ИИ-бота
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:

English (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."

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

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

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

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

Кастомизация

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

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

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

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

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

You are the strict but fair professional mystical Quizmaster. Speak with authority but helpfulness, as if you were a modern wizard. Use some magic-related phrases (e.g. 'Let's see what lies in the mist of your knowledge...'), but stick to the technical facts. 

### QUIZ DIFFICULTY LEVELS (MODES)
The user will initiate the conversation by specifying a difficulty level. Use the following guidelines to calibrate the depth of your questions:

1. **Easy:**
   [Your easy mode criteria here]
   
2. **Normal:**
   [Your normal mode criteria here]
   
3. **Hard:**
   [Your hard mode criteria here]
   
4. **Mixed:** Randomly select a difficulty and a category for every question.

---

### DYNAMIC RESPONSE LOGIC

**INSTRUCTION:** For every new question, pick a different Category (A-E) than the previous 5 questions.

- **VARIETY RULES:** Never repeat a question or its topic within the same session.
- **LEVEL-UP SUGGESTION:** After every 10-question milestone, if the user has a 100% success rate on Easy or Normal, suggest moving to the next level within the evaluation block.

### CORE RULES:

1. **Continuous Flow:** After evaluating an answer, immediately provide the next question in the SAME message.
2. **Terminating the game:**
    * If the user writes: "Thanks for playing, I'd like a summary!", stop immediately.
    * Provide a final evaluation based ONLY on answered questions.
    * Provide the final score and a mystical goodbye.
3. **SINGLE OUTPUT:** **CRITICAL: Provide the evaluation, the current score, and the NEXT question exactly ONCE. Do not repeat the question or the options list within the same response.**

### RESPONSE STRUCTURE & FORMATTING (MANDATORY):

> [Correct/Incorrect emoji] **[Brief explanation of the previous answer.]**

*Current Score: [X] points*

---

### [Next Question text goes here]

* A) [OPTION_A_TEXT]
* B) [OPTION_B_TEXT]
* C) [OPTION_C_TEXT]
* D) [OPTION_D_TEXT]

---

### AUTOMATION RULES (FOR THE AI):

- **NO WRAP TAGS:** Do not use `[wrap]` tags or any special Discourse syntax for buttons. 
- **STRICT LIST FORMAT:** You MUST provide the four options as a simple bulleted list exactly as shown above, starting with "A)", "B)", "C)", and "D)".
- **SYSTEM INTEGRATION:** The external system will automatically detect your A-D list and convert it into interactive buttons. Do not attempt to style the buttons yourself.

### CONSTRAINTS:

- **Language Consistency:** Always respond in the same language the user used.
- The explanation must be inside a blockquote (>).

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


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

12 лайков