Fortuna od dawna rzuca kośćmi, pilnuje monet i sprawia, że kampanie na serwerach Discord toczą się gładko. Za kulisami bot urósł jednak w jeden wielki program, który żonglował wszystkim naraz — a szwy zaczynały już pękać. Zrobiliśmy więc to, z czym prędzej czy później mierzy się każdy długowieczny projekt: przepisaliśmy go od podstaw.
Nowa Fortuna odpowiada szybciej, trzyma się stabilniej pod obciążeniem, łatwiej nam ją rozwijać i jest gotowa rosnąć razem z Twoją drużyną. Większość tej pracy odbyła się w miejscach, których nigdy nie zobaczysz — i o to właśnie chodzi. Ale efekty czuć wszędzie tam, gdzie faktycznie z niej korzystasz. Oto cała historia tego, co się zmieniło i dlaczego ma to znaczenie.
Pierwsza wersja Fortuny powstała według popularnego schematu: bot utrzymuje stałe, zawsze otwarte połączenie z Discordem — to, co Discord nazywa bramą (gateway) — i bez przerwy nasłuchuje wszystkiego, co dzieje się na każdym serwerze, do którego dołączył. Żeby udźwignąć obciążenie w miarę wzrostu bota, to połączenie zostało rozbite na kilka równoległych kopii zwanych shardami — każdy z nich to osobny działający proces, który trzeba było pilnować, restartować i utrzymywać w dobrej kondycji.
To działa i działało przez lata. Ale niesie ze sobą realne koszty. Stale podłączony bot bez przerwy zużywa pamięć i przechowuje stan, nawet gdy nikt nie wpisuje żadnej komendy. Każdy serwer, kanał i użytkownik, których mógł widzieć, dokładał ciężaru. Gdy jeden shard się zacinał, mógł to odczuć cały blok serwerów. A każdą nową funkcję trzeba było ostrożnie przewlec przez program, który i tak robił już kilkanaście rzeczy naraz.
Chcieliśmy czegoś lżejszego. Czegoś, co wykonuje pracę wtedy, gdy jest co robić, milczy, gdy nie ma nic do roboty, i składa się z małych klocków, które możemy naprawiać lub skalować jeden po drugim.
Nowoczesne boty Discord mają lepsze rozwiązanie dla komend: zamiast trzymać otwarte połączenie i czekać, bot może pozwolić Discordowi, żeby sam go wywołał dopiero wtedy, gdy ktoś naprawdę użyje komendy ukośnikowej. Discord pakuje komendę, wysyła ją jako pojedyncze bezpieczne żądanie sieciowe, a bot odpowiada. Żadnego stałego połączenia, żadnego ciężaru na jałowym biegu. Gdy nic się nie dzieje, bot zużywa niemal nic.
To jest serce nowego projektu. Rozdzieliliśmy dawny monolit na dwa wyspecjalizowane elementy:
Wyobraź to sobie jak restaurację. Stara Fortuna była jednym zaganianym kucharzem, który próbował jednocześnie przyjmować zamówienia, ogarniać salę i prowadzić kuchnię. Nowa Fortuna ma kuchnię, która rusza błyskawicznie, gdy tylko wpływa zamówienie (fortuna-http), oraz jednego uważnego hosta przy drzwiach, który wypatruje gości z ulicy (fortuna-gateway). Każde robi dobrze swoje, i żadne nie spowalnia drugiego.
Gadanie o architekturze jest w porządku, ale oto co naprawdę zauważysz na swoim serwerze.
Żwawsze odpowiedzi. Ponieważ rdzeń komend robi tylko jedną rzecz i nie dźwiga zbędnego balastu z jałowego biegu, odpowiada szybko i spójnie. Komenda ma na co mniej czekać.
Większa niezawodność. Oba elementy są niezależne. Jeśli pomocnik od rzutów na czacie potrzebuje restartu, Twoje komendy ukośnikowe działają dalej bez mrugnięcia okiem. Problemy zostają zamknięte w obrębie jednego elementu, zamiast rozlewać się po całym bocie.
Stabilniej pod presją. Bezstanowy rdzeń komend nie obrasta w ciężar, gdy przybywa serwerów i graczy. Ruchliwe wieczory zachowują się o wiele bardziej jak te spokojne.
Szybsze ulepszenia. Mając czysty, modułowy rdzeń, możemy dodawać i naprawiać funkcje bez naruszania wszystkiego dookoła. Nowe komendy wskakują na swoje miejsce czysto, co oznacza, że aktualizacje trafiają do Ciebie szybciej.
Przebudowa to także okazja, żeby wreszcie dowieźć rzeczy, które od dawna chcieliśmy dodać. Nowa Fortuna przynosi solidną porcję nowych funkcji:
/lc dla członków i /mod_lc dla moderatorów do zarządzania saldami. Nagrody i rangi pozostają zamknięte w obrębie Twojej społeczności./config zbiera ustawienia danego serwera w jednym miejscu, dzięki czemu każda społeczność może dostroić Fortunę do tego, jak gra./handouts, tak jak powinien to robić dobry wirtualny stół./checkin ułatwia odznaczanie obecności i trzymanie grupy w ryzach.To wszystko stoi obok rzeczy, które Fortuna zawsze robiła dobrze: bogatego rzucania kośćmi (zarówno przez komendy ukośnikowe, jak i przez wpisywanie rzutów wprost na czacie), codziennej nagrody, rang, sklepu i całej reszty.
Jednym z największych usprawnień dla wygody jest coś wbudowanego prosto w nowy rdzeń: pełna lokalizacja. Fortuna mówi teraz wszystkimi językami Discorda — ponad trzydziestoma — i automatycznie dobiera właściwy na podstawie ustawień każdego użytkownika Discorda. Nazwy komend, opisy i odpowiedzi docierają w języku gracza, z sensownym łańcuchem awaryjnym, dzięki czemu nikt nigdy nie utknie wpatrzony w brakujące tłumaczenie. Niezależnie od tego, czy Twoja drużyna gra po polsku, portugalsku, angielsku, hiszpańsku, francusku, japońsku czy w czymkolwiek pomiędzy, Fortuna wychodzi naprzeciw każdej osobie tam, gdzie jest.
Jeśli lubisz techniczne szczegóły, oto kilka decyzji, z których jesteśmy dumni — a jeśli nie lubisz, możesz spokojnie pominąć tę sekcję.
Każde żądanie komendy z Discorda jest kryptograficznie weryfikowane za pomocą podpisów Ed25519, zanim Fortuna na nie zareaguje — bot odpowiada więc wyłącznie na autentyczne, nienaruszone żądania. Rdzeń komend działa na Bun z lekkim frameworkiem Hono; pomocnik od rzutów na czacie to mały, statycznie skompilowany program w Go, który na jałowym biegu zostawia maleńki ślad. Oba dostarczamy jako czyste, skonteneryzowane obrazy, co czyni wdrożenia szybkimi i powtarzalnymi. Wpięliśmy też porządne monitorowanie błędów, żeby gdy coś jednak pójdzie nie tak, dowiedzieć się o tym i szybko naprawić — przy czym pilnujemy, by nigdy nie logować niczego wrażliwego.
Współdzielony silnik kości to ta sama zaufana matematyka, która napędza nasze pozostałe narzędzia, więc rzut znaczy dokładnie to samo, czy wykonasz go na Discordzie, czy gdziekolwiek indziej w ekosystemie.
Nic z tego nie zmienia ducha Fortuny. To wciąż przyjazny bot, który rzuca Twoimi kośćmi i pilnuje porządku w kampanii. Zmienił się fundament pod spodem: lżejszy, stabilniejszy i zbudowany tak, byśmy mogli wciąż go ulepszać, nie wchodząc Ci w drogę.
Dodaj Fortunę do swojego serwera, wypróbuj nowe komendy i daj nam znać, co chciałbyś zobaczyć dalej. Kości są gotowe, kiedy tylko Ty będziesz.