Fortuna régóta dobja a kockákat, számolja az érméket, és tartja életben a kampányokat a Discord szervereken. A háttérben azonban a bot egyetlen hatalmas programmá nőtte ki magát, amely mindent egyszerre zsonglőrködött — és a varratok kezdtek meglátszani. Így hát megtettük azt, amivel előbb-utóbb minden hosszú életű projekt szembesül: a nulláról építettük újra.
Az új Fortuna gyorsabban válaszol, stabilabb terhelés alatt, könnyebben fejleszthető a számunkra, és kész arra, hogy együtt növekedjen az asztaloddal. Ennek a munkának a nagy része olyan helyeken zajlott, amelyeket sosem fogsz látni — és pont ez a lényeg. De az eredmények mindenhol megmutatkoznak, ahol valóban használod. Íme a teljes történet arról, mi változott, és miért számít.
Az eredeti Fortuna egy elterjedt minta szerint épült: olyan bot volt, amely állandó, mindig nyitott kapcsolatot tartott fenn a Discorddal — ezt nevezi a Discord gateway-nek —, és folyamatosan figyelt mindent, ami a csatlakoztatott szerverein történt, mindig. Hogy a bot növekedésével bírja a terhelést, ezt a kapcsolatot több párhuzamos másolatra, úgynevezett shardokra bontottuk, ahol mindegyik egy különálló futó folyamat volt, amelyet figyelni, újraindítani és életben tartani kellett.
Ez működik, és működött is évekig. De valódi árat fizetünk érte. Egy állandóan kapcsolódó bot folyamatosan memóriát fogyaszt és állapotot tart, még akkor is, ha senki sem ír parancsot. Minden szerver, csatorna és tag, amelyet látott, súlyt adott hozzá. Amikor egy shard megakadt, szerverek egész csoportja érezhette. És minden új funkciót gondosan át kellett fűzni egy programon, amely már eleve egy tucat dolgot csinált egyszerre.
Valami karcsúbbra vágytunk. Olyasmire, ami akkor végzi a munkát, amikor van munka, csendben marad, amikor nincs, és olyan apró darabokból épül fel, amelyeket egyesével javíthatunk vagy skálázhatunk.
A modern Discord botoknak jobb lehetőségük van a parancsokra: ahelyett, hogy nyitva tartanák a kapcsolatot és várnának, a bot hagyhatja, hogy a Discord hívja meg csak akkor, amikor valaki ténylegesen használ egy slash parancsot. A Discord becsomagolja a parancsot, egyetlen biztonságos webes kérésként elküldi, a bot pedig válaszol. Nincs állandó kapcsolat, nincs üresjárati súly. Amikor semmi sem történik, a bot szinte semmit sem fogyaszt.
Ez az új tervezés lényege. A régi monolitot két fókuszált darabra bontottuk:
Képzeld el úgy, mint egy éttermet. A régi Fortuna egyetlen kapkodó szakács volt, aki egyszerre próbálta felvenni a rendeléseket, kezelni az éttermet és vezetni a konyhát. Az új Fortunának van egy konyhája, amely azonnal beindul, amint befut egy rendelés (fortuna-http), és egyetlen figyelmes hostja az ajtóban, aki a betérőkre figyel (fortuna-gateway). Mindegyik jól végzi a dolgát, és egyik sem lassítja a másikat.
A architektúrázás szép és jó, de íme, amit ténylegesen észre fogsz venni a szervereden.
Fürgébb válaszok. Mivel a parancsmag egyetlen dolgot csinál, és nem cipel üresjárati terhet, gyorsan és következetesen válaszol. Kevesebb dolog van, ami mögött egy parancsnak sorba kellene állnia.
Jobb megbízhatóság. A két darab független. Ha a chat-dobás segédnek újraindításra van szüksége, a slash parancsaid pislogás nélkül tovább működnek. A problémák elszigetelve maradnak, ahelyett, hogy végighullámoznának az egész boton.
Stabilabb nyomás alatt. Egy állapotmentes parancsmag nem halmoz fel súlyt, ahogy egyre több szerver és játékos csatlakozik. A pörgős esték sokkal inkább úgy viselkednek, mint a csendesek.
Gyorsabb fejlesztések. Egy tiszta, moduláris maggal úgy adhatunk hozzá és javíthatunk funkciókat, hogy ne zavarjuk meg a körülöttük lévő dolgokat. Az új parancsok tisztán illeszkednek be, ami azt jelenti, hogy a frissítések hamarabb érnek el hozzád.
Az újraépítés egyben lehetőség is arra, hogy szállítsuk azokat a dolgokat, amelyeket már egy ideje szerettünk volna hozzáadni. Az új Fortuna komoly adag funkciót hoz:
/lc, a moderátoroknak pedig a /mod_lc áll rendelkezésre az egyenlegek kezelésére. A jutalmak és rangok a közösségedhez maradnak kötve./config parancs egy helyre teszi a szerverenkénti beállításokat, így minden közösség úgy hangolhatja Fortunát, ahogy játszik./handouts folyamaton keresztül, ahogy egy jó virtuális asztalnál illik./checkin parancs megkönnyíti a jelenlét rögzítését és a csoportod nyomon követését.Mindez azok mellett áll, amiket Fortuna mindig is jól csinált: gazdag kockadobás (slash parancsokon keresztül és a dobások chatbe írásával egyaránt), a napi jutalom, a rangok, a bolt és a többi.
Az egyik legnagyobb kényelmi fejlesztés egyenesen az új magba épült: a teljes lokalizáció. Fortuna mostantól a Discord összes nyelvét beszéli — több mint harminc nyelvi területet —, és automatikusan a megfelelőt választja minden felhasználó Discord-beállításai alapján. A parancsnevek, a leírások és a válaszok a játékos saját nyelvén érkeznek, egy értelmes tartalék-láncolattal, így senki sem bámul soha hiányzó fordításra. Akár portugálul, angolul, spanyolul, franciául, japánul vagy bármi más nyelven játszik az asztalod, Fortuna mindenkit ott talál meg, ahol éppen van.
Ha szereted a technikai részleteket, íme néhány döntés, amelyre büszkék vagyunk — és nyugodtan átugorhatod ezt a szakaszt, ha nem.
A Discordtól érkező minden egyes parancskérést kriptográfiailag ellenőrzünk Ed25519 aláírásokkal, mielőtt Fortuna cselekedne, így a bot kizárólag valódi, manipulálatlan kérésekre válaszol. A parancsmag Bun-on fut a könnyűsúlyú Hono keretrendszerrel; a chat-dobás segéd egy kicsi, statikusan fordított Go program, amely apró lábnyommal jár üresjáratban. Mindkettő tiszta, konténerizált képként szállítódik, ami gyorssá és megismételhetővé teszi a telepítéseket. És beépítettünk egy rendes hibafigyelést is, hogy amikor valami mégis elromlik, értesüljünk róla, és gyorsan javíthassuk — miközben gondosan ügyelünk arra, hogy soha ne naplózzunk semmi érzékeny adatot.
A megosztott kockamotor ugyanaz a megbízható matematika, amely a többi eszközünket is hajtja, így egy dobás pontosan ugyanazt jelenti, akár a Discordon végzed, akár az ökoszisztéma bármely más pontján.
Ezek közül semmi sem változtatja meg Fortuna szellemiségét. Még mindig az a barátságos bot, amely dobja a kockáidat, és rendben tartja a kampányodat. Ami megváltozott, az az alapokban rejlik: karcsúbb, stabilabb, és úgy építve, hogy folyamatosan jobbá tehessük anélkül, hogy az utadba állnánk.
Add hozzá Fortunát a szerveredhez, próbáld ki az új parancsokat, és mondd el, mit szeretnél legközelebb látni. A kockák készen állnak, amint te is.