Fortuna već dugo baca kockice, broji novčiće i drži kampanje u pogonu na Discord serverima. No iza kulisa, bot je narastao u jedan velik program koji žonglira sa svime odjednom — i šavovi su počeli pucati. Pa smo učinili ono pred čime se prije ili kasnije nađe svaki dugovječni projekt: prepisali smo ga iz temelja.
Nova Fortuna brže odgovara, stabilnija je pod opterećenjem, lakša nam je za poboljšavanje i spremna rasti zajedno s vašim stolom. Najveći dio tog posla odvio se na mjestima koja nikad nećete vidjeti, a upravo je to i poanta. Ali rezultati se vide posvuda gdje je doista koristite. Evo cijele priče o tome što se promijenilo i zašto je to važno.
Izvorna Fortuna bila je izgrađena na uobičajenom obrascu: bot koji drži trajnu, stalno otvorenu vezu prema Discordu — ono što Discord naziva gateway — i sve vrijeme osluškuje sve što se događa na svim serverima na kojima se nalazi. Da bi se nosila s opterećenjem kako je bot rastao, ta je veza bila podijeljena na nekoliko paralelnih kopija zvanih shardovi, od kojih je svaki bio zaseban proces koji se moralo nadzirati, ponovno pokretati i održavati zdravim.
To funkcionira, i funkcioniralo je godinama. Ali ima svoju cijenu. Trajno povezan bot stalno troši memoriju i drži stanje, čak i kad nitko ne tipka naredbu. Svaki server, kanal i član koji su mu vidljivi dodavali su težinu. Kad bi jedan shard zapeo, to bi osjetio cijeli niz servera. A svaku novu značajku trebalo je pažljivo provući kroz program koji je već radio desetak stvari odjednom.
Htjeli smo nešto vitkije. Nešto što radi kad ima posla, ostaje tiho kad ga nema i sastoji se od malih dijelova koje možemo popravljati ili skalirati jedan po jedan.
Moderni Discord botovi imaju bolju opciju za naredbe: umjesto da drži vezu otvorenom i čeka, bot može pustiti Discord da ga pozove tek kad netko stvarno upotrijebi slash naredbu. Discord zapakira naredbu, pošalje je kao jedan siguran web zahtjev, a bot odgovori. Bez stalne veze, bez težine u praznom hodu. Kad se ništa ne događa, bot troši gotovo ništa.
To je srž novog dizajna. Stari monolit podijelili smo na dva usredotočena dijela:
Zamislite to kao restoran. Stara Fortuna bila je jedan izbezumljen kuhar koji istovremeno pokušava primati narudžbe, voditi salu i upravljati kuhinjom. Nova Fortuna ima kuhinju koja se upali istog trena kad stigne narudžba (fortuna-http) i jednog pažljivog domaćina na vratima koji pazi na goste (fortuna-gateway). Svaki dobro radi svoj posao i nijedan ne usporava drugog.
Priča o arhitekturi je u redu, ali evo što ćete stvarno primijetiti na svom serveru.
Brži odgovori. Budući da jezgra naredbi radi jednu stvar i ne vuče sa sobom teret iz praznog hoda, odgovara brzo i dosljedno. Naredba ima manje toga ispred sebe na što bi čekala.
Bolja pouzdanost. Dva su dijela neovisna. Ako pomoćnik za chat-bacanja treba ponovno pokretanje, vaše slash naredbe rade dalje bez treptaja. Problemi ostaju ograničeni umjesto da se preliju preko cijelog bota.
Stabilnija pod pritiskom. Jezgra naredbi bez stanja ne nakuplja težinu kako se zbrajaju serveri i igrači. Užurbane večeri ponašaju se mnogo više poput onih mirnih.
Brža poboljšanja. S čistom, modularnom jezgrom možemo dodavati i popravljati značajke bez diranja svega oko njih. Nove naredbe uklapaju se čisto, što znači da ažuriranja stižu do vas brže.
Prepisivanje je ujedno i prilika da isporučimo ono što smo već neko vrijeme htjeli dodati. Nova Fortuna donosi pozamašnu hrpu značajki:
/lc za članove i /mod_lc za moderatore za upravljanje stanjima. Nagrade i rangovi ostaju vezani uz vašu zajednicu./config stavlja postavke pojedinog servera na jedno mjesto, pa svaka zajednica može podesiti Fortunu prema načinu na koji igra./handouts tijek, onako kako i dolikuje dobrom virtualnom stolu./checkin olakšava bilježenje prisutnosti i držanje grupe na okupu.Sve to stoji uz bok onome što je Fortuna oduvijek dobro radila: bogatom bacanju kockica (i preko slash naredbi i tipkanjem bacanja ravno u chat), dnevnoj nagradi, rangovima, trgovini i ostatku.
Jedno od najvećih poboljšanja kvalitete života ugrađeno je ravno u novu jezgru: potpuna lokalizacija. Fortuna sada govori sve Discordove jezike — više od trideset lokalizacija — i automatski bira pravi prema postavkama svakog korisnika na Discordu. Nazivi naredbi, opisi i odgovori stižu na igračevu vlastitom jeziku, uz razuman lanac zamjenskih opcija tako da nitko nikad ne zuri u nedostajući prijevod. Igrao vaš stol na portugalskom, engleskom, španjolskom, francuskom, japanskom ili bilo čemu između, Fortuna izlazi u susret svakome na njegovu jeziku.
Ako volite tehničke detalje, evo nekoliko odluka na koje smo ponosni — a ovaj odjeljak slobodno preskočite ako vam nisu zanimljive.
Svaki zahtjev za naredbom s Discorda kriptografski se provjerava pomoću Ed25519 potpisa prije nego što Fortuna reagira na njega, pa bot odgovara isključivo na izvorne, neizmijenjene zahtjeve. Jezgra naredbi vrti se na Bunu s laganim frameworkom Hono, a pomoćnik za chat-bacanja mali je, statički kompajliran Go program koji u mirovanju ima sićušan otisak. Oba se isporučuju kao čiste, kontejnerizirane slike, što čini implementacije brzima i ponovljivima. Uveli smo i pravi nadzor pogrešaka, pa kad nešto krene po zlu, doznamo za to i možemo brzo popraviti — uz pažnju da nikad ne zabilježimo ništa osjetljivo.
Dijeljeni pogon za kockice ista je provjerena matematika koja pokreće naše ostale alate, pa bacanje znači potpuno istu stvar bilo da ga izvedete na Discordu ili bilo gdje drugdje u ekosustavu.
Ništa od ovoga ne mijenja duh Fortune. I dalje je to prijateljski bot koji baca vaše kockice i drži vašu kampanju organiziranom. Promijenili su se temelji ispod: vitkiji, stabilniji i izgrađeni tako da je možemo nastaviti činiti boljom, a da vam pritom ne stojimo na putu.
Dodajte Fortunu na svoj server, isprobajte nove naredbe i javite nam što biste sljedeće željeli vidjeti. Kockice su spremne čim ste i vi.