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
- Dashboard → Twój serwer → toggle Polls
- Kliknij Edit aby ustawić domyślne parametry ankiet
- Zapisz zmiany
Konfiguracja
| Opcja | Typ | Domyślnie | Opis |
|---|---|---|---|
color | hex | #5865F2 | Kolor embeda ankiety |
default_duration | string | — | Domyślny czas trwania (np. "24h") |
default_anonymous | boolean | false | Domyślnie ukryj głosujących |
default_multiple | boolean | false | Domyślnie zezwalaj na wiele głosów |
create_permission | string | "everyone" | Kto może tworzyć ankiety |
create_roles | lista | [] | Role do tworzenia (gdy permission = "custom") |
Wartości create_permission
"everyone"— każdy może tworzyć ankiety"moderation_roles"— tylko role zmoderation_roles"custom"— tylko role zcreate_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ę.
| Parametr | Wymagany | Opis |
|---|---|---|
question | ✅ | Pytanie ankiety (max 256 znaków) |
option1 | ✅ | Pierwsza opcja |
option2 | ✅ | Druga opcja |
option3–option10 | ❌ | Dodatkowe opcje (max 10 łącznie) |
duration | ❌ | Czas trwania (nadpisuje domyślny). Format: 30m, 1h, 7d, 2w |
anonymous | ❌ | Ukryj głosujących (nadpisuje domyślny) |
multiple | ❌ | Zezwó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
| Zdarzenie | Akcja |
|---|---|
on_interaction | Obsł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_durationna24h— większość ankiet nie potrzebuje więcej - Tryb
anonymousjest dobry dla kontrowersyjnych tematów - Ogranicz
create_permissiondo 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.