Logika twojego bota, krok po kroku
Flow to lista kroków. Flow Daily question to pięć z nich: odczytaj katalog, wybierz następne pytanie, opublikuj je, otwórz wątek, policz je. Dodaj krok, podepnij do niego wartość, przetestuj, a potem włącz.
Pytanie dnia
AktywnyZapiszWyzwalacz
ZmieńHarmonogram, codziennie o 09:00
Pobierz wartość z magazynu(get-storage-value)
Odczytaj katalog pytań z{questions}
Wybierz następny wpis(array-at)
Ten po wczorajszym
Wyślij wiadomość(send-message)
Parametry wejściowe
Kanał:#ogólny
Wiadomość:Pytanie dnia
Utwórz wątek(start-thread-from-message)
Otwórz wątek pod tą wiadomością
Zwiększ wartość w magazynie(increment-storage-value)
Policz pytanie jako zadane w{asked}
Tylko ilustracja - rzeczywisty interfejs może się różnić
Efekt tych pięciu kroków o 09:00
Pięć kroków tworzy jedną wiadomość. Wątek pod nią to miejsce na odpowiedzi, a licznik dba o to, żeby jutro pojawiło się kolejne pytanie.
Tylko ilustracja - rzeczywisty interfejs i działanie mogą się różnić
Kroki, nie skrypty
Każdy krok to jedna akcja z katalogu z własnymi wejściami, a wartość wytworzoną przez krok można podpiąć do dowolnego późniejszego kroku. Edytor oferuje zawsze tylko pasujące wartości. Za tym wyborem stoi 691 akcji i 181 typów parametrów.
Stała wartość, podpięta zmienna lub szablon
Każde wejście przyjmuje jedną z tych trzech opcji. Szablon miesza twój własny tekst z wstawianymi zmiennymi.
Wybór zmiennych uwzględnia typy
Ukrywa niepasujące wartości, wchodzi we właściwości obiektów, ostrzega o wartościach, które mogą być puste, i potrafi sam dodać krok konwersji.
Podpięte wartości widać jako etykiety
Chipy w tych wierszach to katalog pytań i kanał, więc widać, skąd pochodzi wartość.
Każdy krok ma swój koszt
Od Free do Very heavy, a flow pokazuje najgorszy scenariusz, zanim je aktywujesz.
Nie musisz zaczynać od pustego flow. Panel zawiera szablony, które możesz otworzyć i zmienić: odpowiadanie na powitania, powitania nowych członków, komendę /warn, komendę /remind, system XP, sugestie i zapisy na wydarzenia.
Pytanie dnia
AktywnyZapiszWyzwalacz
ZmieńHarmonogram, codziennie o 09:00
Pobierz wartość z magazynu(get-storage-value)
Odczytaj katalog pytań z{questions}
Wybierz następny wpis(array-at)
Ten po wczorajszym
Wyślij wiadomość(send-message)
Parametry wejściowe
Kanał:#ogólny
Wiadomość:Pytanie dnia
Utwórz wątek(start-thread-from-message)
Otwórz wątek pod tą wiadomością
Zwiększ wartość w magazynie(increment-storage-value)
Policz pytanie jako zadane w{asked}
Tylko ilustracja - rzeczywisty interfejs może się różnić
Rozgałęzienia i pętle
Automatyzacje wymagają decyzji. If, Switch, Random branch i Branch on subcommand dzielą flow, For each item, For each map entry i Repeat przechodzą po listach i mapach z Break i Continue, a blok Try daje miejsce na obsługę błędu, gdy Discord odmówi.
Każda gałąź ma własne zmienne
Wartość ustawiona wewnątrz gałęzi należy do tej gałęzi.
Try z gałęzią On error
Może reagować na kod błędu: Missing permissions, Not found, Invalid input, Storage error, Timeout, Interaction expired.
Zatrzymaj flow tam, gdzie to ma sens
If w tym flow publikuje przypomnienie na kanale staffu i kończy, zamiast wysyłać puste pytanie.
Pętla, która wymknie się spod kontroli, zatrzymuje się sama, więc błąd kończy się zatrzymaniem, a nie bieganiem przez cały ranek.
Pytanie dnia
AktywnyZapiszWyzwalacz
ZmieńHarmonogram, codziennie o 09:00
Pobierz wartość z magazynu(get-storage-value)
Odczytaj katalog pytań z{questions}
If(if-condition)
Katalog jest pusty: opublikuj przypomnienie na #staff i zatrzymaj
For each item(for-each)
Przechodź po katalogu, aż trafi się niewykorzystane pytanie
Wyślij wiadomość(send-message)
Opublikuj pytanie jako embed na#ogólny
Utwórz wątek(start-thread-from-message)
Otwórz wątek pod tą wiadomością
Tylko ilustracja - rzeczywisty interfejs może się różnić
Flows mogą wywoływać inne flows, a czekanie to krok
Napisz zachowanie raz i wywołuj je, skąd chcesz. A gdy flow potrzebuje odpowiedzi, zanim pójdzie dalej, to oczekiwanie jest zapisywane, a nie trzymane w pamięci, więc restart bota go nie gubi.
Wywołaj inne flow
Przekaż wartości i odczytaj wyniki. Flows, które wywoływałyby się nawzajem w kółko, są odrzucane.
Wywołane flow należy do uruchomienia wywołującego
Historia uruchomień to pokazuje i odsyła do wywołującego. Własne zdarzenia to luźniejszy wariant: jedno flow wysyła, inne nasłuchuje.
Oczekiwania przetrwają restart
Poproś o potwierdzenie, poproś o wybór, poczekaj na wiadomość, pokaż formularz i poczekaj na przesłanie. Restart w międzyczasie nie gubi oczekiwania.
Zaplanowane uruchomienia
Schedule flow run rezerwuje późniejsze uruchomienie z wnętrza flow, a są też akcje do anulowania i listowania oczekujących.
Jeśli edytujesz flow, gdy jego uruchomienie na kogoś czeka, to czekające uruchomienie się zatrzymuje, a log o tym informuje. Do czegoś, co ma być używalne przez miesiące, lepszy jest przycisk uruchamiający flow: nic nie kosztuje, dopóki nikt w niego nie kliknie, i nigdy nie wygasa.
Rozpatrz sugestię
AktywnyZapiszWyzwalacz
ZmieńWysłano formularz: Zaproponuj pytanie
Wyślij wiadomość(send-message)
Opublikuj sugestię z przyciskiem Zatwierdź na#staff
Czekaj na przycisk(wait-for-interaction)
Wstrzymaj do kliknięcia przez moderatora
Ustaw wartość w magazynie(set-storage-value)
Dodaj pytanie do{questions}
Wywołaj inne flow(call-flow)
Daily question, z nowym pytaniem jako argumentem
Tylko ilustracja - rzeczywisty interfejs może się różnić
Zobacz, zanim wypuścisz
Uruchomienie testowe symuluje flow na danych twojego serwera. Nic nie jest wysyłane, zmieniane ani usuwane. Wybierasz, jako kto działa, na jakim kanale i co przekazuje mu wyzwalacz, a wynik pokazuje każdy krok wraz z tym, co by zrobił. Testowanie nic nie kosztuje twojego serwera.
Flow jest też sprawdzane, zanim może zostać aktywne, więc problem wychodzi w edytorze, a nie o dziewiątej rano. A pętla, która się wymknie, nie położy twojego bota: zatrzyma się sama.
Szkic lub aktywny
Szkice są zapisywane i sprawdzane, ale nigdy się nie uruchamiają.
Zapisanie aktywnego flow działa od razu
Twój bot przejmuje nową wersję zaraz po zapisaniu. Jeśli to się nie uda, flow nadal obsługuje wersja, która już działała, i możesz spróbować ponownie.
Nic nie ginie przez przypadek
Jeśli ktoś inny zapisał flow, gdy miałeś je otwarte, dostaniesz ostrzeżenie zamiast nadpisania jego pracy. Usunięte flows i moduły można przywrócić przez 30 dni.
Jedna rzecz jasno: tylko uruchomienia testowe pokazują każdy krok. Uruchomienie na żywo zapisuje swój status, czas i krok, na którym się nie powiodło, a nie wszystko, przez co przeszło.
Uruchomienie testowe
Symulowane uruchomienie, nic nie zostało wysłanePobierz wartość z magazynu
Odczytano katalog, 120 wpisów
Wybierz następny wpis
Pytanie 42
Wyślij wiadomość
Opublikowałoby na #general
Utwórz wątek
Otworzyłoby wątek pod tą wiadomością
Zwiększ wartość w magazynie
Licznik zadanych pytań zmieniłby się z 41 na 42
Tylko ilustracja - rzeczywisty interfejs może się różnić
Pytania o flows
Flow, które na kogoś czeka, tak. Oczekiwania takie jak Ask for confirmation czy Wait for a message są zapisywane, a nie trzymane w pamięci, więc przetrwają restart. Jeden wyjątek wart znajomości: jeśli edytujesz flow, gdy jego uruchomienie czeka, to uruchomienie się zatrzymuje, a log o tym informuje.
Więcej o Custom Commands V3
Chcesz mieć swój serwer w becie?
V3 to duży system, który wciąż szybko się zmienia, dlatego serwery dołączają po kolei, a nie wszystkie naraz. Każde zgłoszenie czyta człowiek, a odpowiedź dostajesz w ciągu kilku dni.
Serwery, które już są w becie, współdecydują o dużej części tego, co zbudujemy dalej. To, co stworzysz, jest twoje: flows i moduły zostają po zakończeniu bety.