Przejdź do głównej zawartości

Ankiety (Polls)

Moduł Polls umożliwia tworzenie ankiet z przyciskami do głosowania, automatycznym timerem, trybem anonimowym i wielokrotnym głosowaniem. Wyniki aktualizują się w czasie rzeczywistym.

Włączanie modułu

  1. Dashboard → Twój serwer → toggle Polls
  2. Kliknij Edit aby ustawić domyślne parametry ankiet
  3. Zapisz zmiany

Konfiguracja

OpcjaTypDomyślnieOpis
colorhex#5865F2Kolor embeda ankiety
default_durationstringDomyślny czas trwania (np. "24h")
default_anonymousbooleanfalseDomyślnie ukryj głosujących
default_multiplebooleanfalseDomyślnie zezwalaj na wiele głosów
create_permissionstring"everyone"Kto może tworzyć ankiety
create_roleslista[]Role do tworzenia (gdy permission = "custom")

Wartości create_permission

  • "everyone" — każdy może tworzyć ankiety
  • "moderation_roles" — tylko role z moderation_roles
  • "custom" — tylko role z create_roles

Dashboard — konfiguracja

Panel edycji zawiera:

  • Color — color picker
  • Default Duration — pole tekstowe (format: 30m, 1h, 24h, 7d, 2w)
  • Default Anonymous — checkbox
  • Default Multiple — checkbox
  • Create Permission — radio: Everyone / Moderation Roles / Custom
  • Custom Roles — multi-select (widoczny gdy Custom)

Komendy

/poll

Tworzy nową ankietę.

ParametrWymaganyOpis
questionPytanie ankiety (max 256 znaków)
option1Pierwsza opcja
option2Druga opcja
option3option10Dodatkowe opcje (max 10 łącznie)
durationCzas trwania (nadpisuje domyślny). Format: 30m, 1h, 7d, 2w
anonymousUkryj głosujących (nadpisuje domyślny)
multipleZezwól na wiele głosów (nadpisuje domyślny)

Obsługiwane formaty czasu:

  • m — minuty (np. 30m)
  • h — godziny (np. 24h)
  • d — dni (np. 7d)
  • w — tygodnie (np. 2w)

/polls

Wyświetla listę aktywnych ankiet na serwerze (max 10, efemeralnie).

Głosowanie

Ankieta wyświetla się jako embed z przyciskami numerowanymi odpowiadającymi opcjom:

┌─────────────────────────────────────┐
│ Jaki jest Twój ulubiony kolor? │
│ │
│ 1. Czerwony — 5 votes (50%) │
│ 2. Niebieski — 3 votes (30%) │
│ 3. Zielony — 2 votes (20%) │
│ │
│ ⏰ Ends in 23 hours │
├─────────────────────────────────────┤
│ [1. Czerwony] [2. Niebieski] [3.] │
└─────────────────────────────────────┘

Tryb pojedynczego głosu (multiple = false)

  • Kliknięcie opcji oddaje głos
  • Kliknięcie tej samej opcji ponownie cofa głos
  • Kliknięcie innej opcji zmienia głos (stary usuwany, nowy dodawany)

Tryb wielokrotnego głosu (multiple = true)

  • Kliknięcie opcji dodaje/usuwa głos (toggle)
  • Użytkownik może głosować na wiele opcji jednocześnie

Aktualizacja w czasie rzeczywistym

Po każdym głosie embed jest edytowany z nowymi wynikami (% i liczba głosów).

Auto-zamykanie

Gdy ankieta ma ustawiony czas trwania:

  • Bot sprawdza wygasłe ankiety co 60 sekund
  • Po wygaśnięciu: embed zmienia tytuł na "📊 POLL CLOSED — [pytanie]"
  • Wyniki prezentowane jako paski postępu (bar chart)
  • Przyciski stają się nieaktywne (disabled)
  • Kolor zmienia się na szary (#6B7280)

Format zamkniętej ankiety

1. Czerwony
█████░░░░░ 50% (5 votes)
2. Niebieski
███░░░░░░░ 30% (3 votes)
3. Zielony
██░░░░░░░░ 20% (2 votes)

Nasłuchiwane zdarzenia

ZdarzenieAkcja
on_interactionObsługa kliknięć przycisków głosowania

Zadanie cykliczne

  • _check_expired_polls — co 60 sekund sprawdza i zamyka wygasłe ankiety

Logowanie

Akcje logowane przez Logs pod kategorią polls:

  • 📊 Poll Created — pytanie, twórca, liczba opcji, czas wygaśnięcia
  • 📊 Poll Closed — pytanie, łączna liczba głosów

Baza danych

Dane ankiet przechowywane w tabelach:

  • polls — metadane ankiety (question, options, expires_at, closed, anonymous, multiple)
  • poll_votes — indywidualne głosy (poll_message_id, user_id, option_index)

Wskazówki

Best practices
  • Ustaw default_duration na 24h — większość ankiet nie potrzebuje więcej
  • Tryb anonymous jest dobry dla kontrowersyjnych tematów
  • Ogranicz create_permission do moderatorów jeśli chcesz uniknąć spamu ankiet
  • Ankiety bez czasu trwania nigdy się nie zamkną automatycznie — pamiętaj o tym
informacja

Ankiety używają persistent custom_ids — działają nawet po restarcie bota. Głosy są przechowywane w bazie danych, więc restart nie wpływa na wyniki.