Stworzyłem tego bota na potrzeby Discorda Sasuga-san@Ganbaranai (AKA OdA). Główną funkcjonalnością bota jest czytanie profilów MyAnimeList i wyliczanie "powerlevelu". Obliczanie odbywa się na podstawie Completed, czyli skończonych bajek i Days, czyli sumarycznej ilości czasu poświęconej na oglądanie bajek.
Poniżej techniczne szczegóły dla zainteresowanych tym, jak bot właściwie liczy XP i level.
XP jest liczone według poniższego wzoru:
xp = int(round(days_number * completed_number * factor * score_factor, 0))
gdzie factor
to 60/13
, a score_factor
to kara za odchylenie od średniej ocen:
middle = norm(5.5, 3.5).pdf(5.5) # prawdopodobieństwo wylosowania 5 z rozkładu normalnego o średniej 5.5 i wariancji 3.5
score_factor = norm(5.5, 3.5).pdf(meanscore_number) / middle # j.w, ale wylosowania średniej ocen z profilu
W przypadku, gdy średnia ocen z profilu to 5.5, ten czynnik wynosi 1 - w przeciwnym razie maleje. Po przemnożeniu wszystkiego XP jest zaokrąglone do pełnej liczby, a typ zmiennej zostaje zmieniony na liczbę całkowitą (żeby nie było zbędnego rozwinięcia dziesiętnego przy podawaniu liczby przez bota).
Poziom wyliczany jest na podstawie ramek XP, które podane są w pliku levels.csv
wewnątrz tego repozytorium.
!malbind <nazwa profilu MAL>
- przypisuje użytkownikowi Discord podany profil na MAL.
!mal
- dla przypisanego użytkownikowi profilu wylicza XP oraz level i przypisuję rolę na serwerze zależnie od levela.
!malcheck <nazwa profilu MAL>
- dla podanej nazwy profilu zwraca statystyki takie, jak !mal
. Działa także na nieprzypisanych profilach - dla przypisanych już profilów pobiera statystyki z bazy danych, nie z MALa.
!malfind <zapytanie>
- znajduje bajkę na MALu i podaje informacje o niej oraz link do wpisu na MALu.
!smug
- Losuje smug dziewczynkę z api smug.kancolle.pl. (10s cooldown)
!smugadd
- Dodaje smug dziewczynkę do api smug.kancolle.pl. Obrazek pobierany jest z załącznika, a w przypadku braku załącznika - z linka podanego po poleceniu.