Din bots logik, steg för steg
Ett flow är en lista med steg. Flowet Daglig fråga består av fem: läs katalogen, välj nästa fråga, posta den, öppna en tråd, räkna upp. Lägg till ett steg, koppla in ett värde, testa det och slå sedan på det.
Daglig fråga
AktivSparaTrigger
ÄndraSchema, varje dag kl. 09:00
Hämta lagringsvärde(get-storage-value)
Läs frågekatalogen från{questions}
Välj nästa post(array-at)
Den efter gårdagens
Skicka meddelande(send-message)
Indataparametrar
Kanal:#general
Meddelande:Dagens fråga
Skapa tråd(start-thread-from-message)
Öppna en tråd på det meddelandet
Öka lagringsvärde(increment-storage-value)
Räkna frågan som ställd i{asked}
Endast illustration - det faktiska gränssnittet kan se annorlunda ut
Det här ger de fem stegen klockan 09:00
De fem stegen ger ett meddelande. Tråden under det är dit svaren hamnar, och räknaren ser till att morgondagen får nästa fråga.
Endast illustration - det faktiska gränssnittet och beteendet kan se annorlunda ut
Steg, inte skript
Varje steg är en åtgärd ur katalogen med egna indata, och värdet ett steg ger kan kopplas in i vilket senare steg som helst. Redigeraren erbjuder alltid bara de värden som passar. Bakom väljaren finns 691 åtgärder och 181 parametertyper.
Fast värde, kopplad variabel eller mall
Varje indata tar en av de tre. En mall blandar din egen text med insatta variabler.
Variabelväljaren är typmedveten
Den döljer värden som inte passar, borrar sig in i objektegenskaper, varnar för värden som kan vara tomma och kan lägga till ett konverteringssteg åt dig.
Kopplade värden visas som chips
Chipsen på de här raderna är frågekatalogen och kanalen, så du ser var ett värde kommer ifrån.
Varje steg har en kostnad
Från Gratis till Mycket tung, och flowet visar sitt värsta fall innan du aktiverar det.
Du behöver inte börja med ett tomt flow. Dashboarden levereras med mallar du kan öppna och ändra: en hälsningssvarare, välkomna nya medlemmar, ett /warn-kommando, ett /remind-kommando, ett XP-system, förslag och en eventanmälan.
Daglig fråga
AktivSparaTrigger
ÄndraSchema, varje dag kl. 09:00
Hämta lagringsvärde(get-storage-value)
Läs frågekatalogen från{questions}
Välj nästa post(array-at)
Den efter gårdagens
Skicka meddelande(send-message)
Indataparametrar
Kanal:#general
Meddelande:Dagens fråga
Skapa tråd(start-thread-from-message)
Öppna en tråd på det meddelandet
Öka lagringsvärde(increment-storage-value)
Räkna frågan som ställd i{asked}
Endast illustration - det faktiska gränssnittet kan se annorlunda ut
Grenar och loopar
Automatiseringar behöver beslut. If, Switch, Random branch och Branch on subcommand delar upp flowet, For each item, For each map entry och Repeat går igenom listor och mappar med Break och Continue, och ett Try-block ger dig en plats för återhämtningen när Discord säger nej.
Varje gren har sina egna variabler
Ett värde som sätts inuti en gren tillhör den grenen.
Try, med en On error-gren
Den kan förgrena sig på felkoden: Missing permissions, Not found, Invalid input, Storage error, Timeout, Interaction expired.
Avbryt när det är rätt att avbryta
If-steget i det här flowet postar en påminnelse i personalkanalen och stannar, i stället för att posta en tom fråga.
En loop som skenar iväg stoppar sig själv, så ett misstag stoppar i stället för att köra hela förmiddagen.
Daglig fråga
AktivSparaTrigger
ÄndraSchema, varje dag kl. 09:00
Hämta lagringsvärde(get-storage-value)
Läs frågekatalogen från{questions}
If(if-condition)
Katalogen är tom: posta en påminnelse i #staff och stanna
For each item(for-each)
Gå igenom katalogen tills en oanvänd fråga dyker upp
Skicka meddelande(send-message)
Posta frågan som en inbäddning i#general
Skapa tråd(start-thread-from-message)
Öppna en tråd på det meddelandet
Endast illustration - det faktiska gränssnittet kan se annorlunda ut
Flows kan anropa andra flows, och väntan är ett steg
Skriv ett beteende en gång och anropa det varifrån du vill. Och när ett flow behöver ett svar innan det fortsätter skrivs väntan ner i stället för att hållas i minnet, så en omstart av boten tappar den inte.
Anropa ett annat flow
Skicka in värden och läs tillbaka resultat. Flows som skulle sluta anropa varandra i en cirkel avvisas.
Ett anropat flow hör till anroparens körning
Körhistoriken visar det och länkar tillbaka till anroparen. Egna events är den lösare varianten: ett flow skickar, ett annat lyssnar.
Väntan överlever en omstart
Be om bekräftelse, be om ett val, vänta på ett meddelande, visa ett popup-formulär och vänta på inskicket. En omstart emellan tappar inte väntan.
Schemalagda körningar
Schedule flow run bokar en senare körning inifrån ett flow, och det finns åtgärder för att avbryta och lista vad som väntar.
Om du redigerar ett flow medan en körning av det väntar på någon, stoppas den väntande körningen, och loggen säger det. För något som ska vara användbart i månader är en knapp som startar ett flow det bättre verktyget: den kostar ingenting så länge ingen klickar och går aldrig ut.
Granska ett förslag
AktivSparaTrigger
ÄndraPopup-formulär skickat, Föreslå en fråga
Skicka meddelande(send-message)
Posta förslaget med en Godkänn-knapp i#staff
Vänta på knapp(wait-for-interaction)
Pausa tills en moderator klickar
Sätt lagringsvärde(set-storage-value)
Lägg till frågan i{questions}
Anropa ett annat flow(call-flow)
Daglig fråga, med den nya frågan som argument
Endast illustration - det faktiska gränssnittet kan se annorlunda ut
Se det innan du lanserar
En testkörning simulerar flowet mot din egen serverdata. Inget skickas, ändras eller raderas. Du väljer vem den körs som, i vilken kanal den körs och vad triggern ger den, och resultatet visar varje steg med vad det skulle ha gjort. Att testa kostar din server ingenting.
Ett flow kontrolleras också innan det kan bli aktivt, så ett problem dyker upp i redigeraren i stället för klockan nio på morgonen. Och en loop som skenar iväg kan inte ta ner din bot: den stoppar sig själv.
Utkast eller aktivt
Utkast sparas och kontrolleras, och de körs aldrig.
Att spara ett aktivt flow gäller direkt
Din bot plockar upp den nya versionen så fort du sparar. Om det inte går igenom fortsätter den version som redan kördes att hantera flowet och du kan försöka igen.
Inget går förlorat av misstag
Om någon annan sparade flowet medan du hade det öppet får du en varning i stället för att skriva över deras arbete. Raderade flows och moduler kan återställas i 30 dagar.
En sak att vara tydlig med: bara testkörningar visar dig varje steg. En livekörning registrerar sin status, sin tidtagning och det steg den misslyckades vid, inte allt den gick igenom.
Testkörning
Simulerad körning, inget skickadesHämta lagringsvärde
Läs katalogen, 120 poster
Välj nästa post
Fråga 42
Skicka meddelande
Skulle ha postat i #general
Skapa tråd
Skulle ha öppnat en tråd på det meddelandet
Öka lagringsvärde
Räknaren för ställda frågor skulle gå från 41 till 42
Endast illustration - det faktiska gränssnittet kan se annorlunda ut
Frågor om flows
Ett flow som väntar på någon gör det. Väntan som Ask for confirmation eller Wait for a message skrivs ner i stället för att hållas i minnet, så de överlever en omstart. Ett undantag värt att känna till: om du redigerar flowet medan en körning av det väntar stoppas den körningen, och loggen säger det.
Mer om Custom Commands V3
Vill du ha in din server i betan?
V3 är ett stort system och det utvecklas fortfarande snabbt, så servrar släpps in en i taget i stället för alla på en gång. Varje ansökan läses av en person och du får svar inom några dagar.
Servrarna som redan är med i betan avgör en stor del av vad vi bygger härnäst. Det du bygger är ditt: flows och moduler finns kvar när betan tar slut.