From 79e9bbc1b31ef5b5719d279e56004d7fed4a98e1 Mon Sep 17 00:00:00 2001 From: Thomas Daniels Date: Sun, 3 May 2020 12:39:43 +0200 Subject: [PATCH 01/16] Use unweighted values on reportable A bit too many false reports otherwise --- modules/evaluation/src/main/PlayerAggregateAssessment.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/evaluation/src/main/PlayerAggregateAssessment.scala b/modules/evaluation/src/main/PlayerAggregateAssessment.scala index 52f7c96001..b6cc16cc65 100644 --- a/modules/evaluation/src/main/PlayerAggregateAssessment.scala +++ b/modules/evaluation/src/main/PlayerAggregateAssessment.scala @@ -49,7 +49,7 @@ case class PlayerAggregateAssessment( (scoreCheatingGames(8) || scoreLikelyCheatingGames(16)) val reportable: Boolean = isWorthLookingAt && - (weightedCheatingSum >= 2 || weightedCheatingSum + weightedLikelyCheatingSum >= (if (isNewRatedUser) 2 + (cheatingSum >= 2 || cheatingSum + likelyCheatingSum >= (if (isNewRatedUser) 2 else 4)) && (scoreCheatingGames(5) || scoreLikelyCheatingGames(10)) From df88ad34499facc1da3696026beac4c200b7cf9d Mon Sep 17 00:00:00 2001 From: michael1241 Date: Sun, 3 May 2020 12:35:50 +0100 Subject: [PATCH 02/16] updating impersonation preset message --- modules/msg/src/main/MsgPreset.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/msg/src/main/MsgPreset.scala b/modules/msg/src/main/MsgPreset.scala index b24aa4724a..170f074510 100644 --- a/modules/msg/src/main/MsgPreset.scala +++ b/modules/msg/src/main/MsgPreset.scala @@ -68,9 +68,9 @@ Please also remember that, over the long run, ratings tend to gravitate towards """, /* ---------------------------------------------------------------*/ """ -Warning: Username that implies you are a titled player +Warning: Username or profile that implies you are a titled player -The username policy (https://github.com/ornicar/lila/wiki/Username-policy) for Lichess states that you can't have a username that implies that you have a FIDE title or the Lichess Master title. Actual titled players can verify using the form here (https://lichess.org/verify-title) with evidence that documents their identity, e.g. a scanned ID card, driving license, passport or similar. We will then verify your identity and title, and your title will be shown in front of your username and on your Lichess user profile. Since your username implies that you have a title, we reserve the right to close your account within two weeks, if you have not verified your title within that time. +The username policy (https://github.com/ornicar/lila/wiki/Username-policy) for Lichess states that you can't have a username that implies that you have a FIDE title or the Lichess Master title, or impersonating a specific titled player. Actual titled players can verify using the form here (https://lichess.org/verify-title) with evidence that documents their identity, e.g. a scanned ID card, driving license, passport or similar. We will then verify your identity and title, and your title will be shown in front of your username and on your Lichess user profile. Since your username or profile implies that you have a title, we reserve the right to close your account within two weeks, if you have not verified your title within that time. """, /* ---------------------------------------------------------------*/ """ From a77500bbc0013b9e66b067282e79366ef08d9d83 Mon Sep 17 00:00:00 2001 From: Niklas Fiekas Date: Sun, 3 May 2020 14:41:58 +0200 Subject: [PATCH 03/16] use %% in wayOfBerserkExplanation --- app/views/site/faq.scala | 1 - bin/trans-lint.py | 5 +++-- translation/source/faq.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/site/faq.scala b/app/views/site/faq.scala index a9afca2401..2174bd15d8 100644 --- a/app/views/site/faq.scala +++ b/app/views/site/faq.scala @@ -237,7 +237,6 @@ object faq { ), p( wayOfBerserkExplanation( - "%", a(href := "https://lichess.org/tournament/cDyjj1nL")(aHourlyBulletTournament()) ) ), diff --git a/bin/trans-lint.py b/bin/trans-lint.py index cdb5ba2662..3493df10e2 100755 --- a/bin/trans-lint.py +++ b/bin/trans-lint.py @@ -132,8 +132,9 @@ def lint_string(ctx, dest, source, allow_missing=0): m_dest = dest if pattern.isupper() else dest.lower() if pattern in m_source and pattern not in m_dest: ctx.notice(f"missing {pattern}") - #elif pattern not in m_source and pattern in m_dest: - # ctx.notice(f"unexpected {pattern}") + + if "%%" in source and "%%" not in dest: + ctx.warning("missing %%") if "PGN" in source and "PNG" in dest: ctx.warning("PNG instead of PGN") diff --git a/translation/source/faq.xml b/translation/source/faq.xml index 4e4b50674e..fec81432cd 100644 --- a/translation/source/faq.xml +++ b/translation/source/faq.xml @@ -95,7 +95,7 @@ Do not ask for the LM title. guidelines Unique trophies That trophy is unique in the history of Lichess, nobody other than %1$s will ever have it. - To get it, hiimgosu challenged himself to berserk and win 100%1$s games of %2$s. + To get it, hiimgosu challenged himself to berserk and win 100%% games of %s. a hourly Bullet tournament ZugAddict was streaming and for the last 2 hours he had been trying to defeat A.I. level 8 in a 1+0 game, without success. Thibault told him that if he successfully did it on stream, he'd get a unique trophy. One hour later, he smashed Stockfish, and the promise was honoured. Lichess ratings From db23a37703028c3c6e21071175ecdc9a6a321955 Mon Sep 17 00:00:00 2001 From: Niklas Fiekas Date: Sun, 3 May 2020 15:26:52 +0200 Subject: [PATCH 04/16] update translations --- translation/dest/class/sl-SI.xml | 7 ++- translation/dest/contact/sl-SI.xml | 36 +++++++++++-- translation/dest/emails/be-BY.xml | 2 +- translation/dest/faq/de-DE.xml | 3 +- translation/dest/faq/eu-ES.xml | 84 +++++++++++++++++++++++++++++ translation/dest/faq/nl-NL.xml | 13 ++++- translation/dest/faq/ru-RU.xml | 2 +- translation/dest/patron/sl-SI.xml | 76 +++++++++++++++++++++++++- translation/dest/site/da-DK.xml | 2 +- translation/dest/site/es-ES.xml | 2 +- translation/dest/site/hr-HR.xml | 2 +- translation/dest/site/nl-NL.xml | 4 +- translation/dest/site/nn-NO.xml | 2 +- translation/dest/site/pl-PL.xml | 2 +- translation/dest/site/pt-BR.xml | 2 +- translation/dest/site/pt-PT.xml | 2 +- translation/dest/site/ru-RU.xml | 2 +- translation/dest/site/sr-SP.xml | 2 +- translation/dest/site/zh-CN.xml | 2 +- translation/dest/team/nl-NL.xml | 9 ++++ translation/dest/tourname/nl-NL.xml | 2 +- 21 files changed, 236 insertions(+), 22 deletions(-) diff --git a/translation/dest/class/sl-SI.xml b/translation/dest/class/sl-SI.xml index 29b3ca567c..82e4771f49 100644 --- a/translation/dest/class/sl-SI.xml +++ b/translation/dest/class/sl-SI.xml @@ -26,7 +26,7 @@ Dodajte Lichess uporabniška imena, da jih povabite kot učitelje. Po enega na vrstico. Najprej se morajo prijaviti kot Lichess Učitelji. Ponastavi geslo - Skrbno is zapišite geslo. Nikoli več ga ne boste videli! + Skrbno si zapišite geslo. Nikoli več ga ne boste videli! Geslo: %s Ustvarite novo geslo za učenca Povabljeni v %1$s preko %2$s @@ -67,10 +67,15 @@ Tukaj je povezava za dostop do razreda. Ni odstranjenih študentov. Čez dneve Čas igranja + Delež zmag + Ni na voljo Novice razreda Uredi novice Obvestite vse študente Tu ni še ničesar. Vse novice o razredu na enem samem polju. Dodajte zadnje novice na vrh. Ne izbrišite prejšnjih novic. + Ločene novice s --- +Prikazal bo horizontalno črto. + %s je na voljo za naprednejšo skladnjo. diff --git a/translation/dest/contact/sl-SI.xml b/translation/dest/contact/sl-SI.xml index 1dc4dff9c3..a2bcd5f578 100644 --- a/translation/dest/contact/sl-SI.xml +++ b/translation/dest/contact/sl-SI.xml @@ -3,7 +3,7 @@ Kontakt Kontaktiraj lichess S čim vam lahko pomagamo? - Obišči to stran, da rešiš težavo + Obiščite to stran, da rešite težavo Nemorem se vpisati Nisem prejel potrditvene pošte Pozabil sem geslo @@ -16,8 +16,8 @@ Za prikaz vašega naziva na vašem Lichess profilu in sodelovanje v naslovni areni, obiščite stran za potrditev naziva Hočem zapreti svoj račun Svoj račun lahko zaprete na tej strani - Ne sprašujte nas po elektronski pošti za zaprtje računa, tega ne bomo storili. - Želim ponovno odprti svoj račun + Ne sprašujte nas po elektronski pošti za zaprtje računa, tega ne bomo naredili. + Hočem ponovno odpreti svoj račun Svoj račun lahko ponovno odprete na tej strani. To lahko storite samo enkrat. Ne sprašujte nas po elektronski pošti za ponovno odprtje računa, tega ne bomo naredili. Želim spremeniti svoje uporabniško ime @@ -28,6 +28,7 @@ Ni možno pobrisati vaše zgodovine igranih iger, zgodovine ugank ali ratinga. Hočem prijaviti igralca goljufanje + peskanje trolanje žalitev nek drug razlog @@ -39,6 +40,8 @@ Samo prijava igralcev z obrazcem za prijavo je učinkovita. Hočem prijaviti hrošča V Lichess oddelku foruma za povratne informacije + Kot problem Lichess spletne strani na GitHub + Kot problem Lichess mobilne aplikacije na GitHub Na Lichessovem Discord strežniku Prosimo, opišite kako hrošč izgleda, kaj ste pričakovali, da se zgodi in koraki za razmnoževanje hrošča. Nepravilno jemanje kmeta @@ -47,4 +50,31 @@ Nepravilno ali nemogoče rokiranje Rokado preprečimo samo, če gre kralj skozi nadzarovano polje. Prepričajte se, da razumete pravila rokade + Preizkusite to malo interaktivno igro, da vadite rokiranje v šahu + Če ste igro uvozili ali jo začeli iz položaja, se prepričajte, da pravilno nastavite previce za rokado. + Nezadostni material za matiranje + Po šahovskih pravilih FIDE §6.9, če je mat možen s katerim koli pravnim zaporedjem potez, potem igra ni remi + Mogoče je matirati samo s skakačem ali lovcem, če nasprotnik nima na šahovnici samo kralja. + Nobene rating točke niso bile podeljene + Prepričajte se, da ste igrali rangirano igro. Običajne igre ne vplivajo na igralčeve ratinge. + Stran z napako + Če ste soočeni s stranjo z napako, jo lahko prijavite: + Pritožba na prepoved ali omejitev IP + Oznaka za goljufa oziroma uporabnika računalniške pomoči + Pritožbo lahko pošljete na %s. + Včasih se zgodijo lažni pozitivni rezultati in žal nam je zaradi tega. + Če je vaša pritožba legitimna, bomo prepoved čim prej odpravili. + Če ste uporabili računalniško pomoč, pa čeprav samo enkrat, je vaš račun žal izgubljen. + Ne zanikajte, da ste goljufali. Če želite imeti dovoljenje za ustvarjanje novega računa, samo priznajte, kaj ste storili, in pokažite, da ste razumeli, da gre za napako. + Druge omejitve + Sodelovanje, pravno, komercialno + Monetizacija Lichess + Kupovanje Lichess + Pooblastilo za uporabo Lichessa + Dobrodošli ste, da uporabljate Lichess za vašo aktivnost, tudi komercialno. + Prikažete ga lahko v svojih videoposnetkih in posnetek zaslona Lichess-a pa lahko natisnete v svojih knjigah. + Kredit je cenjen, vendar ni potreben. + Nič od naštetega + Pošljite nam ektronsko pošto na %s. + Prosimo, pojasnite svojo zahtevo jasno in temeljito. Navedite svoje uporabniško ime Lichess in vse podatke, ki bi nam lahko pomagali, da vam pomagamo. diff --git a/translation/dest/emails/be-BY.xml b/translation/dest/emails/be-BY.xml index 7395352917..949c425369 100644 --- a/translation/dest/emails/be-BY.xml +++ b/translation/dest/emails/be-BY.xml @@ -1,7 +1,7 @@ %s, пацвердзіце ваш уліковы запіс на lichess.org - Пстрыкніце па спасылцы, каб актываваць уліковы запіс Lichess: + Націсніце на спасылку, каб актываваць уліковы запіс Lichess: Калі вы не рэгістраваліся на Lichess, проста праігнаруйце гэты ліст. %s, вы скідваеце ваш пароль на lichess.org Мы атрымалі запыт на скід пароля для вашага ўліковага запісу. diff --git a/translation/dest/faq/de-DE.xml b/translation/dest/faq/de-DE.xml index 77eb04e674..aed1833844 100644 --- a/translation/dest/faq/de-DE.xml +++ b/translation/dest/faq/de-DE.xml @@ -27,6 +27,7 @@ Es ist nicht möglich, sich als Moderator zu bewerben. Wenn wir jemanden sehen, von dem wir glauben, dass er als Moderator gut wäre, werden wir ihn direkt kontaktieren. Unterscheidet sich Fernschach von normalem Schach? Bei Lichess besteht der Hauptunterschied bei den Regeln für Fernschach darin, dass ein Eröffnungsbuch erlaubt ist. Die Verwendung von Schachcomputern ist immer noch verboten und führt zu einer Markierung des Kontos wegen unerlaubter Unterstützung durch Schachcomputer. Obwohl die ICCF die Verwendung von Schachcomputern in Fernschachpartien erlaubt, ist dies auf Lichess nicht erlaubt. + Spielerlebnis Wie wird entschieden, was Bullet, Blitz und andere Zeitkontrollen sind? Lichess Zeitkontrollen basieren auf der erwarteten Spieldauer = %1$s Zum Beispiel berechnet sich die erwartete Spieldauer einer 5+3 Partie zu 5 * 60 + 40 * 3 = 420 Sekunden. @@ -94,7 +95,7 @@ Bitten nicht darum, den LM-Titel zu erhalten. Richtlinien Einmalige Trophäen Diese Trophäe ist einzigartig in der Geschichte von Lichess, niemand außer %1$s wird sie jemals haben. - Um sie zu bekommen, forderte hiimgosu sich selbst heraus 100%1$s der %2$s-Spiele zu berserken und zu gewinnen. + Um sie zu bekommen, forderte hiimgosu sich selbst heraus 100%% der %s-Spiele zu berserken und zu gewinnen. stündlichen Bullet-Arena ZugAddict streamte und hatte in den letzten 2 Stunden versucht, die künstliche Intelligenz auf Stufe 8 in einem 1+0 Spiel zu besiegen, ohne Erfolg. Thibault versprach ihm, dass er eine einzigartige Trophäe bekommen würde, wenn er es erfolgreich im Stream schaffen würde. Eine Stunde später zerschmetterte er Stockfish, und das Versprechen wurde eingehalten. Lichess Wertungen diff --git a/translation/dest/faq/eu-ES.xml b/translation/dest/faq/eu-ES.xml index c4a8fc98f7..1116d08ecb 100644 --- a/translation/dest/faq/eu-ES.xml +++ b/translation/dest/faq/eu-ES.xml @@ -1,7 +1,33 @@ Maiz egiten diren galderak + Zergatik da Lichess Lichessen izena? + Lichess inglesezko live/light/libre eta chessen arteko konbinazioa da. Xakea zuzenean/arina/librea. %1$s ahoskatzen da. + li-txes + Entzun espezialista batek nola ahoskatzen duen. + Zuzenean, partidak denbora errealean 24 orduz, astean 7 egunez jokatu eta ikusten direlako; arina eta librea, Lichess kode-irekikoa delako eta ez duelako programa jabedunik erabiltzen, beste webgune batzuek bezala. + Antzera, Lichessen iturburuko kodeak, %1$s, li[chess in sca]la esan nahi du, %2$s izeneko programazio lengoaian idatzita dagoelako. + Nola lagundu dezaket Lichess? + Lichessek dohaintzen bidez eta bolondres taldearen lanarekin funtzionatzen du. + %1$s buruzko informazio gehiago (%2$s barne). Lichessi laguntza eman nahi badiozu zure denbora edo laguntza emanez, hainbat %3$s. + Babesletzari buruzko + gure gastuak + aukera dituzu + Lichessen oinarritutako webgunerik badago? + Bai. Lichess inspirazio iturri erabili dituen eta bere %1$s, %2$s edo %3$s darabilten hainbat webgune ditu. Joko Garbia + Zergatik nago puntuazioa manipulatzeagatik edo ordenagailuen laguntza erabiltzeagatik markatuta? + Lichessek proba eta salaketa guztiak errebisatzeko eta arazoak aurkitzeko modu sendoa du. Prozesuan hainbat moderatzaileren lana hartzen da kontuan eta denbora asko iraun dezake. Markatuta izateaz gain, ez dugu kasuei buruzko beste xehetasunik emango. Zergatik? Horrek etorkizuneko salaketetan eragina izan dezakeelako jendeak zer egin jakingo lukeelako. Eztabaida horretako denbora eta ahaleginak beste gauza batzuetan inbertitzea nahiago dugu. Azken erabakien gaineko kexak posta elektronikoz %1$s helbidera bidali daitezke, baina normalean erabakiak ez ditugu atzera botatzen. + Noiz jaso dezaket tranpa egin didaten jokalarien aurkako partidetako puntuazioa? + Jokalari bat markatu eta minutu bat pasatu ostean, bere azken 3 egunetako puntuatutako azken 40 partidak hartzen dira. Partida horietako aurkariren bat zu bazara, puntuazioa galdu bazenuen (porrot edo berdinketagatik), eta zure puntuazioa behin-behinekoa ez bazen, zure puntuazioa bueltan lortuko duzu. Puntuazioaren itzulera zure puntuazio altuenarekin eta partidaren osteko zure eboluzioarekin mugatuta egongo da. + (adibidez, zure puntuazioa partida horien ostean asko igo bada, agian ez duzu puntuazio osoa berreskuratuko). Itzulera ez da inoiz 150 puntutik pasatuko. + Zer egiten da partidak amore eman gabe uzten dituzten jokalariekin? + Zure aurkariek sarri partidak bertan behera utzi edo joan egiten badira, \"jokatzeko debekua\" jasoko dute eta horrekin ezingo dute denbora baterako partidarik jokatu. Hau ez da beren profilean publikoki agertuko. Jarrera honek aurrera jarraitzen badu, jokatzeko debekuaren iraupena luzatu egingo da, eta horrelako jarrera iraunkorrak kontua ixtea ekar lezake. + Nola bihur naiteke moderatzaile? + Ezin da moderatzaile izateko eskaerarik egin. Norbait moderatzaile izan daitekeela uste badugu zuzenean jarriko gara berarekin kontaktuan. + Zein dira posta bidezko partidak eta xake arruntaren arteko desberdintasunak? + Lichessen posta bidezko xakearen arauen desberdintasun handiena, hasiera liburua erabili daitekeela da. Analisi-motoreak erabiltzea debekatuta dago eta laguntza erabiltzeagatik markatuko ditugu hori egiten duten jokalariak. Nahiz eta ICCFk analisi-motoreak erabiltzea uztean duen, Lichessek ez. + Jokoa Nola erabakizen da zer diren Bullet, Blitz edo beste erritmo batzuk? Lichesseko joko erritmoak partiden ustezko iraupenaren arabera ezartzen dira = %1$s Adibidez, 5+3 partida baten ustezko iraupena hauxe da: 5 * 60 + 40 * 3 = 420 segundo. @@ -11,14 +37,40 @@ Zein aldaeratara jokatu dezaket Lichessen? Lichessen ohiko xakean eta %1$s jokatu dezakezu. xakearen 8 aldaeratan + Zer da Batazbesteko Peoi Ehunekoen Galera (BPEG, ACPL ingelesez)? + Peoiaren ehunekoa xakean abantaila adierazteko erabiltzen den neurria da. Peoiaren ehunekoa peoi baten ehungarren zati baten balioa da. Beraz 100 peoi ehuneko = peoi 1. Balio honek ez du jokoan inongo eraginik, baina jokalarientzat lagungarri izan daiteke eta behar-beharrezkoa da ordenagailuentzat, posizioak baloratzeko erabiltzen baita. + +Ordenagailuaren lehenengo aukera den jokaldiak ez du peoi ehunekorik galduko, baina jokaldi txarragoek posizioa okertzera eramango dute, guzti hori neurtzen da peoi ehunekotan. + +Jokoaren kalitatea neurtzeko erabili daiteke balio hau. Jokaldi bakoitzean zenbat eta peoi ehuneko gutxiago galdu, jokoa hobea da. + +Lichessen ordenagailu bidezko analisia Stockfishek egiten du. + Denboragatik galtzea, berdinketa eta behar beste material ez edukitzea + Jokalariren bati denbora agortzen bazaio, normalean partida galdu egingo du. Baina partida berdinketarekin amaituko da posizio horretatik abiatuta aurkariak ezin badio jokalariaren erregeari xake-mate eman edozein delarik erabilitako jokaldi segida (%1$s). + +Kasu arraroetan hau erabakitzeko zaila izan daiteke (derrigortutako jokaldiak, gotorlekuak). Defektuz denbora agortu ez zaion jokalariaren alde egiten dugu. + +Kontuan hartu xake matea posible izan daitekeela zaldun edo alfil batekin beti ere aurkariak piezaren bat baldin badu. FIDEren eskuliburua, 6.9 artikulua + Zergatik harrapatu dezake peoi batek oraintxe pasatu berri den peoi bat? (igarotzean harrapatzea) + Hau legezko jokaldia da eta \"igarotzean harrapatzea\" du izena. %1$s Wikipediako artikulua. + +%2$s 3.7 (d) artikuluan azalduta dator: + +\"Jokaldi bakarrean bi lauki aurreratu dituen peoi edo oinezko baten ondoko zutabean dagoen aurkariaren peoi edo oinezko batek, lehenengo peoi edo oinezkoa harrapatu dezake lauki bat mugitu izan balu gisa\". + +Ikusi jokaldi honen inguruko %3$s eta praktikatu bertan. + Hemen duzu azalpenaren arau ofizialak (pdf) + Lichesseko ariketak Posizioa hiru aldiz errepikatzea Posizio bat hiru aldiz gertatzen bada, jokalariek berdinketa eskatu dezakete %1$s. Lichessek FIDEren arauak erabiltzen ditu, %2$s 9.2 (d) artikuluan azaldu bezala. hiru errepikapenengatik esku liburuaren (pdf) Ez ditugu jokaldiak errepikatu. Zergatik amaitu da partida berdinketarekin? Posizioa hiru aldiz errepikatzeak, errepikatu dena %1$s dela esan nahi du, ez jokaldiak. Errepikapenak, gainera, ez dute zertan jarraian gertatu behar. + posizioak + Posizioa hiru aldiz errepikatu genuen? Zergatik ez da berdinketarekin amaitu? Errepikapenagatiko berdinketa jokalarietako batek eskatu behar du. Horretarako agertuko den botoia sakatu behar duzu edo errepikapena egiten duen azken jokaldia egin aurretik berdinketa eskaini behar duzu. Lichess %1$s dezakezu berdinketak zure ordez eskatzeko. Gainera, posizioa bost aldiz errepikatzen bada, partida berdinketarekin amaituko da edozein kasutan. konfiguratu Kontuak @@ -42,16 +94,48 @@ Normalean erabiltzaile izenak ez dira izan behar iraingarriak, beste norbaiten izenak edo iragarkiak. %1$s irakurri dezakezu gehiago honi buruz. Gidalerroetan Garaikur bereziak + Garaikur hori Lichessen historian bakarra da eta %1$s ez den beste inork ez du izango. + Lortzeko, hiimgosu erabiltzeaileak berserk erabiliz erronka egin zion eta %2$s partidatik 100%1$s irabazi. ordueroko Bullet txapelketa + ZugAddict 2 orduz ari zen zuzeneko bat egiten eta 8. mailako A.A. garaitu nahian 1+0 erako partidan, inolako arrakastarik gabe. Thibaultek hori lortuko balu eta zuzenean emate bazuen garaikurra emango ziola. Ordubete beranduago Stockfish garaitu zuen eta agindutako bete egin zuten. Lichess puntuazioak Zein puntuazio sistema erabiltzen du Lichessek? + Puntuazioak Mark Glickmanek garatutako Glicko-2 puntuazio sistema erabiliz kalkulatzen dira. Hainbat erakundek erabilitako puntuazio sistema arrunta da (FIDEk aldiz Elo izeneko sistema erabiltzen du). + +Glicko sistemak \"konfiantza tarteak\" erabiltzen ditu zure puntuazioa kalkulatu edo esaterakoan. Hasiberritan zure puntuazioa 1500 ± 700-n hasten da. 1500ek zure puntuazioa erakusten du eta 700k konfiantza tartea. + +Oinarrian, sistemak %90eko ziurtasuna du zure puntuazioa 800 eta 2000 puntuen artean dagoela. Hau ez da oso zehatza. Honegatik jokalarien puntuazioa asko aldatuko da hasieran. Baina zenbat eta partida gehiago jokatu, konfiantza tartea txikitu egingo da eta irabazi edo galdutako puntu kopurua txikitu egingo da. + +Kontutan hartu beharreko beste gauza bat denbora pasatu ahala konfiantza tartea handitu egingo dela da. Honekin denbora horretan zehar zure indarraren aldaketak azkarrago egokituko dira irabazitako edo galdutako puntuetara. Zergatik dago galdera ikur bat (?) puntuazio batzuen ondoan? Galdera ikurrak puntuazioa behin-behinekoa dela esan nahi du. Honegatik izan daiteke: Jokalariak ez ditu puntuaziorako balio duten behar adina partida jokatu %1$s aurka. puntuazio beretsuko aurkarien Jokalariak ez ditu oraintsu puntuaziorako balio duten partida nahikoa joaktu. Jokatutako partida kopuruaren arabera, urtebeteren buruan zure puntuazioa behin-behineko bihurtu daiteke berriro. Zehazki, Glicko-2ren desbideratzea 110 baino handiagoa dela esan nahi du. Desbideratzea sistemak puntuazioan duen konfidantza da. Zenbat eta desbideratze txikiagoa, hainbat eta egonkorragoa da puntuazioa. + Nola funtzionatzen dute sailkapenek? + %1$s lortzeko zera behar duzu: + Puntuazio tauletako lidergoa + gutxienez puntuaziorako balio duten 30 partida jokatzea, + azken astean puntuazio honetarako balio duen partida bat jokatzea gutxienez, + xake estandarrean puntuazioaren desbideraketa %1$s baino txikiagoa izatea eta %2$s baino txikiagoa aldaeretan, + puntuazio honetan 10 onenen artean egotea. + 2. eskakizuna beren kontuak erabiltzen ez dituzten jokalariek puntuazio zerrendak ez betetzeko da. + Zergatik dira puntuazioak FIDE, USCF, ICC edo beste erakundeenak baino altuagoak? + Hobe da puntuazioak zenbaki absoluto gisa ez ulertzea edo beste erakunde batzuenekin alderatzea. Erakunde desberdinek jokalari maila eta puntuazio sistema desberdinak (Elo, Glicko, Glicko-2 edo besteren bat) erabiltzen dituzte. Arrazoi hauek puntuazioaren zenbaki absolutoetan eragin zuzena dute. + +Hobe da puntuazioak zenbaki \"erlatibo\" gisa ulertzea: jokalari multzo bat hartuta, euren arteko diferentzia erlatiboek lagunduko dizute nork irabazi/berdindu/galduko duen estimatzen. \"Nik Xeko puntuazioa dut\" esateak ez du ezer esan nahi, ez baduzu hori beste jokalari batzuekin alderatzen. + Nola ezkutatu ditzaket puntuazioak jokatzen ari naizen artean? + Aktibatu Zen-modua %1$s, edo partidan zehar %2$s sakatuz. + ezarpenetan + Partida atzerapenagatik edo konexioa galtzeagatik galdu dut. Berreskuratu ditzaket galdutako puntuak? + Zoritxarrez ezin ditugu arrazoi horiengatik galdutako puntuak itzuli, berdin delarik errua zurea ala gurea izan. Hala ere normalean ez da gure errua izango. Lichess berrabiarazten dugunean eta horregatik partida galtzen baduzu, partida bertan behera uzten dugu. Nola... Aktibatu edo desaktibatu jakinarazpenak? Ikusi atariaren informazioaren inguruko leihoa + Lichessek jakinarazpenak bidali ditzake, adibidez zure txanda denean edo mezu pribatu bat jasotzean. + +Egin klik zure nabigatzailean lichess.org dioen helbide barraren ondoan dagoen giltzarrapoan. + +Ondoren aukeratu Lichessen jakinarazpenak blokeatu nahi dituzun ala ez. diff --git a/translation/dest/faq/nl-NL.xml b/translation/dest/faq/nl-NL.xml index ade497df37..86d19e39d2 100644 --- a/translation/dest/faq/nl-NL.xml +++ b/translation/dest/faq/nl-NL.xml @@ -15,7 +15,7 @@ andere manieren om te helpen Zijn er websites gebaseerd op Lichess? Ja. Lichess heeft inderdaad andere open-source sites geïnspireerd die onze %1$s, %2$s of %3$s gebruiken. - Sportief spel + Eerlijk spel Lichess heeft sterke detectiemethoden en een zeer grondig proces voor het beoordelen van al het bewijsmateriaal en het nemen van een besluit. Het proces omvat vaak veel moderators en kan lang duren. Behalve het merkteken zelf zullen we niet in details treden over het bewijs of de besluitvormingsprocedure voor individuele gevallen. Dit zou het gemakkelijker maken om detectie in de toekomst te voorkomen en een uitnodiging zijn voor onproductieve debatten. Die tijd en inspanning worden beter besteed aan andere belangrijke gevallen. Gebruikers kunnen in beroep gaan door %1$ste e-mailen, maar besluiten worden zelden ongedaan gemaakt. Wanneer kom ik in aanmerking voor de automatische ratingcompensatie van valsspelers? Een minuut nadat een speler gemarkeerd is, worden diens laatste veertig met rating gespeelde en in de laatste drie dagen gewonnen partijen in aanmerking genomen. Als je zijn tegenstander was in een van deze partijen en je rating was niet voorlopig, krijg je een ratingcompensatie. Deze compensatie wordt beperkt op basis van je hoogste rating en je ratingvoortgang na de desbetreffende partij. @@ -26,6 +26,7 @@ Solliciteren om moderator te worden is niet mogelijk. Als we iemand zien van wie we denken dat hij geschikt zou zijn als moderator, zullen we direct contact met hem opnemen. Is correspondentieschaak anders dan standaard schaak? Op Lichess is het belangrijkste verschil in de regels voor correspondentieschaak dat een openingsboek is toegestaan. Het gebruik van engines is nog steeds verboden en leidt tot een overeenkomstige markering. Hoewel ICCF gebruik van engines in correspondentieschaak toestaat, doet Lichess dat niet. + Spelregels Hoe worden bullet, blitz en andere speeltempo\'s bepaald? Lichess speeltempo\'s zijn gebaseerd op de geschatte partijduur = %1$s Bijvoorbeeld, de geschatte duur van een 5+3 partij is 5 * 60 + 40 * 3 = 420 seconden. @@ -35,6 +36,15 @@ Welke varianten kan ik spelen op Lichess? Lichess ondersteunt standaard schaak en %1$s. Acht schaakvarianten + Wat is het gemiddelde centipion verlies (ACPL)? + De centipion is de maateenheid die in schaken wordt gebruikt als een voordeel. Eén centipion is gelijk aan 1/100 van een pion. Dus 100 centipionnen = 1 pion. Deze waarden spelen formeel geen rol in het spel, maar zijn nuttig voor spelers en essentieel voor computerschaak om posities te beoordelen. + +De beste computerzet verliest nul centipionnen, maar mindere zetten zullen resulteren in een verslechtering van de stelling, gemeten in centipionnen. + +Deze waarde kan worden gebruikt als een indicator van de kwaliteit van het spel. Hoe minder centipionnen je per zet verliest, des te sterker je spel. + +De computeranalyse op Lichess wordt aangedreven door Stockfish. + Verliezen op tijd, remise en onvoldoende materiaal Wanneer één van beide spelers in tijdnood komt, zal die speler meestal de partij verliezen. De partij wordt echter remise als de tegenstander de koning op geen enkele manier met een serie geldige zetten mat kan zetten (%1$s). In zeldzame gevallen kan het moeilijk zijn om dit automatisch te beslissen (geforceerde lijnen, vestingen). Standaard scharen we ons altijd aan de kant van de speler die niet in tijdnood is gekomen. @@ -66,6 +76,7 @@ Waarom staat er een vraagteken naast een beoordeling? Het vraagteken betekent dat de beoordeling voorlopig is. Redenen zijn: tegenstanders van gelijke sterkte + rating ranglijst Hoe kan ik... Pop-upmeldingen in- of uitschakelen? Toon site informatie pop-up diff --git a/translation/dest/faq/ru-RU.xml b/translation/dest/faq/ru-RU.xml index 0b23a98d1f..eb86190a30 100644 --- a/translation/dest/faq/ru-RU.xml +++ b/translation/dest/faq/ru-RU.xml @@ -14,7 +14,7 @@ отчёт о тратах другие способы помочь Есть ли другие сайты, основанные на Lichess? - Да, это так. Многие сайты вдохновились Lichess и используют наш %1$s, %2$s и %3s. + Да, это так. Многие сайты вдохновились Lichess и используют наш %1$s, %2$s и %3$s. Честная игра Почему меня подозревают в жульничестве? Как то: использование помощи других игроков, договорные игры или подсказки компьютерных программ? Lichess использует очень надёжные способы и тщательно проработанный процесс для изучения доказательств и принятия решений. В этот процесс вовлечено множество модераторов и он может занять довольно продолжительное время. В результате выносится только решение о том, был ли игрок нечестен, но никакие подробности не разглашаются, иначе это могло бы облегчить нечестным игрокам возможность обходить способы их обнаружения. Кроме того, чем больше деталей, тем больше пустопорожних споров, а это время лучше потратить на что-то более стоящее. Игроки могут обжаловать решение по электронной почте %1$s, но надо иметь в виду, что ответ на него не гарантируется, и решения отменяются крайне редко. diff --git a/translation/dest/patron/sl-SI.xml b/translation/dest/patron/sl-SI.xml index 3ea04e700d..bcfba1dbe6 100644 --- a/translation/dest/patron/sl-SI.xml +++ b/translation/dest/patron/sl-SI.xml @@ -1,2 +1,76 @@ - + + Doniraj + Lichess pokrovitelj + Prost račun + Postani Lichess pokrovitelj + %s je postal Lichess pokrovitelj + Novi pokrovitelji + Zastonj šah za vse, za vedno! + Brez oglasov, brez naročnin; toda odprtokoden in strasten. + Hvala za vašo donacijo! + Imate vseživljenski pokroviteljski račun. To je super! + Imate pokroviteljski račun od %s. + Če ne obnovite, boste nato prešli na brezplačno. + Smo neprofitno združenje, saj verjamemo, da bi morali vsi imeti dostop do brezplačne šahovske platforme svetovnega razreda. + Zanašamo se na podporo takšnih, kot ste vi, da to omogočimo. Če uživate v uporabi Lichess, vas prosimo, da nas podprete z donacijami in postanete pokrovitelj! + Doživljenjsko + Plačajte %s enkrat Bodite Lichess pokrovitelj za vedno! + Doživljenski Lichess pokrovitelj + Daj dodatno donacijo? + Mesečno + Ponavljajoči se računi, vsak mesec obnavljate svojo ikono Pokrovitelja. + Enkratno + Enkratna donacija, ki vam podeli pokroviteljsko ikono za en mesec. + Drugo + Prosimo, vnesite znesek v USD + Kreditna kartica + Paypal + Smo majhna ekipa, tako, da vaša podpora naredi veliko razliko! + Slavni pokrovitelji, ki so naredili Lichess možen + Kam gre denar? + Najprej za močne strežnike. +Nato za polno zaposlenega razvijalca: %s, ustanovitelja Lichessa. + Oglejte si podrobno razčlenitev stroškov + Ali je Lichess uradno neprofiten? + Da, tukaj je dejanje ustvarjanja (v francoščini) + Ali lahko spremenim/prekličem svojo mesečno podporo? + Da, kadarkoli, na tej strani. +Ali pa %s. + kontaktirajte Lichess podporo + Druge metode donacije? + Sprejemamo tudi bančne transferje + In tukaj je naš bitcoin naslov: %s + Ali je kaj značilnosti rezerviranih za pokrovitelje? + Ne, ker je Lichess popolnoma zastonj, za vedno in za vsakogar. To je obljuba. Kakorkoli, pokrovitelji dobijo pravice hvalisanja s kul novo ikono profila. + Poglejte podrobno primerjavo lastnosti + + Lichess Pokrovitelj za en mesec + Lichess pokrovitelj za dva meseca + Lichess pokrovitelj za tri/štiri mesece + Lichess pokrovitelj za %s mesecev + + Tvoja potpora lichess.org z/s %s na mesec. + Najlepša hvala za tvojo pomoč. Zažigaš! + Trenutni status + Naslednje plačilo + Dne %2$s vam bomo zaračunali %1$s. + Zdaj naredite dodatno donacijo + Posodobitev + Spremeni mesečni znesek (%s) + prekliči svojo podporo + %1$s ali %2$s + Odločite se, koliko vam je Lichess vreden: + Umaknite kreditno kartico in ustavite plačila: + Ni več podpore Lichess + Zgodovina plačil + Plačano + Ogled drugih Lichess pokroviteljev + Datum + Znesek + Vaša transakcija je zaključena in poslali smo vam potrdilo o prejemu donacije. + Zdaj imate stalen račun pokrovitelja. + Zdaj ste doživljenski Lichess pokrovitelj! + Zdaj ste Lichess pokrovitelj za en mesec! + V enem mesecu vam NE bomo spet zaračunali in vaš Lichess račun se bo vrnil na običajni račun. + diff --git a/translation/dest/site/da-DK.xml b/translation/dest/site/da-DK.xml index e547fe50fa..465820564d 100644 --- a/translation/dest/site/da-DK.xml +++ b/translation/dest/site/da-DK.xml @@ -858,7 +858,7 @@ For at få support, %1$s prøv kontakt-siden Dette emne er arkiveret og kan ikke længere besvares. - Meld dig til %$1s, for at lave opslag i dette forum + Meld dig til %1$s, for at lave opslag i dette forum %1$s hold Du kan endnu ikke lave oplag i foraene. Spil nogle partier! Abonnér diff --git a/translation/dest/site/es-ES.xml b/translation/dest/site/es-ES.xml index aa4d8e1491..2dac71f9d9 100644 --- a/translation/dest/site/es-ES.xml +++ b/translation/dest/site/es-ES.xml @@ -858,7 +858,7 @@ Para solicitar soporte, %1$s prueba la página de contacto Este tema ha sido archivado y ya no puede ser respondido. - Únete a %$1s, para publicar en este foro + Únete a %1$s, para publicar en este foro %1$s equipo Aún no puedes publicar en los foros. ¡Juega algunas partidas! Suscribirse diff --git a/translation/dest/site/hr-HR.xml b/translation/dest/site/hr-HR.xml index 2ae5836a85..52c8fb9687 100644 --- a/translation/dest/site/hr-HR.xml +++ b/translation/dest/site/hr-HR.xml @@ -897,7 +897,7 @@ računalnu analizu, chat partije i URL za dijeljenje. Za zatraživanje podrške, %1$s pokušaj stranicu za kontakt Ova tema je arhivirana i na nju više nije moguće odgovoriti. - Pridruži se %$1s za objavljivanje na ovom forumu + Pridruži se %1$s za objavljivanje na ovom forumu %1$s tim Još ne možeš objavljivati na forumima. Odigraj nekoliko partija! Pretplati se diff --git a/translation/dest/site/nl-NL.xml b/translation/dest/site/nl-NL.xml index 40ec849c6a..973652032b 100644 --- a/translation/dest/site/nl-NL.xml +++ b/translation/dest/site/nl-NL.xml @@ -322,7 +322,7 @@ Je rating %1$s (%2$s) is te laag Met rating ≥ %1$s in %2$s Met rating ≤ %1$s in %2$s - Je moet in het team %s zitten + Je moet in team %s zitten Je zit niet in het team %s Terug naar partij Gratis online schaken. Schaak nu met een heldere vormgeving. Geen registratie nodig, geen advertenties, geen plug-ins vereist. Schaak tegen de computer, vrienden of willekeurige tegenstanders. @@ -858,7 +858,7 @@ Om ondersteuning aan te vragen, %1$s probeer de contactpagina Dit onderwerp is gearchiveerd; er kan niet meer op worden gereageerd. - Neem deel aan %$1s, om in dit forum te posten + Neem deel aan %1$s, om in dit forum te posten team %1$s Je kunt nog geen post in de forums plaatsen. Speel eerst een paar partijen! Abonneren diff --git a/translation/dest/site/nn-NO.xml b/translation/dest/site/nn-NO.xml index 76d95b7fd3..98316391df 100644 --- a/translation/dest/site/nn-NO.xml +++ b/translation/dest/site/nn-NO.xml @@ -862,7 +862,7 @@ i %3$s For å få hjelp, %1$s prøv kontaktsida Dette emnet er flytta til arkivet og kan ikkje lengre svarast på. - Meld deg på %$1s, for å poste meldingar i dette forumet + Meld deg på %1$s, for å poste meldingar i dette forumet %1$s lag Du kan så langt ikkje skrive oppslag i foraane. Spel nokre parti fyrst! Abonner diff --git a/translation/dest/site/pl-PL.xml b/translation/dest/site/pl-PL.xml index c2c4022a3b..d96ea5dae4 100644 --- a/translation/dest/site/pl-PL.xml +++ b/translation/dest/site/pl-PL.xml @@ -934,7 +934,7 @@ Aby poprosić o pomoc, %1$s użyj strony kontaktowej Ten temat został zarchiwizowany i nie można już na niego odpowiedzieć. - Dołącz do %$1s, aby publikować na tym forum + Dołącz do %1$s, aby publikować na tym forum Klub %1$s Nie możesz jeszcze publikować na forach. Rozegraj najpierw kilka partii! Subskrybuj diff --git a/translation/dest/site/pt-BR.xml b/translation/dest/site/pt-BR.xml index bbd72f50a3..40ea4f4c58 100644 --- a/translation/dest/site/pt-BR.xml +++ b/translation/dest/site/pt-BR.xml @@ -859,7 +859,7 @@ Aparece quando o usuário tenta enviar o formulário sem resolver preciamente o Para solicitar suporte, %1$s tente a página de contacto Este tópico foi arquivado e já não pode ser respondido. - Junte-se a %$1s, para publicar neste fórum + Junte-se a %1$s, para publicar neste fórum equipa %1$s Você ainda não pode publicar nos fóruns. Jogue alguns jogos! Subscrever diff --git a/translation/dest/site/pt-PT.xml b/translation/dest/site/pt-PT.xml index 6ca3dc1bd4..caf5f8ffe6 100644 --- a/translation/dest/site/pt-PT.xml +++ b/translation/dest/site/pt-PT.xml @@ -858,7 +858,7 @@ Para solicitar suporte, %1$s tente a página de contacto Este tópico foi arquivado e já não pode ser respondido. - Junte-se a %$1s, para publicar neste fórum + Junte-se a %1$s, para publicar neste fórum equipa %1$s Você ainda não pode publicar nos fóruns. Jogue alguns jogos! Subscrever diff --git a/translation/dest/site/ru-RU.xml b/translation/dest/site/ru-RU.xml index e5b7f1c810..b54b464bfb 100644 --- a/translation/dest/site/ru-RU.xml +++ b/translation/dest/site/ru-RU.xml @@ -934,7 +934,7 @@ Чтобы получить поддержку, %1$s посмотрите контактную информацию Эта тема была помещена в архив и комментарии в неё закрыты. - Вступите в %$1s, чтобы писать в этом форуме + Вступите в %1$s, чтобы писать в этом форуме клуб %1$s Вы пока не можете писать в эту тему. Сыграйте несколько игр! Подписаться diff --git a/translation/dest/site/sr-SP.xml b/translation/dest/site/sr-SP.xml index b8ee63ffa5..9b0cdbf988 100644 --- a/translation/dest/site/sr-SP.xml +++ b/translation/dest/site/sr-SP.xml @@ -897,7 +897,7 @@ Да бисте затражили подршку, %1$s пробајте страницу за контакт Ова тема је архивирана и не може се више одговорити на њу. - Придружите се %$1s, да бисте могли писати поруке у овоме форуму + Придружите се %1$s, да бисте могли писати поруке у овоме форуму %1$s тим Још увек не можете писати поруке на овај форум. Играјте још коју партију! Претплати се diff --git a/translation/dest/site/zh-CN.xml b/translation/dest/site/zh-CN.xml index 05185277b1..a171c17951 100644 --- a/translation/dest/site/zh-CN.xml +++ b/translation/dest/site/zh-CN.xml @@ -820,7 +820,7 @@ 要请求支持,%1$s 请尝试使用联系页面 此主题已被存档且不能再回复。 - 加入%$1s,以在此论坛发表意见 + 加入%1$s,以在此论坛发表意见 %1$s 团队 您还不能在论坛发表意见。再下几局棋吧! 订阅 diff --git a/translation/dest/team/nl-NL.xml b/translation/dest/team/nl-NL.xml index be3c730397..d64f46a0e3 100644 --- a/translation/dest/team/nl-NL.xml +++ b/translation/dest/team/nl-NL.xml @@ -15,6 +15,10 @@ Iedereen kan lid worden Een bevestiging is nodig om lid te worden Deelnamebeleid + + Teamleider + Teamleiders + Beste spelers Recente teamleden Verwijder iemand uit het team @@ -31,4 +35,9 @@ Een Arenatoernooi waaraan alleen leden van je team mee kunnen doen Bericht aan alle leden Stuur een privébericht aan alle leden van het team + Stuur een privébericht naar alle leden van het team. +Je kunt dit gebruiken om spelers op te roepen om deel te nemen aan een toernooi of een teamgevecht. +Spelers die je berichten niet willen ontvangen kunnen het team verlaten. + Teams die ik leid + Gebruikers die dit team kunnen beheren diff --git a/translation/dest/tourname/nl-NL.xml b/translation/dest/tourname/nl-NL.xml index 383f7de0d4..960e12ae25 100644 --- a/translation/dest/tourname/nl-NL.xml +++ b/translation/dest/tourname/nl-NL.xml @@ -42,7 +42,7 @@ %s Schild %s Rapid Arena %s Rapid - %s Team Gevecht + %s Massakamp Elite %s Arena Elite %s %s Arena From 799265350f85c796d314b4b7c6b6ac19b630e390 Mon Sep 17 00:00:00 2001 From: Niklas Fiekas Date: Sun, 3 May 2020 15:49:57 +0200 Subject: [PATCH 05/16] fix nn-NO links in translation lint --- bin/trans-lint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/trans-lint.py b/bin/trans-lint.py index 3493df10e2..dbda9d13be 100755 --- a/bin/trans-lint.py +++ b/bin/trans-lint.py @@ -26,7 +26,7 @@ class Report: def short_lang(lang): - if lang in ["ne-NP", "la-LA"]: + if lang in ["ne-NP", "la-LA", "nn-NO"]: return lang.replace("-", "").lower() else: return lang.split("-")[0] From 007c2da245a32eb2c5bcbe148567f8fb23a4b235 Mon Sep 17 00:00:00 2001 From: Niklas Fiekas Date: Sun, 3 May 2020 16:01:14 +0200 Subject: [PATCH 06/16] no western punctuation lint for jbo-EN --- bin/trans-lint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/trans-lint.py b/bin/trans-lint.py index dbda9d13be..2b56803826 100755 --- a/bin/trans-lint.py +++ b/bin/trans-lint.py @@ -35,7 +35,7 @@ def short_lang(lang): def western_punctuation(lang): return lang not in [ "zh-TW", "zh-CN", "hi-IN", "ja-JP", "bn-BD", "ar-SA", "th-TH", "ne-NP", - "ko-KR", "ur-PK", "hy-AM", "ml-IN", "ka-GE", "he-IL", + "ko-KR", "ur-PK", "hy-AM", "ml-IN", "ka-GE", "he-IL", "jbo-EN", ] From 2bc968f2ec46abc2c85b94b4619cb1d49d3df585 Mon Sep 17 00:00:00 2001 From: Thomas Daniels Date: Sun, 3 May 2020 17:03:16 +0200 Subject: [PATCH 07/16] Remove "reportable && exceptionalDif" condition I didn't know that this happened -- but, this may cause false positives or very borderline cases, and otherwise it's confusing that tweaking `reportable` also affects this. Either way it gives too much importance to `exceptionalDif`, imo, and with the improved `markable` it also should no longer be needed, and just having these as a report is fine. --- modules/evaluation/src/main/PlayerAggregateAssessment.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/evaluation/src/main/PlayerAggregateAssessment.scala b/modules/evaluation/src/main/PlayerAggregateAssessment.scala index 52f7c96001..032892a73e 100644 --- a/modules/evaluation/src/main/PlayerAggregateAssessment.scala +++ b/modules/evaluation/src/main/PlayerAggregateAssessment.scala @@ -74,7 +74,6 @@ case class PlayerAggregateAssessment( if (actionable) { if (markable && bannable) EngineAndBan else if (markable) Engine - else if (reportable && exceptionalDif && weightedCheatingSum >= 1) Engine else if (reportable) reportVariousReasons else Nothing } else { From ce660c7e1c145193c4140b772d0a261dd4404f09 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 3 May 2020 09:16:21 -0600 Subject: [PATCH 08/16] let lichess4545 stream games of 900 players --- app/controllers/Api.scala | 13 ++++++++----- app/controllers/LilaController.scala | 8 ++++++++ modules/game/src/main/GamesByUsersStream.scala | 6 ++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/controllers/Api.scala b/app/controllers/Api.scala index 14fd360660..fd70ca6119 100644 --- a/app/controllers/Api.scala +++ b/app/controllers/Api.scala @@ -271,11 +271,14 @@ final class Api( } } - def gamesByUsersStream = Action.async(parse.tolerantText) { implicit req => - val userIds = req.body.split(',').view.take(300).map(lila.user.User.normalize).toSet - jsonStream { - env.game.gamesByUsersStream(userIds) - }.fuccess + def gamesByUsersStream = AnonOrScopedBody(parse.tolerantText)()( + anon = gamesByUsers(300), + scoped = req => u => gamesByUsers(if (u.id == "lichess4545") 900 else 500)(req) + ) + + private def gamesByUsers(max: Int)(req: Request[String]) = { + val userIds = req.body.split(',').view.take(max).map(lila.user.User.normalize).toSet + jsonStream(env.game.gamesByUsersStream(userIds))(req).fuccess } private val EventStreamConcurrencyLimitPerUser = new lila.memo.ConcurrencyLimit[String]( diff --git a/app/controllers/LilaController.scala b/app/controllers/LilaController.scala index 84bd681c38..23f66bae6e 100644 --- a/app/controllers/LilaController.scala +++ b/app/controllers/LilaController.scala @@ -108,6 +108,14 @@ abstract private[controllers] class LilaController(val env: Env) else anon(req) } + protected def AnonOrScopedBody[A](parser: BodyParser[A])(selectors: OAuthScope.Selector*)( + anon: Request[A] => Fu[Result], + scoped: Request[A] => UserModel => Fu[Result] + ): Action[A] = Action.async(parser) { req => + if (HTTPRequest isOAuth req) ScopedBody(parser)(selectors)(scoped)(req) + else anon(req) + } + protected def AuthOrScoped(selectors: OAuthScope.Selector*)( auth: Context => UserModel => Fu[Result], scoped: RequestHeader => UserModel => Fu[Result] diff --git a/modules/game/src/main/GamesByUsersStream.scala b/modules/game/src/main/GamesByUsersStream.scala index 8582d5fbdc..0fe602a38a 100644 --- a/modules/game/src/main/GamesByUsersStream.scala +++ b/modules/game/src/main/GamesByUsersStream.scala @@ -15,7 +15,7 @@ final class GamesByUsersStream(gameRepo: lila.game.GameRepo)(implicit ec: scala. private val chans = List("startGame", "finishGame") private val blueprint = Source - .queue[Game](32, akka.stream.OverflowStrategy.dropHead) + .queue[Game](64, akka.stream.OverflowStrategy.dropHead) .mapAsync(1)(gameRepo.withInitialFen) .map(gameWithInitialFenWriter.writes) @@ -56,15 +56,13 @@ final class GamesByUsersStream(gameRepo: lila.game.GameRepo)(implicit ec: scala. "rating" -> p.rating ) .add("provisional" -> p.provisional) - .add("name" -> p.name) }) ) .add("initialFen" -> initialFen) .add("clock" -> g.clock.map { clock => Json.obj( "initial" -> clock.limitSeconds, - "increment" -> clock.incrementSeconds, - "totalTime" -> clock.estimateTotalSeconds + "increment" -> clock.incrementSeconds ) }) .add("daysPerTurn" -> g.daysPerTurn) From 8e09200d2595b108d218da63d477e155d8b2bb9f Mon Sep 17 00:00:00 2001 From: Niklas Fiekas Date: Sun, 3 May 2020 17:31:00 +0200 Subject: [PATCH 09/16] translations green again --- translation/dest/arena/lg-UG.xml | 7 +--- translation/dest/class/sk-SK.xml | 3 ++ translation/dest/coordinates/la-LA.xml | 9 ++++- translation/dest/emails/he-IL.xml | 2 +- translation/dest/faq/af-ZA.xml | 2 +- translation/dest/faq/da-DK.xml | 2 +- translation/dest/faq/es-ES.xml | 2 +- translation/dest/faq/eu-ES.xml | 2 +- translation/dest/faq/fi-FI.xml | 3 +- translation/dest/faq/fr-FR.xml | 4 +-- translation/dest/faq/it-IT.xml | 2 +- translation/dest/faq/ja-JP.xml | 2 +- translation/dest/faq/nb-NO.xml | 2 +- translation/dest/faq/nl-NL.xml | 1 + translation/dest/faq/nn-NO.xml | 4 +-- translation/dest/faq/pl-PL.xml | 2 +- translation/dest/faq/ru-RU.xml | 2 +- translation/dest/faq/sv-SE.xml | 4 +-- translation/dest/patron/sl-SI.xml | 2 +- translation/dest/preferences/ar-SA.xml | 44 ++++++++++++++++++++++- translation/dest/search/zu-ZA.xml | 8 ----- translation/dest/settings/gd-GB.xml | 7 +++- translation/dest/site/ms-MY.xml | 5 +-- translation/dest/site/my-MM.xml | 2 +- translation/dest/site/sk-SK.xml | 3 ++ translation/dest/site/sl-SI.xml | 5 +-- translation/dest/site/zu-ZA.xml | 50 -------------------------- translation/dest/tourname/zu-ZA.xml | 2 -- 28 files changed, 86 insertions(+), 97 deletions(-) diff --git a/translation/dest/arena/lg-UG.xml b/translation/dest/arena/lg-UG.xml index 59a67dcd59..3ea04e700d 100644 --- a/translation/dest/arena/lg-UG.xml +++ b/translation/dest/arena/lg-UG.xml @@ -1,7 +1,2 @@ - - %s l\'yelinya ly\'omuzanyi - Tukwaniriza ku lichess.org, %s - Eno ebaluwa ekwata ku engeri gyokozesa %s. - Okututukirira tusaba okozese %s. - + diff --git a/translation/dest/class/sk-SK.xml b/translation/dest/class/sk-SK.xml index 32fdaaea47..02b8d63f4d 100644 --- a/translation/dest/class/sk-SK.xml +++ b/translation/dest/class/sk-SK.xml @@ -57,4 +57,7 @@ Heslo: %3$s Uvoľniť Uvoľniť účet aby si ho študent mohol spravovať sám. Uvoľnený účet nie je možné previesť späť na spravovaný. Študentovi bude umožnené zapnúť detský mód a vynulovať si heslo sám. + Pokrok + Zatiaľ nie sú v triede žiadni žiaci. + Žiadni odstránení študenti. diff --git a/translation/dest/coordinates/la-LA.xml b/translation/dest/coordinates/la-LA.xml index 3ea04e700d..66b22c71ec 100644 --- a/translation/dest/coordinates/la-LA.xml +++ b/translation/dest/coordinates/la-LA.xml @@ -1,2 +1,9 @@ - + + Quadratis + Exercitium quadratis + Cum mediocris commodum alba: %s + Cum mediocris commodum nigra: %s + A quadratum nomen apparet tabulam in recta et quadratum est per click. XXX secunda, in quadrato quot tu agnoscis? + Incipere exercitium + diff --git a/translation/dest/emails/he-IL.xml b/translation/dest/emails/he-IL.xml index bc668d7420..67f3c5116d 100644 --- a/translation/dest/emails/he-IL.xml +++ b/translation/dest/emails/he-IL.xml @@ -13,7 +13,7 @@ השלמת בהצלחה את חשבונך באתר https://lichess.org. עמוד הפרופיל שלך הוא %1$s.אתה יכול לשנותו ב- %2$s אחולי משחק נעים ונצחונות על כל יריביך! - %s, התחבר ל - lichess.org. + %s, התחבר ל - lichess.org (אם הקלדה אינה עובדת, נסה הדבקה לתוך הדפדפן!) זו הודעת שרות בקשר לשימושך ב-%s. לקשר איתנו השתמש ב-%s. diff --git a/translation/dest/faq/af-ZA.xml b/translation/dest/faq/af-ZA.xml index 18ea71aac9..24bfdd86cd 100644 --- a/translation/dest/faq/af-ZA.xml +++ b/translation/dest/faq/af-ZA.xml @@ -4,6 +4,6 @@ Hoekom word Lichess Lichess genoem? Lichess is \'n kombinasie van lewendige/ligte/libre en skaak. Dit word as %1$s uitgespreek. lie-chess - Hoor hoe dit deur \'n spesialis uitgespreek word. + Hoor hoe dit deur \'n spesialis uitgespreek word. Lewendig, want wedstryde word regstreeks gespeel en gekyk 24/7; lig en libre want Lichess is oop-bron en vry van eiendomsregtelike strooi wat ander webwerwe lastig val. diff --git a/translation/dest/faq/da-DK.xml b/translation/dest/faq/da-DK.xml index c20a61d0df..63876a2719 100644 --- a/translation/dest/faq/da-DK.xml +++ b/translation/dest/faq/da-DK.xml @@ -96,7 +96,7 @@ Her er en liste over FIDE-titler: retningslinjer Unikke trofæer Det trofæ er unikt i Lichess\' historie. Ingen andre end %1$s vil nogensinde få det. - For at få det udfordrede hiimgosu sig selv til at berserke og vinde 100%1$s partier af %2$s. + For at få det udfordrede hiimgosu sig selv til at berserke og vinde 100%% partier af %s. en time-Bullet turnering ZugAddict streamede og havde de sidste to timer forgæves forsøgt at slå A.I. niveau 8 i et 1+0 spil. Thibault fortalte ham, at hvis det lykkedes ham at gøre det på stream, ville han få et unikt trofæ. En time senere knuste han Stockfish og løftet blev indfriet. Lichess-ratings diff --git a/translation/dest/faq/es-ES.xml b/translation/dest/faq/es-ES.xml index c70b95d20d..d35d900f05 100644 --- a/translation/dest/faq/es-ES.xml +++ b/translation/dest/faq/es-ES.xml @@ -96,7 +96,7 @@ pautas Trofeos únicos Ese trofeo es único en la historia de Lichess, nadie más que %1$s lo tendrá. - Para obtenerlo, hiimgosu se desafió a sí mismo a berserk y ganó 100%1$s partidas de %2$s. + Para obtenerlo, hiimgosu se desafió a sí mismo a berserk y ganó 100%% partidas de %s. un torneo Buller por hora ZugAddict estaba transmitiendo y durante las dos últimas horas había estado tratando de derrotar a la I.A. nivel 8 en una partida 1+0, sin éxito. Thibault le dijo que si lo hacía con éxito durante la transmisión, obtendría un trofeo único. Una hora después, venció a Stockfish y se cumplió la promesa. Calificaciones de Lichess diff --git a/translation/dest/faq/eu-ES.xml b/translation/dest/faq/eu-ES.xml index 1116d08ecb..806ecb9fab 100644 --- a/translation/dest/faq/eu-ES.xml +++ b/translation/dest/faq/eu-ES.xml @@ -95,7 +95,7 @@ Ikusi jokaldi honen inguruko %3$s eta praktikatu bertan. Gidalerroetan Garaikur bereziak Garaikur hori Lichessen historian bakarra da eta %1$s ez den beste inork ez du izango. - Lortzeko, hiimgosu erabiltzeaileak berserk erabiliz erronka egin zion eta %2$s partidatik 100%1$s irabazi. + Lortzeko, hiimgosu erabiltzeaileak berserk erabiliz erronka egin zion eta %s partidatik 100%% irabazi. ordueroko Bullet txapelketa ZugAddict 2 orduz ari zen zuzeneko bat egiten eta 8. mailako A.A. garaitu nahian 1+0 erako partidan, inolako arrakastarik gabe. Thibaultek hori lortuko balu eta zuzenean emate bazuen garaikurra emango ziola. Ordubete beranduago Stockfish garaitu zuen eta agindutako bete egin zuten. Lichess puntuazioak diff --git a/translation/dest/faq/fi-FI.xml b/translation/dest/faq/fi-FI.xml index f2be297483..5bf186e0f4 100644 --- a/translation/dest/faq/fi-FI.xml +++ b/translation/dest/faq/fi-FI.xml @@ -14,7 +14,6 @@ juoksevista kuluistamme muitakin tapoja auttaa Onko olemassa Lichessiin perustuvia nettisivuja? - On. Lichess on inspiroinut muita avoimen lähdekoodin sivustoja, jotka käyttävät meidän %1$samme, %2$s:amme, tai %3samme. Reilu peli Miksi minulla on merkintä vahvuusluvun keinotekoisesta manipuloinnista (löysäilystä ja boostaamisesta) tai tietokoneavusta? Lichessillä on vahvat paljastusmenetelmät ja hyvin kattava prosessi todisteiden tarkastamiseen ja päätöksen tekoon. Prosessiin osallistuu usein monta moderaattoria, ja se voi kestää kauan. Merkintää lukuun ottamatta emme lähde yksittäistapauksissa erittelemään todisteita emmekä päätöksentekoprosessia. Jos tekisimme niin, paljastumisen välttäminen helpottuisi tulevaisuudessa, ja hyödyttömiä keskusteluja voisi herätä. Niihin kuluva aika ja vaiva on parasta käyttää muihin tärkeisiin asioihin. Käyttäjät voivat vedota meihin lähettämällä sähköpostin osoitteeseen %1$s, mutta päätöksiä muutetaan hyvin harvoin. @@ -96,7 +95,7 @@ Esimerkiksi 5+3 pelin arvioitu kesto on 5 × 60 + 40 × 3 = 420 sekuntia.ohjeista Ainutlaatuiset palkinnot Tämä palkinto on Lichessin historiassa ainutlaatuinen, eikä sitä voi koskaan saada kukaan muu kuin %1$s. - hiimgosu sai sen haastettuaan itsensä voittamaan berserkkitilassa 100%1$s %2$s peleistä. + hiimgosu sai sen haastettuaan itsensä voittamaan berserkkitilassa 100%% %s peleistä. tunnittaisen Bullet-turnauksen ZugAddict striimasi ja oli viimeiset 2 tuntia yrittänyt voittaa tason 8 tekoälyn 1+0-pelissä onnistumatta siinä. Thibault sanoi hänelle, että jos hän striimatessaan onnistuisi siinä, hän saisi ainutlaatuisen palkinnon. Tuntia myöhemmin ZugAddict löi Stockfishin, ja lupaus pidettiin. Lichess-vahvuusluvut diff --git a/translation/dest/faq/fr-FR.xml b/translation/dest/faq/fr-FR.xml index c200643d27..c1344a5f2d 100644 --- a/translation/dest/faq/fr-FR.xml +++ b/translation/dest/faq/fr-FR.xml @@ -14,7 +14,7 @@ répartition de nos coûts autres moyens d\'aider Y a-t-il d\'autre sites webs basés sur Lichess? - Oui. Lichess a en effet inspiré d\'autres sites open-source qui utilisent notre %1$s, %2$s, ou %3s. + Oui. Lichess a en effet inspiré d\'autres sites open-source qui utilisent notre %1$s, %2$s, ou %3$s. Fair play Pourquoi suis-je marqué pour manipulation artificielle du classement (défaites intentionnelles ou augmentation artificielle) ou pour assistance par ordinateur ? Lichess possède de solides méthodes de détection et un processus très approfondi pour examiner toutes les preuves avant de prendre une décision. Le processus implique souvent de nombreux modérateurs et peut prendre beaucoup de temps. En dehors de la marque elle-même, nous n\'entrerons pas dans les détails sur les preuves ou le processus de prise de décision pour des cas individuels, car il serait alors plus facile d\'éviter la détection à l\'avenir, et cela lancerait des débats improductifs. Ce temps et cet effort sont mieux dépensés à traiter d\'autres cas importants. Les utilisateurs peuvent faire appel en envoyant un e-mail à %1$s, mais les marques sont rarement annulées. @@ -96,7 +96,7 @@ lignes directrices Trophées uniques Ce trophée est unique dans l\'histoire de Lichess, personne d\'autre que %1$s ne l\'aura, jamais. - Pour l\'obtenir, hiimgosu s\'est mis au défi de gagner en berserk 100 %1$s des parties d\'%2$s. + Pour l\'obtenir, hiimgosu s\'est mis au défi de gagner en berserk 100%% des parties d\'%s. un tournoi Bullet horaire ZugAddict était en streamer et cela depuis deux heures il essayait de vaincre l\'IA de niveau 8 en partie 1+0, sans succès. Thibault lui dit qu\'en cas de victoire, il lui attribuerait un trophée unique. Une heure plus tard, il démolissait Stockfish, et la promesse fut tenue. Classements Lichess diff --git a/translation/dest/faq/it-IT.xml b/translation/dest/faq/it-IT.xml index 3d6e0dc58e..7e45523098 100644 --- a/translation/dest/faq/it-IT.xml +++ b/translation/dest/faq/it-IT.xml @@ -14,7 +14,7 @@ dettaglio dei nostri costi altri modi per aiutare Ci sono siti web basati su Lichess? - Sì. Lichess ha ispirato altri siti open-source che usano il nostro %1$s, le nostre %2$s e il nostro %3s. + Sì. Lichess ha ispirato altri siti open-source che usano il nostro %1$s, le nostre %2$s e il nostro %3$s. Fair Play Perché sono stato contrassegnato per manipolazioni del rating (manipolazioni in ribasso e in rialzo del rating) o per l\'utilizzo del computer? diff --git a/translation/dest/faq/ja-JP.xml b/translation/dest/faq/ja-JP.xml index 4dd7ec0ca1..5907a4571c 100644 --- a/translation/dest/faq/ja-JP.xml +++ b/translation/dest/faq/ja-JP.xml @@ -84,7 +84,7 @@ ガイドライン 独特なトロフィー このトロフィーは Lichess 史上唯一のもので、与えられたのは今後を含めて %1$s だけです。 - ユーザー hiimgosu は %2$s で全局バーサークして100%1$sの勝率を上げたのです。 + ユーザー hiimgosu は %s で全局バーサークして100%%の勝率を上げたのです。 毎時のブレット・トーナメント ユーザー ZugAddict はストリーム配信をしながら 1+0 の持時間でレベル 8 の AI に勝とうと 2 時間奮闘しましたがうまくいきませんでした。Thibault は彼に、配信中に勝ったら特製のトロフィーをあげると言いました。1 時間後、彼はみごと Stockfish を破り、約束が守られたというわけです。 Lichess のレーティング diff --git a/translation/dest/faq/nb-NO.xml b/translation/dest/faq/nb-NO.xml index 92031fd803..87bb1a846d 100644 --- a/translation/dest/faq/nb-NO.xml +++ b/translation/dest/faq/nb-NO.xml @@ -95,7 +95,7 @@ Ikke be om LM-tittelen. retningslinjene Unike trofeer Det trofeet er unikt i Lichess-historien, ingen andre enn %1$s vil noensinne få det. - For å få det utfordret hiimgosu seg selv til å gå berserk i og vinne 100 %1$s av partiene i %2$s. + For å få det utfordret hiimgosu seg selv til å gå berserk i og vinne 100%% av partiene i %s. timens Bullet-arena ZugAddict drev og strømmet, og i to timer hadde han uten hell forsøkt å slå maskinen på nivå 8 i et 1+0-parti. Thibault ga ham beskjed om at dersom han lyktes mens han strømmet, skulle han få et unikt trofé. En time senere slo ZugAddict Stockfish og fikk trofeet han var lovet. Lichess-ratinger diff --git a/translation/dest/faq/nl-NL.xml b/translation/dest/faq/nl-NL.xml index 86d19e39d2..7fa4c987eb 100644 --- a/translation/dest/faq/nl-NL.xml +++ b/translation/dest/faq/nl-NL.xml @@ -76,6 +76,7 @@ De computeranalyse op Lichess wordt aangedreven door Stockfish. Waarom staat er een vraagteken naast een beoordeling? Het vraagteken betekent dat de beoordeling voorlopig is. Redenen zijn: tegenstanders van gelijke sterkte + Om op de %1$s te komen moet je: rating ranglijst Hoe kan ik... Pop-upmeldingen in- of uitschakelen? diff --git a/translation/dest/faq/nn-NO.xml b/translation/dest/faq/nn-NO.xml index c58a268587..6208109813 100644 --- a/translation/dest/faq/nn-NO.xml +++ b/translation/dest/faq/nn-NO.xml @@ -14,7 +14,7 @@ spesifikasjon av kostnadane våre andre måtar å hjelpe Finst det nettstader basert på Lichess? - Ja. Lichess har inspirert andre nettstader med open kjeldekode som brukar vår %1$s, %2$s, eller %3s. + Ja. Lichess har inspirert andre nettstader med open kjeldekode som brukar vår %1$s, %2$s, eller %3$s. Fair Play Kvifor er eg flagga for kunstig manipulering av rating (sandbagging og boosting) eller for bruk av datamaskinhjelp? Lichess rår over sterke deteksjonsmetodar og vi går grundig gjennom alle bevisa før avgjerda vert tatt. Ofte er mange moderatorar involvert i prosessen, som difor kan ta lang tid. Sett bort frå sjølve merknaden går vi ikkje inn på nærare detaljar omkring prov eller beslutningsprosess i enkeltsaker. Gjorde vi det ville det bli lettare å unngå avsløringar i framtida, og vi kan bruke tid og krefter betre enn å gå inn i uproduktive og potensielt langdryge diskusjonar. Brukarar kan appellere på epost til %1$s, med avgjerder blir sjeldan omstøytt. @@ -96,7 +96,7 @@ retningslinjer Unike trofé Dette troféet er unikt for Lichess, ingen andre enn %1$s vil nokon gong få det. - For å få det, utfordra hiimgosu seg sjølv til berserkergang og vann 100%1$s spel av %2$s. + For å få det, utfordra hiimgosu seg sjølv til berserkergang og vann 100%% spel av %s. ein times Bullet-turnering ZugAddict strøyma spela sine og dei siste to timane freista han utan hell å slå A.I. nivå 8 i 1+0 spel. Thibault gav han beskjed om at dersom han lukkas medan han strøymde skulle han få eit unikt trofé. Ein time seinare slo ZugAddict Stockfish og fekk troféet han var lova. Lichess-rating diff --git a/translation/dest/faq/pl-PL.xml b/translation/dest/faq/pl-PL.xml index 3726e3ba16..cfabf213f6 100644 --- a/translation/dest/faq/pl-PL.xml +++ b/translation/dest/faq/pl-PL.xml @@ -79,7 +79,7 @@ Nie proś nas o przyznanie tytułu LM. Zasady dotyczące nazwy użytkownika Unikalne trofea To unikalne trofeum w historii Lichess, nikt inny oprócz %1$s nie będzie go mieć. - Aby je zdobyć, hiimgosu postawił sobie wyzwanie wygrania %2$s, wygrywając wszystkie swoje partie z włączonym berserkiem. + Aby je zdobyć, hiimgosu postawił sobie wyzwanie wygrania %s, wygrywając wszystkie swoje partie z włączonym berserkiem. godzinnego turnieju Bullet ZugAddict przez 2 godziny próbował bez powodzenia pokonać 8 poziom A.I. w grze 1+0, streamując swoje zmagania. Thibault powiedział mu, że jeśli uda mu się to zrobić podczas streamu, dostanie wyjątkowe trofeum. Godzinę później Stockfish został pokonany, a obietnica została dotrzymana. Rankingi Lichess diff --git a/translation/dest/faq/ru-RU.xml b/translation/dest/faq/ru-RU.xml index eb86190a30..5235638337 100644 --- a/translation/dest/faq/ru-RU.xml +++ b/translation/dest/faq/ru-RU.xml @@ -96,7 +96,7 @@ рекомендациях Уникальные трофеи Это уникальные трофеи за всю историю Lichess, и ни у кого, кроме %1$s их не было. - Чтобы его получить, hiimgosu бросил вызов самому себе выиграть с Берсерком 100 %1$s игр в %2$s. + Чтобы его получить, hiimgosu бросил вызов самому себе выиграть с Берсерком 100%% игр в %s. ежечасном турнире в Пулю ZugAddict во время стрима два часа безуспешно пытался обыграть компьютер на 8-м уровне в игре 1+0. Тибо пообещал наградить его уникальным трофеем, если он всё же сделает это во время стрима. Спустя час он разгромил Стокфиш, и обещание было исполнено. Рейтинги Lichess diff --git a/translation/dest/faq/sv-SE.xml b/translation/dest/faq/sv-SE.xml index 17e0f0ddbc..20fd379fe6 100644 --- a/translation/dest/faq/sv-SE.xml +++ b/translation/dest/faq/sv-SE.xml @@ -14,7 +14,7 @@ uppdelning av våra kostnader andra sätt att hjälpa till Finns det webbplatser baserade på Lichess? - Ja. Lichess har minsann inspirerat andra öppen källkod webbplatser som använder vår %1$s, %2$s, eller %3s. + Ja. Lichess har minsann inspirerat andra öppen källkod webbplatser som använder vår %1$s, %2$s, eller %3$s. Rent spel Varför är jag flaggad för artificiell rating manipulation (sandbagging och boosting) eller datorstöd? Lichess har starka detektionsmetoder och en mycket ingående process för att granska alla bevis och fatta ett beslut. Processen involverar ofta många moderatorer och kan ta lång tid. Utöver markeringen kommer vi inte att gå in på detaljer om bevis eller beslutsprocessen för enskilda fall. Att göra det skulle göra det lättare att undvika upptäckt i framtiden och vara en inbjudan till improduktiva debatter. Den tiden och ansträngningen är bättre att spendera på andra viktiga ärenden. Användare kan överklaga genom att maila %1$s, men beslut upphävs sällan. @@ -97,7 +97,7 @@ någon annan eller innehålla reklam. Du kan läsa mer i %1$s. riktlinjerna Unika troféer Denna trofé är unik i Lichess historia, ingen annan än %1$s kommer någonsin att ha den. - För att få den, utmanade hiimgosu sig själv att gå bärsärk i och vinna 100%1$s av partierna i %2$s. + För att få den, utmanade hiimgosu sig själv att gå bärsärk i och vinna 100%% av partierna i %s. en tim-Bullet turnering ZugAddict streamade och under de senaste 2 timmarna hade han försökt att besegra A.I. nivå 8 i ett 1+0 parti, utan framgång. Thibault berättade för honom att om han lyckades göra det på stream, skulle han få en unik trofé. En timme senare krossade han Stockfish och löftet hedrades. Lichess rating diff --git a/translation/dest/patron/sl-SI.xml b/translation/dest/patron/sl-SI.xml index bcfba1dbe6..0a5bf46b33 100644 --- a/translation/dest/patron/sl-SI.xml +++ b/translation/dest/patron/sl-SI.xml @@ -47,7 +47,7 @@ Ali pa %s. Lichess Pokrovitelj za en mesec Lichess pokrovitelj za dva meseca - Lichess pokrovitelj za tri/štiri mesece + Lichess pokrovitelj za %s mesece Lichess pokrovitelj za %s mesecev Tvoja potpora lichess.org z/s %s na mesec. diff --git a/translation/dest/preferences/ar-SA.xml b/translation/dest/preferences/ar-SA.xml index 3ea04e700d..d51a9df2f3 100644 --- a/translation/dest/preferences/ar-SA.xml +++ b/translation/dest/preferences/ar-SA.xml @@ -1,2 +1,44 @@ - + + تفضيلات + مظهر المباراة + المؤثرات الحركية للقطعة + الفرق المادي + تميز معالم الرقعة (آخر نقلة والكش) + نقلات القطعة ( النقلات المتاحة والنقلات الاستباقية) + إحداثيات الرقعة (A-H, 1-8) + قائمة النقلات خلال المباراة + تدوين النقلة + رمز قطعة الشطرنج + حروف (K, Q, R, B, N) + وضع التأمل + أظهر زر تعديل حجم الرقعة + خلال الوضع المبدئي فقط + (معصوب العينين (إخفاء القطع + مؤقت الشطرنج + أجزاء الثانية + عندما يقل الوقت عن 10 ثوانٍ + الشريط الأخضر للساعة + الصوت عندما يقارب الوقت على الإنتهاء + إعطاء مزيد من الوقت + كيف يمكنك تحريك القطع؟ + النقر فوق مربعين + سحب القطعة + كلاهما + النقلات الاستباقية (اللعب خلال دور الخصم) + التراجع عن النقلات (بموافقة الخصم) + في المباريات غير المقيمة فقط + الترقية إلى وزير آلياً + عند النقلة الاستباقية + مطالبة بالتعادل لتكرار نفس النقلات ثلاث مرات بشكل تلقائي + عندما يقل الوقت عن 30 ثانية + تأكيد النقلة + فى العاب المراسلة + مراسلة وبدون توقيت + تأكيد الاستسلام وعرض التعادل + طريقة التحصين/التبييت + حرك الملك مربعين + حرك الملك بإتجاه الرخ + إدخال النقلات بلوحة المفاتيح + تم حفظ تفضيلاتك. + diff --git a/translation/dest/search/zu-ZA.xml b/translation/dest/search/zu-ZA.xml index a9e7311a93..60c868defa 100644 --- a/translation/dest/search/zu-ZA.xml +++ b/translation/dest/search/zu-ZA.xml @@ -2,14 +2,6 @@ Sesha Ucwaningo Olujulile - - Sesha kumdlalo we-chess - Sesha emidlalweni ye-chess - - - Umdlalo owodwa utholakele - Umdlalo owodwa utholakele - Igama eliphikisayo Isahluleki Kusuka diff --git a/translation/dest/settings/gd-GB.xml b/translation/dest/settings/gd-GB.xml index 3ea04e700d..5b6a56971b 100644 --- a/translation/dest/settings/gd-GB.xml +++ b/translation/dest/settings/gd-GB.xml @@ -1,2 +1,7 @@ - + + Roghainnean + Dùin an cunntas + Chuir mi an caochladh romhamh, na dùinibh an cunntas agam + Chaidh an cunntas a dhùnadh. + diff --git a/translation/dest/site/ms-MY.xml b/translation/dest/site/ms-MY.xml index 22137fadbb..e9749e1c40 100644 --- a/translation/dest/site/ms-MY.xml +++ b/translation/dest/site/ms-MY.xml @@ -177,9 +177,6 @@ Lupa kata kunci? Rank Rank: %s - - Rank akan dikemaskini setiap minit - %s teka-teki @@ -283,7 +280,7 @@ %s pengikut - % yang diikut + %s yang diikut Papar lebih Ahli sejak diff --git a/translation/dest/site/my-MM.xml b/translation/dest/site/my-MM.xml index e633dbb518..40926b76c6 100644 --- a/translation/dest/site/my-MM.xml +++ b/translation/dest/site/my-MM.xml @@ -82,7 +82,7 @@ တိုင်စာပုံစံ အသုံးပြုပါ အကူအညီ တောင်းလိုလျှင် %1$s ဆက်သွယ်ရန်စာမျက်နှာတွင် ကြိုးစားကြည့်ပါ - ဤ ဖိုရမ်တွင် ပို့စ် တင်လိုလျှင် %$1s အသင်းသို့ အသင်းဝင် အဖြစ် ဝင်ပါ။ + ဤ ဖိုရမ်တွင် ပို့စ် တင်လိုလျှင် %1$s အသင်းသို့ အသင်းဝင် အဖြစ် ဝင်ပါ။ %1$s အသင်း ပွဲများ ထပ်ကစားပြီးမှ ဆွေးနွေးချက်များ တင်ခွင့်ရပါမည်။ ရယူလိုပါသည်။ diff --git a/translation/dest/site/sk-SK.xml b/translation/dest/site/sk-SK.xml index 8aab6402b8..456045f401 100644 --- a/translation/dest/site/sk-SK.xml +++ b/translation/dest/site/sk-SK.xml @@ -926,4 +926,7 @@ Klasické partie: 25 minút a viac Korešpondenčné partie: jeden alebo viac dní na ťah Tréner taktických šachových pozícií + Dôležité + %1$s tím + Nemôžeš prispievať do fóra. Zahraj si nejaké hry! diff --git a/translation/dest/site/sl-SI.xml b/translation/dest/site/sl-SI.xml index c0194da90d..6e130a7c54 100644 --- a/translation/dest/site/sl-SI.xml +++ b/translation/dest/site/sl-SI.xml @@ -480,7 +480,7 @@ Belih zmag Črnih zmag Odstotek remijev - Naslednji turnir: + Naslednjih %s turnirjev: Poglej več turnirjev Povprečen nasprotnik Samo za člane @@ -930,11 +930,8 @@ v %3$s Dopisne igre: dan ali več za potezo Trening šahovskih taktik Pomembno - Tvoje vprašanje ima mogoče že odgovor v odgovorih na pogosta vprašanja. - Prijavi uporabnika zaradi goljufanja ali slabega obnašanja uporabi prijavni obrazec - Zahtevaj podporo poskusi s stranjo za stike Ta tema je arhivirana in nanjo ni mogoče več odgovarjati. Pridruži se ekipi %1$s, da boš lahko objavljal sporočila na forumu diff --git a/translation/dest/site/zu-ZA.xml b/translation/dest/site/zu-ZA.xml index 5120d7e658..5e0c4dbacb 100644 --- a/translation/dest/site/zu-ZA.xml +++ b/translation/dest/site/zu-ZA.xml @@ -33,10 +33,6 @@ Joyina umdlalo Mhlophe ukuze udlale Okumnyama ukudlala - - Umphikisi wakho ushiye umdlalo. Ungacela ukunqoba ngomzuzwana. - Umphikisi wakho ushiye umdlalo. Ungacela ukunqoba ngemizuzwana. - Omunye umdlali kungenzeka ukuthi ushiye lo mdlalo. Ungacela ukunqoba, shayela umdlalo umdwebo, noma ulinde. Yenza umphikisi wakho ashiye Imangalo yokunqoba @@ -79,22 +75,11 @@ Akwaziwa Database Mhlophe / Dweba / Mnyama - Isilinganiso esimaphakathi Imidlalo yakamuva Best imidlalo - Imidlalo eyizigidi ezimbili ye-OTB yabadlali abalinganiswe + FIDE kusuka - - Mate ekuhambeni - Mate in half-uhamba - - - Ukuthwebula okulandelayo noma ukunyakaza kwe-pawn ku-half-move (Ibanga Liya ku-Zeroing kwekhawunta engu-50) - Ukuthwebula okulandelayo noma ukunyakaza kwe-pawn ku-half-move (Ibanga Liya ku-Zeroing kwekhawunta engu-50) - Awukho umdlalo otholakele Mhlawumbe faka eminye imidlalo kusuka kumenyu yokuncamelayo? Umhloli wokuvula - ukuvula umhloli Ukunqoba kuvinjelwe umthetho wokuhamba wama-50 Ukulahlekelwa kuvinjelwe umthetho wokuhamba ongu-50 Konke kusethiwe! @@ -125,19 +110,7 @@ Funa umdwebo Umdwebo Wokunikeza Dweba - - umdlali - abadlali - Imidlalo yamanje - - umdlalo - imidlalo - - - ibhukumaka - amabhukumaka - Buka ngosayizi ogcwele Phuma ngemvume Ngena ngemvume @@ -146,7 +119,6 @@ Amakhompyutha nabadlali abasizwa ngamakhompyutha abavunyelwe ukuthi badlale. Uyacelwa ukuthi ungatholi lusizo kwizinjini ze-chess, imininingwane yolwazi, noma kwabanye abadlali ngenkathi udlala. Futhi qaphela ukuthi ukwenza ama-akhawunti amaningi kudikibile kakhulu futhi ama-accounting amaningi ngokweqile angaholela ekuvinjelweni. Imidlalo Iforamu - kuthunyelwe ngesihloko Okuthunyelwe okusha kwenkundla Abadlali Bangani @@ -161,14 +133,6 @@ Ukuxhumana Izinsuku ngakunye Usuku olulodwa - - usuku - izinsuku - - - ihora - amahora - Isikhathi Isilinganiso Izibalo zesilinganiso @@ -184,20 +148,7 @@ Ukusetha kabusha kwephasiwedi Ukhohlwe iphasiwedi? Isikhundla - Isikhundla - - Isikhundla siyabuyekezwa njalo ngeminithi - Isikhundla siyabuyekezwa njalo ngemizuzu - - - iphazili - emaphazili - Imidlalo edlaliwe - - umdlalo nawe - imidlalo nawe - Khansela Isikhathi siphelile Dweba okunikezwayo kuthunyelwe @@ -214,7 +165,6 @@ Iyadlala manje Iyadlala manje Kuqediwe - uyaphela Lahla umdlalo Umdlalo uhoxisiwe Okujwayelekile diff --git a/translation/dest/tourname/zu-ZA.xml b/translation/dest/tourname/zu-ZA.xml index 5a7a02b0c9..e0ccb71a17 100644 --- a/translation/dest/tourname/zu-ZA.xml +++ b/translation/dest/tourname/zu-ZA.xml @@ -2,6 +2,4 @@ Ihora Lokwakha Ngehora Ngokushesha Ngehora - Ihora Lendawo - Ngehora From 01ffa3d8e1c692c1bed0facc81010db3e2aa35f5 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 3 May 2020 10:40:31 -0600 Subject: [PATCH 10/16] remove bin/prod scripts --- bin/prod/iptables-drop | 53 ------------ bin/prod/restart | 17 ---- bin/prod/restart-now | 13 --- bin/prod/wsmon-away.js | 180 ----------------------------------------- bin/prod/wsmon.js | 143 -------------------------------- 5 files changed, 406 deletions(-) delete mode 100755 bin/prod/iptables-drop delete mode 100755 bin/prod/restart delete mode 100755 bin/prod/restart-now delete mode 100755 bin/prod/wsmon-away.js delete mode 100644 bin/prod/wsmon.js diff --git a/bin/prod/iptables-drop b/bin/prod/iptables-drop deleted file mode 100755 index 49b55d769e..0000000000 --- a/bin/prod/iptables-drop +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -e - -# Run as root -# -# To drop 99.9% of traffic: -# iptables-drop 0.999 -# -# To drop half of traffic: -# iptables-drop 0.5 -# -# To restore normal traffic: -# iptables-drop 0 - -PORT=443 -DROP_RATIO=${1-0} -IPTABLES_COMMANDS="iptables ip6tables" - -echo; -echo "RATIO = $DROP_RATIO"; -echo; - -# First we look for an existing drop rule, and we cancel it -for IPTABLES in $IPTABLES_COMMANDS; do - - if (( $($IPTABLES -L INPUT | grep "DROP .* statistic mode random probability" | wc -l) )); then - echo; - echo "Canceling previous drop, resuming normal traffic"; - echo; - COMMAND="$IPTABLES -D INPUT 1" - echo $COMMAND; - $COMMAND; - fi - -done - -# Then we add a drop rule if necessary -# Bash doesn't support floating point comparison :rolleyes: -# https://stackoverflow.com/a/31087503 -if (( $(echo "$DROP_RATIO > 0" | bc -l) )); then - - echo "Dropping $DROP_RATIO/1 packets"; - echo; - - for IPTABLES in $IPTABLES_COMMANDS; do - COMMAND="$IPTABLES -I INPUT 1 --protocol tcp -m multiport --dports $PORT --match statistic --mode random --probability $DROP_RATIO --jump DROP"; - echo $COMMAND; - $COMMAND; - done - -fi - -echo; -echo "Done!" diff --git a/bin/prod/restart b/bin/prod/restart deleted file mode 100755 index 916ee18d2e..0000000000 --- a/bin/prod/restart +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -e - -REMOTE="keres" -REMOTE_DIR="/home/lichess" - -echo "Notify users of pre deploy" -bin/cli-prod deploy pre - -sleep 5 - -echo "Notify users of post deploy" -bin/cli-prod deploy post - -echo "Restart lichess" -ssh $REMOTE "systemctl restart lichess" - -echo "Deploy complete" diff --git a/bin/prod/restart-now b/bin/prod/restart-now deleted file mode 100755 index d5a828aa85..0000000000 --- a/bin/prod/restart-now +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -e - -DIR="/home/lichess" - -echo "Notify lichess of post deploy" -$DIR/bin/cli-prod deploy post - -sleep 3 - -echo "Restart lichess" -service lichess restart - -echo "Restart complete" diff --git a/bin/prod/wsmon-away.js b/bin/prod/wsmon-away.js deleted file mode 100755 index ce3985961d..0000000000 --- a/bin/prod/wsmon-away.js +++ /dev/null @@ -1,180 +0,0 @@ -var WebSocketClient = require('websocket').client; -var HttpClient = require('request'); - -var lichessSri = Math.random().toString(36).substring(2); - -var client = new WebSocketClient(); -var geoLag = process.argv[2]; -var password = process.argv[3]; -if (!password) throw "missing SMS password"; -var domain = process.argv[4] || 'lichess.org'; -var url = 'wss://socket.' + domain + '/socket'; -var averageLag; -var lagAlert = 100; // in milliseconds -var fail = 0; -var failAlert = 10 * 1000; - -var logger = function(sev, msg) { - console.log(); - console.log(new Date() + ' [' + sev + '] ' + msg); -}; - -var runCommand = function(cmd) { - logger('error', 'Running ' + cmd); - var exec = require('child_process').exec; - exec(cmd, function(error, stdout, stderr) { - console.log(error); - console.log(stdout); - console.log(stderr); - }); -}; -// runCommand('jinfo `cat /home/lichess/RUNNING_PID`'); - -var lastRestarted = 0; - -var doRestartLichess = function() { - lastRestarted = Date.now(); - logger('error', 'Restart lichess now'); - runCommand('/home/lichess/bin/prod/restart-now'); -} - -var restartLichess = function(msg) { - logger('error', msg); - logger('error', "Asking to restart"); - if (Date.now() < lastRestarted + 5 * 60 * 1000) logger('error', "Too early!"); - else doRestartLichess(); - // runCommand('jstack -F `cat /home/lichess/RUNNING_PID` > /root/lichess-auto-jstack'); - // setTimeout(function() { - // doRestartLichess(); - // }, 3000); -}; - -logger('info', 'Geographical lag: ' + geoLag); - -var connect = function() { - logger('info', 'Connect to ' + url); - client.connect(url + '?sri=' + lichessSri); -}; - -var sendSms = function(msg) { - logger('error', 'Sending SMS now'); - HttpClient.post({ - url: 'https://smsapi.free-mobile.fr/sendmsg', - method: 'post', - rejectUnauthorized: false, - qs: { - user: '21942578', - pass: password, - msg: '[wsmon] ' + domain + ': ' + msg - } - }, - function(error, response, body) { - if (error) logger('error', 'SMS sent: ' + error); - else logger('info', 'SMS sent: ' + response.statusCode + ' ' + body); - }); -}; - -// sendSms("test"); - -var addFail = function(v) { - fail += v; - if (fail >= failAlert) { - fail = 0; - restartLichess('fail = ' + fail); - } -}; - -client.on('connectFailed', function(error) { - logger('error', 'connectFailed: ' + error.toString()); - addFail(200); - setTimeout(connect, 5000); -}); - -client.on('connect', function(connection) { - logger('info', 'Client connected. Average lag:'); - connection.on('error', function(error) { - addFail(200); - logger('error', error.toString()); - }); - connection.on('close', function() { - addFail(200); - logger('info', 'Connection closed'); - averageLag = null; - setTimeout(connect, 5000); - }); - connection.on('message', function(message) { - var data = JSON.parse(message.utf8Data); - if (data.t == 'n') { - var lag = Math.max(0, new Date() - pingAt - geoLag); - if (lag > lagAlert) { - addFail(Math.round(lag / 10)); - logger('warn', 'High lag: ' + lag); - } else if (lag >= 10) { - process.stdout.write("(" + lag + ") "); - } else { - fail = Math.max(0, fail - 1); - } - if (!averageLag) averageLag = lag; - else averageLag = 0.2 * (lag - averageLag) + averageLag; - setTimeout(ping, 1000); - } - }); - - var pingAt; - var ping = function() { - pingAt = new Date(); - connection.sendUTF(JSON.stringify({ - t: 'p', - v: 0 - })); - }; - ping(); -}); - -connect(); - -setInterval(function() { - if (averageLag !== null) - process.stdout.write(Math.round(averageLag) + ' '); - // if (fail > 0) - // process.stdout.write('{' + fail + '} '); -}, 10000); - -// HTTP -(function() { - var initialErrorRetryDelay = 3 * 60 * 1000; - var errorRetryDelay = initialErrorRetryDelay; - var testDelay = 5000; - var errorCount = 0; - var errorInc = 5; - var errorThreshold = 2 * 60 * 1000 / testDelay * errorInc; - console.log(errorInc, 'errorInc'); - console.log(errorThreshold, 'errorThreshold'); - - function onError(err) { - logger('error', 'httpFailed: ' + err); - errorCount += errorInc; - logger('error', 'HTTP error count: ' + errorCount + '/' + errorThreshold); - if (errorCount < errorThreshold) { - setTimeout(httpCheck, testDelay); - return; - } - restartLichess('HTTP(' + errorCount + ') = ' + err); - errorCount = 0; - logger('error', 'will retry in ' + (errorRetryDelay / 1000 / 60) + ' minutes'); - setTimeout(httpCheck, errorRetryDelay); - errorRetryDelay = errorRetryDelay * 2; - } - - function httpCheck() { - HttpClient.get('http://en.' + domain, { - timeout: 1000 - }).on('response', function(res) { - if (res.statusCode != 200) return onError(res.statusCode); - if (errorCount > 0) errorCount--; - errorRetryDelay = initialErrorRetryDelay; - setTimeout(httpCheck, testDelay); - }).on('error', onError); - } - setTimeout(httpCheck, testDelay); -})(); diff --git a/bin/prod/wsmon.js b/bin/prod/wsmon.js deleted file mode 100644 index d67c1143f1..0000000000 --- a/bin/prod/wsmon.js +++ /dev/null @@ -1,143 +0,0 @@ -var WebSocketClient = require('websocket').client; -var HttpClient = require('request'); - -var lichessSri = Math.random().toString(36).substring(2); - -var url = 'wss://socket.lichess.org/socket'; -var client = new WebSocketClient(); -var geoLag = process.argv[2]; -var password = process.argv[3]; -if (!password) throw "missing SMS password"; -var averageLag; -var lagAlert = 100; // in milliseconds -var fail = 0; -var failAlert = 2000; - -var logger = function(sev, msg) { - console.log(); - console.log(new Date() + ' [' + sev + '] ' + msg); -}; - -logger('info', 'Geographical lag: ' + geoLag); - -var connect = function() { - logger('info', 'Connect to ' + url); - client.connect(url + '?sri=' + lichessSri); -}; - -var sendSms = function(msg) { - logger('error', 'Sending SMS now'); - HttpClient.post({ - url: 'https://smsapi.free-mobile.fr/sendmsg', - method: 'post', - rejectUnauthorized: false, - qs: { - user: '21942578', - pass: password, - msg: '[wsmon] lichess.org: ' + msg - } - }, - function(error, response, body) { - if (error) logger('error', 'SMS sent: ' + error); - else logger('info', 'SMS sent: ' + response.statusCode + ' ' + body); - }); -}; - -// sendSms("test"); - -var addFail = function(v) { - fail += v; - if (fail >= failAlert) { - sendSms('fail = ' + fail); - fail = 0; - } -}; - -client.on('connectFailed', function(error) { - logger('error', 'connectFailed: ' + error.toString()); - addFail(200); - setTimeout(connect, 5000); -}); - -client.on('connect', function(connection) { - logger('info', 'Client connected. Average lag:'); - connection.on('error', function(error) { - addFail(200); - logger('error', error.toString()); - }); - connection.on('close', function() { - addFail(200); - logger('info', 'Connection closed'); - averageLag = null; - setTimeout(connect, 5000); - }); - connection.on('message', function(message) { - var data = JSON.parse(message.utf8Data); - if (data.t == 'n') { - var lag = Math.max(0, new Date() - pingAt - geoLag); - if (lag > lagAlert) { - addFail(Math.round(lag / 10)); - logger('warn', 'High lag: ' + lag); - } else if (lag >= 10) { - process.stdout.write("(" + lag + ") "); - } else { - fail = Math.max(0, fail - 1); - } - if (!averageLag) averageLag = lag; - else averageLag = 0.2 * (lag - averageLag) + averageLag; - setTimeout(ping, 1000); - } - }); - - var pingAt; - var ping = function() { - pingAt = new Date(); - connection.sendUTF(JSON.stringify({ - t: 'p', - v: 0 - })); - }; - ping(); -}); - -connect(); - -setInterval(function() { - if (averageLag !== null) - process.stdout.write(Math.round(averageLag) + ' '); -// if (fail > 0) -// process.stdout.write('{' + fail + '} '); -}, 10000); - -// HTTP -(function() { - var initialErrorRetryDelay = 5 * 60 * 1000; - // var initialErrorRetryDelay = 10 * 1000; - var errorRetryDelay = initialErrorRetryDelay; - var testDelay = 5000; - var errorCount = 0; - var errorThreshold = 3; - - function onError(err) { - errorCount++; - if (errorCount < errorThreshold) { - setTimeout(httpCheck, testDelay); - return; - } - logger('error', 'httpFailed: ' + err); - logger('error', 'will retry in ' + (errorRetryDelay / 1000 / 60) + ' minutes'); - sendSms('HTTP(' + errorCount + ') = ' + err); - setTimeout(httpCheck, errorRetryDelay); - errorRetryDelay = errorRetryDelay * 2; - } - - function httpCheck() { - HttpClient.get('http://lichess.org').on('response', function(res) { - if (res.statusCode != 200) return onError(res.statusCode); - errorCount = 0; - errorRetryDelay = initialErrorRetryDelay; - setTimeout(httpCheck, testDelay); - }).on('error', onError); - } - setTimeout(httpCheck, testDelay); -})(); From c27649e79006716cb09b6acd28f0403f5279f286 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 3 May 2020 12:13:12 -0600 Subject: [PATCH 11/16] send empty events to keep the stream alive - closes #6538 --- app/controllers/Api.scala | 7 ++++++- modules/game/src/main/GamesByUsersStream.scala | 12 +++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/controllers/Api.scala b/app/controllers/Api.scala index fd70ca6119..26d17ba74d 100644 --- a/app/controllers/Api.scala +++ b/app/controllers/Api.scala @@ -278,7 +278,7 @@ final class Api( private def gamesByUsers(max: Int)(req: Request[String]) = { val userIds = req.body.split(',').view.take(max).map(lila.user.User.normalize).toSet - jsonStream(env.game.gamesByUsersStream(userIds))(req).fuccess + jsonStreamWithKeepAlive(env.game.gamesByUsersStream(userIds))(req).fuccess } private val EventStreamConcurrencyLimitPerUser = new lila.memo.ConcurrencyLimit[String]( @@ -344,6 +344,11 @@ final class Api( def jsonStream(makeSource: => Source[JsValue, _])(implicit req: RequestHeader): Result = GlobalConcurrencyLimitPerIP(HTTPRequest lastRemoteAddress req)(makeSource)(sourceToNdJson) + def jsonStreamWithKeepAlive( + makeSource: => Source[Option[JsValue], _] + )(implicit req: RequestHeader): Result = + GlobalConcurrencyLimitPerIP(HTTPRequest lastRemoteAddress req)(makeSource)(sourceToNdJsonOption) + def sourceToNdJson(source: Source[JsValue, _]) = sourceToNdJsonString { source.map { o => diff --git a/modules/game/src/main/GamesByUsersStream.scala b/modules/game/src/main/GamesByUsersStream.scala index 0fe602a38a..f1404c2924 100644 --- a/modules/game/src/main/GamesByUsersStream.scala +++ b/modules/game/src/main/GamesByUsersStream.scala @@ -2,6 +2,7 @@ package lila.game import akka.stream.scaladsl._ import play.api.libs.json._ +import scala.concurrent.duration._ import actorApi.{ FinishGame, StartGame } import chess.format.FEN @@ -10,16 +11,21 @@ import lila.common.Json.jodaWrites import lila.game.Game import lila.user.User -final class GamesByUsersStream(gameRepo: lila.game.GameRepo)(implicit ec: scala.concurrent.ExecutionContext) { +final class GamesByUsersStream(gameRepo: lila.game.GameRepo)( + implicit ec: scala.concurrent.ExecutionContext +) { - private val chans = List("startGame", "finishGame") + private val keepAliveInterval = 70.seconds // play's idleTimeout = 75s + private val chans = List("startGame", "finishGame") private val blueprint = Source .queue[Game](64, akka.stream.OverflowStrategy.dropHead) .mapAsync(1)(gameRepo.withInitialFen) .map(gameWithInitialFenWriter.writes) + .map(some) + .merge(Source.tick(keepAliveInterval, keepAliveInterval, none)) - def apply(userIds: Set[User.ID]): Source[JsObject, _] = + def apply(userIds: Set[User.ID]): Source[Option[JsValue], _] = blueprint mapMaterializedValue { queue => def matches(game: Game) = game.userIds match { case List(u1, u2) if u1 != u2 => userIds(u1) && userIds(u2) From 0a9ed4288d6954e2f80e8eea2b89256592dc4d43 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 3 May 2020 12:52:20 -0600 Subject: [PATCH 12/16] first the prod debug and now this: the checkmail dev is definitely drunk closes #6544 and closes #6297 --- modules/security/src/main/CheckMail.scala | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/security/src/main/CheckMail.scala b/modules/security/src/main/CheckMail.scala index 82045d37f3..8252000c89 100644 --- a/modules/security/src/main/CheckMail.scala +++ b/modules/security/src/main/CheckMail.scala @@ -1,8 +1,9 @@ package lila.security -import scala.concurrent.duration._ +import play.api.libs.json._ import play.api.libs.ws.WSClient import reactivemongo.api.ReadPreference +import scala.concurrent.duration._ import lila.common.Domain import lila.db.dsl._ @@ -63,15 +64,22 @@ final private class CheckMail( .withTimeout(15.seconds) .map { case res if res.status == 200 => - val valid = ~(res.json \ "valid").asOpt[Boolean] - val block = ~(res.json \ "block").asOpt[Boolean] - val disposable = ~(res.json \ "disposable").asOpt[Boolean] + val readBool = readRandomBoolean(res.json) _ + val valid = readBool("valid") + val block = readBool("block") + val disposable = readBool("disposable") val reason = ~(res.json \ "reason").asOpt[String] val ok = valid && !block && !disposable - logger.info(s"CheckMail $domain = $ok ($reason)") + logger.info(s"CheckMail $domain = $ok ($reason) {valid:$valid,block:$block,disposable:$disposable}") ok case res => throw lila.base.LilaException(s"${config.url} $domain ${res.status} ${res.body take 200}") } .monTry(res => _.security.checkMailApi.fetch(res.isSuccess, res.getOrElse(true))) + + // sometimes it's "1" and sometimes it's "true" + // and we're paying for that shit + private def readRandomBoolean(js: JsValue)(key: String) = ~ { + (js \ key).asOpt[Boolean] orElse (js \ key).asOpt[Int].map(1.==) + } } From 7eead3e0a26d94b0703b85f21ecc0b80f1c43c10 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 3 May 2020 12:54:17 -0600 Subject: [PATCH 13/16] who even uses `"1"` for `true` psychopaths only. For #6544 and #6297 --- modules/security/src/main/CheckMail.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/security/src/main/CheckMail.scala b/modules/security/src/main/CheckMail.scala index 8252000c89..dc253f3b93 100644 --- a/modules/security/src/main/CheckMail.scala +++ b/modules/security/src/main/CheckMail.scala @@ -80,6 +80,8 @@ final private class CheckMail( // sometimes it's "1" and sometimes it's "true" // and we're paying for that shit private def readRandomBoolean(js: JsValue)(key: String) = ~ { - (js \ key).asOpt[Boolean] orElse (js \ key).asOpt[Int].map(1.==) + (js \ key).asOpt[Boolean] orElse + (js \ key).asOpt[Int].map(1.==) orElse + (js \ key).asOpt[String].map("1".==) orElse } } From f66a25c0b9ddf60facaa87f4e94c39853208837b Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 3 May 2020 12:56:51 -0600 Subject: [PATCH 14/16] tweak email validation error message --- translation/source/site.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translation/source/site.xml b/translation/source/site.xml index d119401121..aad485a59b 100644 --- a/translation/source/site.xml +++ b/translation/source/site.xml @@ -599,7 +599,7 @@ computer analysis, game chat and shareable URL. Share game URL This field is required This email address is invalid - This email address is not acceptable + This email address is not acceptable. Please double-check it, and try again. This email address is already taken This is already your email address If rating is ± %s From 3deaafe989e7ccfde06561949ec011f7bc1c7e59 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 3 May 2020 13:16:57 -0600 Subject: [PATCH 15/16] composite user API rate limiting --- app/controllers/Api.scala | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/app/controllers/Api.scala b/app/controllers/Api.scala index 26d17ba74d..5b4a1d3c0b 100644 --- a/app/controllers/Api.scala +++ b/app/controllers/Api.scala @@ -55,18 +55,13 @@ final class Api( userApi.extended(name, ctx.me) map toApiResult } - private[controllers] val UsersRateLimitGlobal = new lila.memo.RateLimit[String]( - credits = 1000, - duration = 1.minute, - name = "team users API global", - key = "team_users.api.global" - ) - - private[controllers] val UsersRateLimitPerIP = new lila.memo.RateLimit[IpAddress]( - credits = 1000, - duration = 10.minutes, - name = "team users API per IP", - key = "team_users.api.ip" + private[controllers] val UsersRateLimitPerIP = lila.memo.RateLimit.composite[IpAddress]( + key = "users.api.ip", + name = "users API per IP", + enforce = env.net.rateLimit.value + )( + ("fast", 1000, 10.minutes), + ("slow", 30000, 1.day) ) def usersByIds = Action.async(parse.tolerantText) { req => @@ -74,12 +69,10 @@ final class Api( val ip = HTTPRequest lastRemoteAddress req val cost = usernames.size / 4 UsersRateLimitPerIP(ip, cost = cost) { - UsersRateLimitGlobal("-", cost = cost, msg = ip.value) { - lila.mon.api.users.increment(cost) - env.user.repo nameds usernames map { - _.map { env.user.jsonView(_, none) } - } map toApiResult map toHttp - } + lila.mon.api.users.increment(cost) + env.user.repo nameds usernames map { + _.map { env.user.jsonView(_, none) } + } map toApiResult map toHttp } } From 25aedf1ee654c1e6b718d5a9f3a23af782953283 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 3 May 2020 13:17:41 -0600 Subject: [PATCH 16/16] fix copypaste --- modules/security/src/main/CheckMail.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/security/src/main/CheckMail.scala b/modules/security/src/main/CheckMail.scala index dc253f3b93..2b76d494e2 100644 --- a/modules/security/src/main/CheckMail.scala +++ b/modules/security/src/main/CheckMail.scala @@ -82,6 +82,6 @@ final private class CheckMail( private def readRandomBoolean(js: JsValue)(key: String) = ~ { (js \ key).asOpt[Boolean] orElse (js \ key).asOpt[Int].map(1.==) orElse - (js \ key).asOpt[String].map("1".==) orElse + (js \ key).asOpt[String].map("1".==) } }