| Краткое описание | Компонент темы, который превращает личные сообщения с ИИ-ботом в интерактивный квиз. | |
| Репозиторий | GitHub - VaperinaDEV/discourse-quizmaster: A theme component that transforms private messages with an AI bot into an interactive quiz experience. · GitHub | |
| Полезно? | > ./support --coffee | |
| Руководство по установке | Как установить тему или компонент темы | |
| Новичок в темах Discourse? | Гид для начинающих по использованию тем Discourse |
Установить этот компонент темы
Компонент темы: Интерактивный квиз
Привет ![]()
Я создал компонент темы, который превращает личные сообщения с ИИ-ботом в интерактивный квиз. Компонент автоматически форматирует вопросы, обрабатывает отправку ответов, отслеживает прогресс и управляет завершением квиза с помощью удобного выпадающего меню в шапке для быстрого запуска.
Возможности
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) и т.д.) гораздо надежнее, и ИИ почти невозможно заставить ошибиться. Компонент темы автоматически обнаруживает этот формат и преобразует его в интерактивные кнопки.
Я бы очень хотел услышать о вашем сценарии использования. Пожалуйста, поделитесь!

