Logica botului tău, pas cu pas
Un flow este o listă de pași. Flow-ul Întrebarea zilei are cinci: citește catalogul, alege următoarea întrebare, postează-o, deschide un fir, numără-o. Adaugă un pas, conectează-i o valoare, testează-l, apoi pornește-l.
Întrebarea zilei
ActivSalveazăDeclanșator
SchimbăProgramare, în fiecare zi la 09:00
Citește valoarea din stocare(get-storage-value)
Citește catalogul de întrebări din{questions}
Alege următoarea intrare(array-at)
Cea de după cea de ieri
Trimite mesaj(send-message)
Parametri de intrare
Canal:#general
Mesaj:Întrebarea zilei
Creează fir(start-thread-from-message)
Deschide un fir pe acel mesaj
Crește valoarea din stocare(increment-storage-value)
Numără întrebarea ca pusă în{asked}
Doar ilustrație - interfața reală poate diferi
Ce produc acei cinci pași la 09:00
Cei cinci pași produc un singur mesaj. Firul de sub el e locul unde ajung răspunsurile, iar contorul se asigură că mâine primește următoarea întrebare.
Doar ilustrație - interfața și comportamentul real pot diferi
Pași, nu scripturi
Fiecare pas este o acțiune din catalog, cu propriile intrări, iar valoarea produsă de un pas poate fi conectată la orice pas următor. Editorul îți oferă mereu doar valorile potrivite. În spatele selectorului sunt 691 de acțiuni și 181 de tipuri de parametri.
Valoare fixă, variabilă conectată sau șablon
Fiecare intrare acceptă una dintre cele trei. Un șablon îmbină textul tău cu variabile inserate.
Selectorul de variabile ține cont de tip
Ascunde valorile care nu se potrivesc, intră în proprietățile obiectelor, te avertizează despre valori care pot fi goale și poate adăuga pentru tine un pas de conversie.
Valorile conectate apar ca etichete
Etichetele de pe aceste rânduri sunt catalogul de întrebări și canalul, ca să vezi de unde vine o valoare.
Fiecare pas are un cost
De la Gratuit la Foarte greu, iar flow-ul îți arată cel mai rău caz înainte să-l activezi.
Nu trebuie să pornești de la un flow gol. Dashboard-ul vine cu șabloane pe care le poți deschide și modifica: un răspuns la salut, întâmpinarea membrilor noi, o comandă /warn, o comandă /remind, un sistem de XP, sugestii și o înscriere la eveniment.
Întrebarea zilei
ActivSalveazăDeclanșator
SchimbăProgramare, în fiecare zi la 09:00
Citește valoarea din stocare(get-storage-value)
Citește catalogul de întrebări din{questions}
Alege următoarea intrare(array-at)
Cea de după cea de ieri
Trimite mesaj(send-message)
Parametri de intrare
Canal:#general
Mesaj:Întrebarea zilei
Creează fir(start-thread-from-message)
Deschide un fir pe acel mesaj
Crește valoarea din stocare(increment-storage-value)
Numără întrebarea ca pusă în{asked}
Doar ilustrație - interfața reală poate diferi
Ramuri și bucle
Automatizările au nevoie de decizii. If, Switch, Random branch și Branch on subcommand împart flow-ul, For each item, For each map entry și Repeat parcurg liste și hărți cu Break și Continue, iar un bloc Try îți dă un loc unde să pui remedierea când Discord spune nu.
Fiecare ramură are propriile variabile
O valoare setată într-o ramură aparține acelei ramuri.
Try, cu o ramură On error
Poate comuta după codul erorii: Missing permissions, Not found, Invalid input, Storage error, Timeout, Interaction expired.
Oprește-te acolo unde oprirea e răspunsul corect
If-ul din acest flow postează un memento în canalul staff-ului și se oprește, în loc să posteze o întrebare goală.
O buclă scăpată de sub control se oprește singură, așa că o greșeală se oprește în loc să ruleze toată dimineața.
Întrebarea zilei
ActivSalveazăDeclanșator
SchimbăProgramare, în fiecare zi la 09:00
Citește valoarea din stocare(get-storage-value)
Citește catalogul de întrebări din{questions}
Dacă(if-condition)
Catalogul este gol: postează un memento în #staff și oprește-te
Pentru fiecare element(for-each)
Parcurge catalogul până apare o întrebare nefolosită
Trimite mesaj(send-message)
Postează întrebarea ca embed în#general
Creează fir(start-thread-from-message)
Deschide un fir pe acel mesaj
Doar ilustrație - interfața reală poate diferi
Flow-urile pot apela alte flow-uri, iar așteptarea este un pas
Scrie un comportament o dată și apelează-l de oriunde ai nevoie. Iar când un flow are nevoie de un răspuns înainte să continue, acea așteptare este notată, nu ținută în memorie, așa că o repornire a botului nu o pierde.
Apelează alt flow
Transmite valori și citește rezultatele înapoi. Flows care ar ajunge să se apeleze reciproc în cerc sunt refuzate.
Un flow apelat aparține rulării apelantului
Istoricul rulărilor o arată și face legătura înapoi la apelant. Evenimentele custom sunt varianta mai liberă: un flow trimite, altul ascultă.
Așteptările supraviețuiesc unei reporniri
Cere o confirmare, cere o alegere, așteaptă un mesaj, arată o fereastră pop-up și așteaptă trimiterea. O repornire pe parcurs nu pierde așteptarea.
Rulări programate
Schedule flow run rezervă o rulare ulterioară din interiorul unui flow și există acțiuni pentru anularea și listarea celor în așteptare.
Dacă editezi un flow în timp ce o rulare a lui așteaptă pe cineva, acea rulare se oprește, iar jurnalul o spune. Pentru ceva care trebuie să rămână utilizabil luni de zile, un buton care pornește un flow e unealta mai bună: nu costă nimic cât timp nimeni nu dă clic și nu expiră niciodată.
Evaluează o sugestie
ActivSalveazăDeclanșator
SchimbăFereastră pop-up trimisă, Sugerează o întrebare
Trimite mesaj(send-message)
Postează sugestia cu un buton Aprobă în#staff
Așteaptă butonul(wait-for-interaction)
Pune pe pauză până când un moderator dă clic
Setează valoarea din stocare(set-storage-value)
Adaugă întrebarea în{questions}
Apelează alt flow(call-flow)
Întrebarea zilei, cu noua întrebare ca argument
Doar ilustrație - interfața reală poate diferi
Vezi-l înainte să-l publici
O rulare de test simulează flow-ul pe datele propriului tău server. Nu se trimite, nu se schimbă și nu se șterge nimic. Alegi ca cine rulează, în ce canal rulează și ce îi transmite declanșatorul, iar rezultatul arată fiecare pas cu ce ar fi făcut. Testarea nu costă nimic serverul tău.
Un flow este verificat și înainte să poată deveni activ, așa că o problemă apare în editor, nu la nouă dimineața. Iar o buclă scăpată de sub control nu-ți poate doborî botul: se oprește singură.
Ciornă sau activ
Ciornele sunt salvate și verificate, dar nu rulează niciodată.
Salvarea unui flow activ intră în vigoare imediat
Botul tău preia noua versiune de îndată ce salvezi. Dacă nu reușește, versiunea care rula deja continuă să gestioneze flow-ul și poți încerca din nou.
Nimic nu se pierde din greșeală
Dacă altcineva a salvat flow-ul cât timp îl aveai deschis, primești un avertisment în loc să-i suprascrii munca. Flows și modulele șterse pot fi restaurate timp de 30 de zile.
Un lucru trebuie să fie clar: doar rulările de test îți arată fiecare pas. O rulare live își înregistrează starea, durata și pasul la care a eșuat, nu tot ce a parcurs.
Rulare de test
Rulare simulată, nu s-a trimis nimicGet storage value
Citește catalogul, 120 de intrări
Alege următoarea intrare
Întrebarea 42
Trimite mesaj
Ar fi postat în #general
Creează fir
Ar fi deschis un fir pe acel mesaj
Increase storage value
Contorul întrebat ar trece de la 41 la 42
Doar ilustrație - interfața reală poate diferi
Întrebări despre flow-uri
Unul care așteaptă pe cineva, da. Așteptările precum Ask for confirmation sau Wait for a message sunt notate, nu ținute în memorie, deci supraviețuiesc unei reporniri. O excepție bună de știut: dacă editezi flow-ul în timp ce o rulare a lui așteaptă, acea rulare se oprește, iar jurnalul o spune.
Mai multe despre Custom Commands V3
Vrei serverul tău în beta?
V3 este un sistem mare și încă evoluează repede, așa că serverele intră pe rând, nu toate odată. Fiecare cerere este citită de o persoană, iar răspunsul îl primești în câteva zile.
Serverele deja aflate în beta decid o bună parte din ce construim mai departe. Ce construiești este al tău: flows și modulele rămân și după încheierea beta.