Zaplanowane wydarzenia (Schedule Events)
Moduł Schedule Events zarządza zaplanowanymi wydarzeniami gry z systemem przypomnień, odliczaniem i automatycznym czyszczeniem. Idealny do eventów w Dark War Survival takich jak KvK, War Rally, czy inne cykliczne aktywności.
Włączanie modułu
- Dashboard → Twój serwer → toggle Schedule Events
- Kliknij Edit aby utworzyć definicje wydarzeń
- Zaplanuj instancje komendami lub z dashboardu
- Zapisz zmiany
Konfiguracja
| Opcja | Typ | Domyślnie | Opis |
|---|---|---|---|
default_channel_id | string / null | null | Domyślny kanał dla przypomnień |
Definicje wydarzeń (tworzenie w dashboardzie)
Każda definicja wydarzenia zawiera:
- name — nazwa wydarzenia
- template — szablon embeda (tytuł, opis, kolor, obrazek)
- channel_id — kanał przypomnień (lub null → używa default)
- reminder_offsets_minutes — lista offsetów (np. [60, 30, 10] = 1h, 30m, 10m przed)
- is_active — czy definicja jest aktywna
Dashboard — konfiguracja
Panel edycji Schedule Events zawiera:
- Default Channel — dropdown
- Event Definitions — CRUD lista definicji:
- Tworzenie nowej definicji (nazwa, szablon, kanał, offsety)
- Edycja istniejącej
- Usuwanie
- Instances — podgląd zaplanowanych instancji (nadchodzące)
Filtrowanie
Dashboard i komenda /event list wyświetlają tylko przyszłe wydarzenia (status = 'scheduled' AND starts_at > now). Przeszłe/ukończone nie są pokazywane.
Komendy
/event schedule
Planuje nową instancję zapisanego wydarzenia.
| Parametr | Wymagany | Opis |
|---|---|---|
event_name | ✅ | Nazwa definicji wydarzenia (ILIKE search) |
date | ✅ | Data (YYYY-MM-DD) |
time_str | ✅ | Godzina (HH:MM, format 24h) |
Wymagania: Administrator.
Przykład:
/event schedule event_name:KvK date:2026-06-15 time_str:20:00
Czas jest interpretowany jako UTC+2 (CEST). Instancja jest zapisywana z odpowiednim timezone-aware datetime.
/event list
Wyświetla nadchodzące zaplanowane wydarzenia (max 10).
Każdy wpis zawiera:
- Nazwa wydarzenia
- Data/czas (Discord timestamp: pełny + relative)
/event cancel
Anuluje najbliższą instancję wydarzenia.
| Parametr | Wymagany | Opis |
|---|---|---|
event_name | ✅ | Nazwa wydarzenia do anulowania |
Wymagania: Administrator.
Zmienia status instancji na 'cancelled'.
System przypomnień
Przypomnienia wysyłane automatycznie na podstawie reminder_offsets_minutes:
Przykład: offsets = [60, 30, 10]
- 60 minut przed → embed "Event starts in 1 hour"
- 30 minut przed → embed (zastępuje poprzedni)
- 10 minut przed → embed (zastępuje poprzedni)
- 0 minut (start) → embed "🚀 Event is starting NOW!" (auto-delete po 15 min)
Automatyczne czyszczenie
- Każde nowe przypomnienie usuwa poprzednie (tylko 1 wiadomość na kanale)
- Wiadomość "starting NOW" auto-kasuje się po 15 minutach
- Kanał pozostaje czysty
Placeholder {countdown}
W szablonach przypomnień można użyć {countdown} — zostanie zastąpiony Discord relative timestamp (np. <t:1718474400:R> → "in 30 minutes").
Statusy instancji
| Status | Opis |
|---|---|
scheduled | Zaplanowana, oczekuje na start |
started | Rozpoczęła się (wiadomość "NOW!" wysłana) |
cancelled | Anulowana przez admina |
missed | Przegapiona (>1h po planowanym starcie bez wysłania) |
Auto-oznaczanie "missed"
Jeśli bot nie zdążył obsłużyć instancji (np. był offline) i minęła więcej niż 1 godzina od starts_at, instancja jest automatycznie oznaczana jako 'missed' zamiast wysyłania opóźnionego powiadomienia.
Zadanie cykliczne
_check_loop — co 30 sekund:
- Pobiera wszystkie instancje scheduled w ciągu najbliższych 24h
- Dla każdej sprawdza czy nadszedł czas na:
- Przypomnienie (w oknie 30s od offset trigger)
- Start (now >= starts_at)
- Oznaczenie jako missed (>1h po starcie)
Baza danych
| Tabela | Opis |
|---|---|
schedule_events | Definicje wydarzeń (name, template, channel_id, reminder_offsets, is_active) |
schedule_instances | Zaplanowane instancje (event_id, guild_id, starts_at, status, last_reminder_message_id) |
Logowanie
Moduł Schedule Events nie posiada dedykowanej kategorii logów. Akcje są śledzone przez statusy instancji w bazie danych.
Wskazówki
- Twórz definicje dla powtarzających się eventów (KvK, Rally, itp.)
- Ustaw 2-3 offsety przypomnień (np. 60, 30, 10 minut przed)
- Użyj
{countdown}w opisie szablonu — Discord wyświetli dynamiczne odliczanie - Dedykowany kanał (np.
#events) utrzyma porządek dzięki auto-czyszczeniu
Dla wydarzeń powtarzających się co tydzień, zaplanuj kilka instancji z wyprzedzeniem. Dashboard pozwala szybko dodawać instancje.
Definicje wydarzeń tworzy się w dashboardzie. Komenda /event schedule służy tylko do planowania instancji istniejących definicji.