OpenVote to nowoczesne rozwiązanie pozwalające graczom na wspieranie swojego ulubionego miejsca gry poprzez głosowanie na publicznych listach serwerów. Użytkownicy otrzymują drobne nagrody przewidziane przez administratora, serwer zyskuje więcej głosów. Korzystanie jest darmowe dla list, jak i serwerów.
[dedykowana podstrona]
ID: MINECRAFT_JAVA
W roku 2020 rozpoczął się trend tworzenia list serwerów, głównie serwerów Minecraft. W modzie było posiadanie swojej wtyczki, takie rozwiązanie ma swoje wady, których nie ma OpenVote:
To nie pierwszy raz, gdy jest boom na listy, jak i również nie pierwsza próba unifikacji tego systemu. Istnieje stosunkowo popularna wtyczka Votifier
oraz następca NuVotifier
, jest ona jednak używana głównie na rynkach zagranicznych i nie jest wolna od problemów:
Nie ma rozwiązań bez wad - OpenVote, aby zapewniać prostą implementację dla twórców list i ochronę adresów IP serwerów dla ich właścicieli, działa jako scentralizowany broker. Jest to kwestia, komu bardziej ufamy - 10 listom, czy jednemu pośrednikowi. To przy pomocy brokera serwery komunikują się z listami, zapewnia on:
Opis całej komunikacji między wszystkimi jednostkami, która zachodzi podczas procesu głosowania, ze szczegółami. Proces może wydawać się skomplikowany, ze względu na to, że opisuje to co robi broker OpenVote (który ma największy udział w całym procesie), a nie tylko np. lista. Momentami może być mocno technicznie, fragment jest przeznaczony dla deweloperów oraz osób, które chcą zgłębić proces działania OpenVote - stanowczo mówimy nie dla security by obscurity:
list
- adres url listystats_id
- unikalny token (klucz prywatny) wygenerowany przy instalacji wtyczkisingle_cooldown
- jak często zostanie zaakceptowane głosowanie na tej samej liściegeneral_cooldown
- jak często zostanie zaakceptowane głosowanie ogółempass_identifiers
- informacja, czy przekazać liście jawnie dane gracza, np. nick oraz uuid, w przypadku gdy właściciel serwera zdecyduje się wyłączyć tę opcję, broker przekazuje jedynie hash tych wartościidentifiers
- lista informacji dotyczących użytkownika (type
, value
), to np. nick, uuidserver
- domena serweragame
- gra serweralang
- jezyk, w jakim ma zostać wyświetlony interfejsbackground
- adres url obrazka tła strony głosowania lub kolor htmlpublic_vote_id
: losowy ciąg znaków, identyfikator jawny głosu, będący dalej częścią adresu url głosowania na stronie OpenVote, przekazywany dalej do listy. Jest to jedynie tymczasowy identyfikator głosowania usuwany po 15 minutach.list_vote_id
: losowy ciąg znaków, wartość przeznaczona do poznania tylko dla listy i brokera, zapewnia dodatkowe bezpieczeństwo głosowania. Listy powinny używać tego id tylko i wyłącznie wewnętrznie (niejawnie dla użytkownika).server_vote_id
: losowy ciąg znaków, wartość przeznaczona do poznania tylko dla serwera i brokera, zapewnia dodatkowe bezpieczeństwo głosowania. Serwer powinien używać tego id tylko i wyłącznie wewnętrznie (niejawnie dla użytkownika).identifiers_hash
: wynik funkcji skrótu sha256, gdzie argumentem są wartości value
z identifiers
połączone ze sobą (np. nick+uuid).api_version
, wspierane gry supported_games
, opcjonalny adres url ikony listy list_icon
, adres url listy do dalszej komunikacji base_path
. Dane te są wykorzystane w procesie komunkacji, weryfikacji czy głosowanie może się odbyć oraz do prezentacji strony potwierdzania głosu.public_vote_id
, list_vote_id
.private_key
(dowolny ciąg znaków znany tylko liście, np. uuid) oraz wartości public_vote_id
wartość key
= sha256(private_key
+public_vote_id
). Jest ona używana do otrzymywania szczegołowych informacji o głosie w przypadku, gdy autor listy nie chce zapisywać żadnych dodatkowych informacji. W innym wypadku jest generowany losowy klucz, np. uuid i zapisywany w bazie w powiązaniu z konkretnym list_vote_id
.list_vote_id
), opcjonalnie zapisuje je, do późniejszego użycia. Broker przekazuje: list
, server
, game
, lang
, background
, identifiers_hash
oraz opcjonalnie identifiers
.list
powiązany z głosowaniem, jest zgodny z przeznaczeniem: tj. czy jest domeną listy. Do sytuacji gdzie ta wartość byłaby niezgodna, może dojść tylko w przypadku, gdy powiadomienie rozpoczęcia pochodziło z innego źródła niż brokera. Lista wysyła błąd LIST_MISMATCH
ze stosownym komunikatem.url
, klucz key
, opcjonalny link do ikony serwera server_icon
) lub błąd error
(ALREADY_VOTED
, INVALID_SERVER
, LIST_MISMATCH
, CUSTOM
).COMMUNICATION_ERROR
: w przypadku gdy nie udało się nawiązać komunikacji z listą i rozpocząć głosowania.VOTE_IN_PROGRESS
: gdy przed zakończeniem poprzedniego głosu identyfikowanego stats_id
oraz dowolnym identyfikatorem identifiers
nie minęło 15 minut.ALREADY_VOTED_SINGLE
: w przypadku gdy system stwierdził, że zgodnie z single_cooldown
, przynajmniej jeden z przekazanych identyfikatorów w wartości identifiers
już głosował na serwer śledzony przez stats_id
na liście list
. Ten błąd może również zostać przekazany od listy. Zawiera opcjonalnie następną datę w formacie ISO 8601, kiedy będzie można głosować.ALREADY_VOTED
: w przypadku gdy system stwierdził, że zgodnie z general_cooldown
, przynajmniej jeden z przekazanych identyfikatorów w wartości identifiers
już głosował na serwer śledzony przez stats_id
. Zawiera opcjonalnie następną datę w formacie ISO 8601, kiedy będzie można głosować.INVALID_GAME
: w przypadku, gdy wtyczka przekazała niewspieraną grę.INVALID_SERVER
: w przypadku, gdy server
nie istnieje na tej liście.CUSTOM
: wiadomość do 128 znaków. Przekazana od brokera lub bezpośrednio od listy.source
(BROKER
, LIST
).url
głosowania do udania się przez użytkownika oraz server_vote_id
. Serwer zapisuje w pamięci server_vote_id
.url
otrzymany od listy w punkcie 7.public_vote_id
. Lista korzysta z niego, aby ponownie wygenerować key
(patrz punkt 7.). Następnie odpytuje broker OpenVote, używając tych dwóch wartości, w celu uzyskania informacji o głosie opisanych w podpunkcie drugim punktu 7.background
.key
(patrz punkt 7.). W adresie url do potwierdzenia znajduje sie list_vote_id
, w przypadku braku zapisywania informacji o głosie, jest ono pobierane jak background
w punkcie 12. Lista w zwrocie otrzymuje return_url
i wykonuje przekierowanie tam użytkownika - dopiero wtedy może on otrzymać nagrodę.ALREADY_VOTED
z opcjonalną datą, kiedy będzie można głosować: lista weryfikuje się tak samo jak przy sukcesie i również dokonuje przekierowania na return_url
.VOTE_REJECTED
z opcjonalnym opisem (powodem odrzucenia głosu): lista weryfikuje się tak samo jak przy sukcesie i również dokonuje przekierowania na return_url
.server_vote_id
, to odpytuje co 30 sekund brokera OpenVote, wysyłając ich listę i pytając, czy któreś z nich zostało potwierdzone do wydania nagrody. Jeśli zostanie taka informacja odebrana, akceptuje wydanie nagród, wysyłając listę ich server_vote_id
, dalej autoryzując się, używając stats_id
. Powoduje to zakończenie animacji loadera na stronie użytkownika i wyświetlenie podziękowań. W przypadku, gdy do brokera zostanie wysłany nieznany/wygasły już server_vote_id
, broker oznacza go jako do usunięcia z pamięci przez serwer.Opis konkretnych id/tokenów/kluczy używanych przez proces komunikacji.
Token | Ścieżka | Opis |
---|---|---|
public_vote_id |
serwer(użytkownik)->openvote<->lista | publiczne id głosu, identyfikujące go przez 15 minut, używane w linkach oraz przez listę serwerów do uzyskiwania danych w implementacji bez zapisywania głosu |
list_vote_id |
openvote<->lista | prywatne id znane tylko liście, do komunikacji z brokerem, możliwe do pobrania z public_vote_id używając zdefiniowanego przez listę przy inicjalizacji głosu klucza key , przekazywane pierwszy raz liście razem z publicznym id przy inicjalizacji |
server_vote_id |
serwer<->openvote | prywatne id znane tylko serwerowi, do komunikacji z brokerem, utrudnia nadużycia nawet w przypadku wycieknięcia stats_id , serwer zapamiętuje dzięki niemu głosy i nie będzie przetwarzał takich, których sam nie rozpoczął i nie pobrał identyfikatora podczas inicializacji |
Instrukcja implementacji dla listy serwerów [zaplanowane]
API wtyczki Minecraft [zaplanowane]
Oficjalnie wspierane rozwiązanie. Sprawdź dostępność dla swojego języka tutaj.
Język | Nazwa | Link | Opis |
---|---|---|---|
Node.js | okaeri-sdk-node | https://www.npmjs.com/package/okaeri-sdk | podstrona |
Biblioteki społeczności oraz przestarzałe wersje oficjalne.
Język | Nazwa | Link | Opis |
---|---|---|---|
Stworzyłeś bibliotekę do języka niewspieranego przez Okaeri SDK? Napisz do nas z pytaniem o rozszerzenie listy.