Fortuna har rullet terninger, holdt styr på mønter og holdt kampagner i gang på Discord-servere i lang tid. Bag kulisserne var botten dog vokset til ét stort program, der jonglerede med alting på én gang — og sprækkerne var begyndt at vise sig. Så vi gjorde det, ethvert langlivet projekt før eller siden står over for: vi byggede den om fra bunden.
Den nye Fortuna svarer hurtigere, holder bedre stand under belastning, er nemmere for os at forbedre og er klar til at vokse med dit bord. Det meste af det arbejde foregik steder, du aldrig kommer til at se, og det er netop pointen. Men resultaterne dukker op overalt, hvor du faktisk bruger den. Her er hele historien om, hvad der blev ændret, og hvorfor det betyder noget.
Den oprindelige Fortuna var bygget op om et velkendt mønster: en bot, der holder en permanent, altid åben forbindelse til Discord — det Discord kalder gateway'en — og lytter til alt, hvad der sker på tværs af hver eneste server, den var med på, hele tiden. For at håndtere belastningen i takt med, at botten voksede, blev den forbindelse delt op i flere parallelle kopier, kaldet shards, hver især en separat kørende proces, der skulle overvåges, genstartes og holdes sund.
Det fungerer, og det fungerede i årevis. Men det har reelle omkostninger. En permanent forbundet bot bruger hele tiden hukommelse og holder på tilstand, selv når ingen skriver en kommando. Hver server, kanal og medlem, den kunne se, lagde vægt til. Når én shard fik en hikke, kunne en bunke servere mærke det. Og hver ny funktion måtte trædes omhyggeligt ind i et program, der i forvejen lavede et dusin ting på én gang.
Vi ville have noget slankere. Noget, der gør arbejdet, når der er arbejde at gøre, holder sig stille, når der ikke er, og er bygget af små stykker, vi kan reparere eller skalere ét ad gangen.
Moderne Discord-bots har en bedre løsning til kommandoer: i stedet for at holde en forbindelse åben og vente, kan botten lade Discord kalde den kun, når nogen rent faktisk bruger en slash-kommando. Discord pakker kommandoen ind, sender den over som én enkelt sikker webanmodning, og botten svarer. Ingen stående forbindelse, ingen tomgangsvægt. Når der ikke sker noget, bruger botten næsten ingenting.
Det er kernen i det nye design. Vi delte den gamle monolit op i to fokuserede stykker:
Tænk på det som en restaurant. Den gamle Fortuna var én forjaget kok, der prøvede at tage imod bestillinger, styre spisesalen og drive køkkenet på samme tid. Den nye Fortuna har et køkken, der fyrer op med det samme, når en bestilling kommer ind (fortuna-http), og en enkelt opmærksom vært ved døren, der holder øje med gæster, der kommer ind fra gaden (fortuna-gateway). Hver passer sit godt, og ingen af dem sinker den anden.
Snak om arkitektur er fint, men her er, hvad du rent faktisk vil bemærke på din server.
Hurtigere svar. Fordi kommandokernen gør én ting og ikke slæber rundt på tomgangsbagage, svarer den hurtigt og konsekvent. Der er mindre for en kommando at vente bag.
Bedre pålidelighed. De to stykker er uafhængige. Hvis chat-kast-hjælperen har brug for en genstart, bliver dine slash-kommandoer ved med at virke uden at blinke. Problemer holder sig afgrænsede i stedet for at brede sig ud over hele botten.
Mere stabil under pres. En tilstandsløs kommandokerne hober ikke vægt op, efterhånden som flere servere og spillere kommer til. Travle aftener opfører sig en hel del mere som stille aftener.
Hurtigere forbedringer. Med en ren, modulær kerne kan vi tilføje og rette funktioner uden at forstyrre alt rundt om dem. Nye kommandoer falder rent på plads, hvilket betyder, at opdateringer når dig hurtigere.
En genopbygning er også en chance for at levere de ting, vi længe havde haft lyst til at tilføje. Den nye Fortuna bringer en god håndfuld funktioner med sig:
/lc til medlemmer og /mod_lc til moderatorer, der kan styre saldi. Belønninger og rangordener holder sig inden for dit fællesskab./config-kommando samler indstillinger pr. server ét sted, så hvert fællesskab kan finjustere Fortuna, så den passer til, hvordan de spiller./handouts-flow, sådan som et godt virtuelt bord bør./checkin-kommando gør det nemt at registrere fremmøde og holde din gruppe på sporet.Alt dette ligger side om side med de ting, Fortuna altid har været god til: rige terningekast (både gennem slash-kommandoer og ved at skrive kast direkte i chatten), den daglige belønning, rangordener, butikken og resten.
En af de største forbedringer i hverdagskomforten er bygget direkte ind i den nye kerne: fuld lokalisering. Fortuna taler nu alle Discords sprog — over tredive sprogvarianter — og den vælger automatisk den rigtige ud fra hver brugers Discord-indstillinger. Kommandonavne, beskrivelser og svar kommer på spillerens eget sprog, med en fornuftig fallback-kæde, så ingen nogensinde står og stirrer på en manglende oversættelse. Uanset om dit bord spiller på portugisisk, engelsk, spansk, fransk, japansk eller noget midt imellem, møder Fortuna hver person dér, hvor de er.
Hvis du kan lide de tekniske detaljer, er her et par af de valg, vi er stolte af — og du kan trygt springe dette afsnit over, hvis ikke.
Hver kommandoanmodning fra Discord bliver kryptografisk verificeret med Ed25519-signaturer, før Fortuna handler på den, så botten kun nogensinde svarer på ægte, urørte anmodninger. Kommandokernen kører på Bun med det lette Hono-framework; chat-kast-hjælperen er et lille, statisk kompileret Go-program, der står i tomgang med et bitte lille aftryk. Begge leveres som rene, containeriserede images, hvilket gør udrulninger hurtige og gentagelige. Og vi har koblet ordentlig fejlovervågning til, så når noget går galt, hører vi om det og kan rette det hurtigt — samtidig med at vi omhyggeligt aldrig logger noget følsomt.
Den fælles terningemotor er den samme betroede matematik, der driver vores andre værktøjer, så et kast betyder præcis det samme, uanset om du laver det på Discord eller andre steder i økosystemet.
Intet af dette ændrer Fortunas ånd. Den er stadig den venlige bot, der ruller dine terninger og holder din kampagne organiseret. Det, der blev ændret, er fundamentet nedenunder: slankere, mere stabilt og bygget, så vi kan blive ved med at gøre den bedre uden at komme i vejen for dig.
Føj Fortuna til din server, prøv de nye kommandoer, og lad os vide, hvad du gerne vil se næste gang. Terningerne er klar, når du er.