Quizmaster

:information_source: Zusammenfassung Ein Theme-Komponente, die private Nachrichten mit einem KI-Bot in ein interaktives Quiz-Erlebnis verwandelt.
:hammer_and_wrench: Repository GitHub - VaperinaDEV/discourse-quizmaster: A theme component that transforms private messages with an AI bot into an interactive quiz experience. · GitHub
:heart: War es hilfreich? > ./support --coffee
:question: Installationsanleitung So installierst du ein Theme oder eine Theme-Komponente
:open_book: Neu bei Discourse Themes? Einsteigerleitfaden zur Nutzung von Discourse Themes

Diese Theme-Komponente installieren

Interaktive Quiz-Theme-Komponente

Hallo :waving_hand:
Ich habe eine Theme-Komponente erstellt, die private Nachrichten mit einem KI-Bot in ein interaktives Quiz-Erlebnis verwandelt. Die Komponente formatiert Quizfragen automatisch, verarbeitet die Antwortübermittlung, verfolgt den Fortschritt und verwaltet den Quizabschluss mit einer praktischen Dropdown-Leiste im Header für den schnellen Quizstart.

Funktionen

1. Quiz-Start über Dropdown im Header

Ein anpassbarer Dropdown-Button im Seitenheader bietet schnellen Zugriff auf verschiedene Quiztypen:

  • Vollständig konfigurierbar über Theme-Einstellungen mithilfe eines Objektschemas
  • Mehrsprachige Unterstützung mit i18n-Integration für Beschriftungen, Beschreibungen und Meldungen
  • Anpassbare Symbole für jedes Quiz-Schwierigkeitsniveau
  • Standardoptionen umfassen: Quiz mit einfacher, normaler, harter und gemischter Schwierigkeit
  • Jede Option sendet eine vorkonfigurierte Nachricht an den KI-Bot, um das Quiz zu starten

2. Automatische Formatierung von Quizfragen

Die Komponente erkennt und formatiert Multiple-Choice-Fragen aus den Beiträgen des KI-Bots. Wenn der Bot eine Liste postet, die mit „A)“, „B)“ usw. beginnt, werden diese automatisch in klickbare Quizoptionen mit benutzerdefinierter Gestaltung umgewandelt.

3. Antwortübermittlung mit einem Klick

Benutzer können direkt auf Antwortoptionen (A, B, C, D) klicken, um ihre Antwort einzureichen. Die Komponente:

  • Verhindert doppelte Übermittlungen mit einem Ladezustand
  • Antwortet automatisch auf den richtigen Beitrag
  • Formatiert Antworten konsistent (z. B. „Meine Antwort: A) Optionstext“)
  • Bietet Fehlerbehandlung mit Nutzerfeedback

4. Fragen-Zähler

Ein Fortschrittsanzeiger erscheint bei jeder Quizfrage und zeigt:

  • Aktuelle Fragennummer im Vergleich zur maximal erlaubten Anzahl
  • Anpassbare maximale Fragenanzahl (Standard: 50)
  • Nur in den Beiträgen des KI-Bots sichtbar

5. Automatische Quiz-Beendigung

Die Komponente enthält eine intelligente Quiz-Verwaltung:

  • Etappen-Checkpoints: Zeigt einen „Quiz beenden“-Button alle 10 Fragen (nach Frage 11, 21, 31 usw.)
  • Durchsetzung harter Grenzen: Sendet automatisch eine Beendigungsnachricht, wenn die maximale Fragenanzahl erreicht wird
  • Duplikatvermeidung: Verfolgt den Beendigungsstatus, um mehrere Beendigungsbeiträge zu verhindern
  • Validierungsprüfungen: Stellt sicher, dass eine Beendigung nur dann erfolgt, wenn es angemessen ist

6. UI-Änderungen

Wenn sich ein Quiz-Gespräch im Gange befindet:

  • Entfernt die KI-Wiederholen-/Teilen-Buttons aus Bot-Beiträgen (für Nicht-Admins)
  • Entfernt den Antwort-Button aus Bot-Beiträgen in privaten Nachrichten
  • Verhindert, dass Quiz-Ersteller ihre eigenen Beiträge löschen (erhält die Quiz-Historie)
  • Fügt eine benutzerdefinierte CSS-Body-Klasse is-quiz-chat für die Gestaltung hinzu

Konfiguration

Die Komponente verwendet diese Theme-Einstellungen:

# Quiz-Verhaltens-Einstellungen
quizmaster_username: "DeinBotBenutzername"  # Der Benutzername des KI-Bots
show_for_groups: ""                     # Header-Dropdown für Gruppen anzeigen
quiz_max_questions: 50                  # Maximale Fragenanzahl vor automatischer Beendigung

# Einstellungen für den Header-Button
button_icon: "question-circle"          # Symbol für den Haupt-Quiz-Button

# Dropdown-Quiz-Optionen (Objektschema) max. 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: "Liste der FontAwesome 6-Symbole, die in dieser Theme-Komponente verwendet werden"

Übersetzungsschlüssel

Füge diese zu den Locale-Dateien deines Themes hinzu, um volle i18n-Unterstützung zu erhalten:

Englisch (en.yml)

en:
  js:
    # Header-Button
    quiz: "Quiz"
    
    # Dropdown-Beschriftungen
    quiz_easy_label: "Easy Quiz"
    quiz_normal_label: "Normal Quiz"
    quiz_hard_label: "Hard Quiz"
    quiz_mixed_label: "Mixed Quiz"
    
    # Dropdown-Beschreibungen
    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"
    
    # Nachrichtenvorlagen
    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"
    
    # Quiz-Interaktion
    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."

Anwendungsfälle

Diese Komponente ist perfekt für:

  • Bildungskurse mit KI-Tutoren
  • Schulungsbewertungen
  • Wissens-tests
  • Interaktive Lernerfahrungen
  • Gamifizierte Inhaltsverteilung
  • Sprachenlernanwendungen
  • Vorbereitungskurse auf Zertifizierungen

Die Komponente übernimmt die gesamte Komplexität der Statusverfolgung, Fehlervermeidung und Verwaltung des Quiz-Lebenszyklus automatisch und bietet so ein reibungsloses Erlebnis für sowohl Quiz-Ersteller als auch Teilnehmer. Das Header-Dropdown macht es für Benutzer unglaublich einfach, Quizze zu starten.

Anpassung

Administratoren können das Quiz-Erlebnis leicht anpassen, indem sie:

  • Quiz-Schwierigkeitsbeschriftungen und -beschreibungen in den Locale-Dateien ändern
  • Neue Sprachübersetzungen hinzufügen
  • Symbole für verschiedene Quiztypen ändern
  • Die Nachrichtenvorlagen anpassen, die an den KI-Bot gesendet werden
  • Konfigurieren, welche Benutzergruppen den Header-Button sehen
  • Maximale Fragenlimits festlegen

Alle Anpassungen werden über die Admin-Oberfläche vorgenommen, ohne dass Code geändert werden muss.

KI-System-Prompt

Die Komponente funktioniert nahtlos mit KI-Bots, indem sie ein einfaches Listenformat erkennt. Hier ist ein Beispiel für einen System-Prompt für deinen mystischen KI-Bot (nach Bedarf anpassen):

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 (>).

Hinweis: Wir haben zunächst versucht, [wrap]-Tags zu verwenden, um Buttons zu erstellen, aber die KI hat manchmal das schließende ] übersehen, wodurch die Funktion gestört wurde. Das einfache Aufzählungslistenformat (* A), * B) usw.) ist viel zuverlässiger und für die KI nahezu unmöglich falsch zu machen. Die Theme-Komponente erkennt dieses Format automatisch und wandelt es in interaktive Buttons um.


Ich würde wirklich gerne mehr über deinen Anwendungsfall erfahren. Bitte teile ihn!

12 „Gefällt mir“