Custom Commands V3Flows i edytor
Custom Commands V3Beta

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

AktywnyZapisz

Wyzwalacz

Zmień

Harmonogram, codziennie o 09:00

#1

Pobierz wartość z magazynu(get-storage-value)

Odczytaj katalog pytań z{questions}

#2

Wybierz następny wpis(array-at)

Ten po wczorajszym

#3

Wyślij wiadomość(send-message)

Parametry wejściowe

Kanał:#ogólny

Wiadomość:Pytanie dnia

#4

Utwórz wątek(start-thread-from-message)

Otwórz wątek pod tą wiadomością

#5

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.

ogólny
Online
Twój botBOT09:00

Pytanie dnia

Jaka jest ta jedna gra, do której wracasz bez względu na to, jak bardzo się zestarzeje?

Pytanie 42 z 120

Mira09:04

Terraria. Co zimę instaluję ją od nowa.

Napisz na #ogólny

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

AktywnyZapisz

Wyzwalacz

Zmień

Harmonogram, codziennie o 09:00

#1

Pobierz wartość z magazynu(get-storage-value)

Odczytaj katalog pytań z{questions}

#2

Wybierz następny wpis(array-at)

Ten po wczorajszym

#3

Wyślij wiadomość(send-message)

Parametry wejściowe

Kanał:#ogólny

Wiadomość:Pytanie dnia

#4

Utwórz wątek(start-thread-from-message)

Otwórz wątek pod tą wiadomością

#5

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

AktywnyZapisz

Wyzwalacz

Zmień

Harmonogram, codziennie o 09:00

#1

Pobierz wartość z magazynu(get-storage-value)

Odczytaj katalog pytań z{questions}

#2

If(if-condition)

Katalog jest pusty: opublikuj przypomnienie na #staff i zatrzymaj

#3

For each item(for-each)

Przechodź po katalogu, aż trafi się niewykorzystane pytanie

#4

Wyślij wiadomość(send-message)

Opublikuj pytanie jako embed na#ogólny

#5

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ę

AktywnyZapisz

Wyzwalacz

Zmień

Wysłano formularz: Zaproponuj pytanie

#1

Wyślij wiadomość(send-message)

Opublikuj sugestię z przyciskiem Zatwierdź na#staff

#2

Czekaj na przycisk(wait-for-interaction)

Wstrzymaj do kliknięcia przez moderatora

#3

Ustaw wartość w magazynie(set-storage-value)

Dodaj pytanie do{questions}

#4

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łane

Pobierz 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.

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.