From d0fb110e218292921e35e8fe8181d7e7ea8883e4 Mon Sep 17 00:00:00 2001 From: server Date: Mon, 15 Nov 2021 11:37:23 -0700 Subject: [PATCH] deepcrayon.fish version of lila --- app/ui/OpenGraph.scala | 2 +- app/views/base/bits.scala | 9 +- app/views/base/layout.scala | 14 +- app/views/base/topnav.scala | 70 +--- app/views/lobby/home.scala | 81 +--- app/views/round/watcher.scala | 9 +- app/views/tv/games.scala | 3 - app/views/tv/index.scala | 9 +- app/views/user/bits.scala | 12 - app/views/user/bots.scala | 26 +- app/views/user/show/newPlayer.scala | 20 +- conf/base.conf | 48 +-- conf/base.conf.orig | 530 +++++++++++++++++++++++++++ modules/pref/src/main/PieceSet.scala | 4 +- modules/pref/src/main/Pref.scala | 4 +- translation/dest/activity/en-US.xml | 6 +- translation/source/activity.xml | 6 +- translation/source/broadcast.xml | 4 +- translation/source/class.xml | 20 +- translation/source/coach.xml | 8 +- translation/source/contact.xml | 26 +- translation/source/emails.xml | 14 +- translation/source/faq.xml | 62 ++-- translation/source/lag.xml | 14 +- translation/source/learn.xml | 2 +- translation/source/patron.xml | 44 +-- translation/source/perfStat.xml | 2 +- translation/source/puzzle.xml | 2 +- translation/source/site.xml | 22 +- translation/source/streamer.xml | 24 +- translation/source/study.xml | 12 +- translation/source/swiss.xml | 2 +- 32 files changed, 715 insertions(+), 396 deletions(-) create mode 100644 conf/base.conf.orig diff --git a/app/ui/OpenGraph.scala b/app/ui/OpenGraph.scala index 9e8ec759f4..2056c49161 100644 --- a/app/ui/OpenGraph.scala +++ b/app/ui/OpenGraph.scala @@ -10,7 +10,7 @@ case class OpenGraph( `type`: String = "website", image: Option[String] = None, twitterImage: Option[String] = None, - siteName: String = "lichess.org", + siteName: String = "DeepCrayonFish", more: List[(String, String)] = Nil ) { diff --git a/app/views/base/bits.scala b/app/views/base/bits.scala index 41b3372f3c..cf4dbd7ee9 100644 --- a/app/views/base/bits.scala +++ b/app/views/base/bits.scala @@ -26,7 +26,7 @@ object bits { ) lazy val stage = a( - href := "https://lichess.org", + href := "https://deepcrayon.fish", style := """ background: #7f1010; color: #fff; @@ -38,15 +38,12 @@ border-top-right-radius: 3px; z-index: 99; """ )( - "This is an empty Lichess preview website, go to lichess.org instead" + "This is an empty preview website, go to deepcrayon.fish instead" ) val connectLinks = div(cls := "connect-links")( - a(href := "https://twitter.com/lichess", targetBlank, noFollow)("Twitter"), - a(href := "https://discord.gg/lichess", targetBlank, noFollow)("Discord"), - a(href := "https://www.youtube.com/channel/UCr6RfQga70yMM9-nuzAYTsA", targetBlank, noFollow)("YouTube"), - a(href := "https://www.twitch.tv/lichessdotorg", targetBlank, noFollow)("Twitch") + a(href := "https://spacecruft.org/deepcrayon/lila", targetBlank, noFollow)("Forked Code") ) def fenAnalysisLink(fen: FEN)(implicit lang: Lang) = diff --git a/app/views/base/layout.scala b/app/views/base/layout.scala index 6c97690679..f2f8e04818 100644 --- a/app/views/base/layout.scala +++ b/app/views/base/layout.scala @@ -15,7 +15,7 @@ object layout { object bits { val doctype = raw("") def htmlTag(implicit lang: Lang) = html(st.lang := lang.code) - val topComment = raw("""""") + val topComment = raw("""""") val charset = raw("""""") val viewport = raw( """""" @@ -52,7 +52,7 @@ object layout { )}" as="font" type="font/woff2" crossorigin>""" } private val manifests = raw( - """""" + """""" ) private val jsLicense = raw("""""") @@ -214,9 +214,9 @@ object layout { metaCsp(csp), metaThemeColor, st.headTitle { - if (ctx.blind) "lichess" - else if (netConfig.isProd) fullTitle | s"$title • lichess.org" - else s"[dev] ${fullTitle | s"$title • lichess.dev"}" + if (ctx.blind) "DeepCrayonFish" + else if (netConfig.isProd) fullTitle | s"$title • DeepCrayonFish" + else s"[dev] ${fullTitle | s"$title • DeepCrayonFish"}" }, cssTag("site"), ctx.pref.is3d option cssTag("board-3d"), @@ -367,8 +367,8 @@ object layout { if (ctx.kid) span(title := trans.kidMode.txt(), cls := "kiddo")(":)") else ctx.isBot option botImage, a(href := "/")( - "lichess", - span(if (netConfig.isProd) ".org" else ".dev") + "DeepCrayon", + span(if (netConfig.isProd) ".Fish" else ".Fish") ) ), ctx.blind option h2("Navigation"), diff --git a/app/views/base/topnav.scala b/app/views/base/topnav.scala index 69dbb11307..fd97abd5f5 100644 --- a/app/views/base/topnav.scala +++ b/app/views/base/topnav.scala @@ -17,75 +17,9 @@ object topnav { def apply()(implicit ctx: Context) = st.nav(id := "topnav", cls := "hover")( st.section( - linkTitle( - "/", - frag( - span(cls := "play")(trans.play()), - span(cls := "home")("lichess.org") - ) - ), + linkTitle(("/player/bots"), ("Bots")), div(role := "group")( - if (ctx.noBot) a(href := "/?any#hook")(trans.createAGame()) - else a(href := "/?any#friend")(trans.playWithAFriend()), - ctx.noBot option frag( - a(href := routes.Tournament.home)(trans.arena.arenaTournaments()), - a(href := routes.Swiss.home)(trans.swiss.swissTournaments()), - a(href := routes.Simul.home)(trans.simultaneousExhibitions()), - ctx.pref.hasDgt option a(href := routes.DgtCtrl.index)("DGT board") - ) - ) - ), - ctx.noBot option st.section( - linkTitle(routes.Puzzle.home.path, trans.puzzles()), - div(role := "group")( - a(href := routes.Puzzle.home)(trans.puzzles()), - a(href := routes.Puzzle.dashboard(30, "home"))(trans.puzzle.puzzleDashboard()), - a(href := routes.Puzzle.streak)("Puzzle Streak"), - a(href := routes.Storm.home)("Puzzle Storm"), - a(href := routes.Racer.home)("Puzzle Racer") - ) - ), - st.section( - linkTitle(routes.Practice.index.path, trans.learnMenu()), - div(role := "group")( - ctx.noBot option frag( - a(href := routes.Learn.index)(trans.chessBasics()), - a(href := routes.Practice.index)(trans.practice()), - a(href := routes.Coordinate.home)(trans.coordinates.coordinates()) - ), - a(href := routes.Study.allDefault(1))(trans.studyMenu()), - ctx.noKid option a(href := routes.Coach.all(1))(trans.coaches()), - canSeeClasMenu option a(href := routes.Clas.index)(trans.clas.lichessClasses()) - ) - ), - st.section( - linkTitle(routes.Tv.index.path, trans.watch()), - div(role := "group")( - a(href := routes.Tv.index)("Lichess TV"), - a(href := routes.Tv.games)(trans.currentGames()), - (ctx.noKid && ctx.noBot) option a(href := routes.Streamer.index())(trans.streamersMenu()), - a(href := routes.RelayTour.index())(trans.broadcast.broadcasts()), - ctx.noBot option a(href := routes.Video.index)(trans.videoLibrary()) - ) - ), - st.section( - linkTitle(routes.User.list.path, trans.community()), - div(role := "group")( - a(href := routes.User.list)(trans.players()), - a(href := routes.Team.home())(trans.team.teams()), - ctx.noKid option a(href := routes.ForumCateg.index)(trans.forum()), - ctx.noKid option a(href := routes.Ublog.community("all"))(trans.blog()), - ctx.me.exists(!_.kid) option a(href := routes.Plan.index)(trans.patron.donate()) - ) - ), - st.section( - linkTitle(routes.UserAnalysis.index.path, trans.tools()), - div(role := "group")( - a(href := routes.UserAnalysis.index)(trans.analysis()), - a(href := s"${routes.UserAnalysis.index}#explorer")(trans.openingExplorer()), - a(href := routes.Editor.index)(trans.boardEditor()), - a(href := routes.Importer.importGame)(trans.importGame()), - a(href := routes.Search.index())(trans.search.advancedSearch()) + a(href := "/games/bot")(trans.currentGames()) ) ) ) diff --git a/app/views/lobby/home.scala b/app/views/lobby/home.scala index b0db21fb96..88595cdbd8 100644 --- a/app/views/lobby/home.scala +++ b/app/views/lobby/home.scala @@ -17,7 +17,7 @@ object home { views.html.base.layout( title = "", fullTitle = Some { - s"lichess.${if (netConfig.isProd) "org" else "dev"} • ${trans.freeOnlineChess.txt()}" + s"DeepCrayon dot Fish • Development Chess / Blockchain Server" }, moreJs = frag( jsModule("lobby"), @@ -43,7 +43,7 @@ object home { .OpenGraph( image = assetUrl("logo/lichess-tile-wide.png").some, twitterImage = assetUrl("logo/lichess-tile.png").some, - title = "The best free, adless Chess server", + title = "Development/Test Blockchain/Chess Server", url = netBaseUrl, description = trans.siteDescription.txt() ) @@ -113,25 +113,6 @@ object home { if (ctx.blind) blindLobby(blindGames) else bits.lobbyApp }, - div(cls := "lobby__side")( - ctx.blind option h2("Highlights"), - ctx.noKid option st.section(cls := "lobby__streams")( - views.html.streamer.bits liveStreams streams, - streams.live.streams.nonEmpty option a(href := routes.Streamer.index(), cls := "more")( - trans.streamersMenu(), - " »" - ) - ), - div(cls := "lobby__spotlights")( - events.map(bits.spotlight), - !ctx.isBot option frag( - lila.tournament.Spotlight.select(tours, ctx.me, 3 - events.size) map { - views.html.tournament.homepageSpotlight(_) - }, - swiss map views.html.swiss.bits.homepageSpotlight, - simuls.filter(isFeaturable) map views.html.simul.bits.homepageSpotlight - ) - ), if (ctx.isAuth) div(cls := "timeline")( ctx.blind option h2("Timeline"), @@ -141,64 +122,6 @@ object home { " »" ) ) - else - div(cls := "about-side")( - ctx.blind option h2("About"), - trans.xIsAFreeYLibreOpenSourceChessServer( - "Lichess", - a(cls := "blue", href := routes.Plan.features)(trans.really.txt()) - ), - " ", - a(href := "/about")(trans.aboutX("Lichess"), "...") - ) - ), - featured map { g => - div(cls := "lobby__tv")( - views.html.game.mini(Pov naturalOrientation g, tv = true) - ) - }, - puzzle map { p => - views.html.puzzle.embed.dailyLink(p)(ctx.lang)(cls := "lobby__puzzle") - }, - ctx.noBot option bits.underboards(tours, simuls, leaderboard, tournamentWinners), - ctx.noKid option div(cls := "lobby__forum lobby__box")( - a(cls := "lobby__box__top", href := routes.ForumCateg.index)( - h2(cls := "title text", dataIcon := "")(trans.latestForumPosts()), - span(cls := "more")(trans.more(), " »") - ), - div(cls := "lobby__box__content")( - views.html.forum.post recent forumRecent - ) - ), - bits.lastPosts(lastPost, ublogPosts), - div(cls := "lobby__support")( - a(href := routes.Plan.index)( - iconTag(patronIconChar), - span(cls := "lobby__support__text")( - strong(trans.patron.donate()), - span(trans.patron.becomePatron()) - ) - ), - a(href := "https://shop.spreadshirt.com/lichess-org")( - iconTag(""), - span(cls := "lobby__support__text")( - strong("Swag Store"), - span(trans.playChessInStyle()) - ) - ) - ), - div(cls := "lobby__about")( - ctx.blind option h2("About"), - a(href := "/about")(trans.aboutX("Lichess")), - a(href := "/faq")(trans.faq.faqAbbreviation()), - a(href := "/contact")(trans.contact.contact()), - a(href := "/mobile")(trans.mobileApp()), - a(href := routes.Page.tos)(trans.termsOfService()), - a(href := "/privacy")(trans.privacy()), - a(href := "/source")(trans.sourceCode()), - a(href := "/ads")("Ads"), - views.html.base.bits.connectLinks - ) ) } } diff --git a/app/views/round/watcher.scala b/app/views/round/watcher.scala index 38021c4235..d30e0c7f0d 100644 --- a/app/views/round/watcher.scala +++ b/app/views/round/watcher.scala @@ -43,8 +43,7 @@ object watcher { embedJsUnsafeLoadThen(s"""LichessRound.boot(${safeJsonValue( Json.obj( "data" -> data, - "i18n" -> jsI18n(pov.game), - "chat" -> chatJson + "i18n" -> jsI18n(pov.game) ) )})""") ), @@ -53,12 +52,10 @@ object watcher { )( main(cls := "round")( st.aside(cls := "round__side")( - bits.side(pov, data, tour, simul, userTv, bookmarked), - chatOption.map(_ => chat.frag) + bits.side(pov, data, tour, simul, userTv, bookmarked) ), bits.roundAppPreload(pov, controls = false), - div(cls := "round__underboard")(bits.crosstable(cross, pov.game)), - div(cls := "round__underchat")(bits underchat pov.game) + div(cls := "round__underboard")(bits.crosstable(cross, pov.game)) ) ) } diff --git a/app/views/tv/games.scala b/app/views/tv/games.scala index 12572aaf1a..a172b4daa1 100644 --- a/app/views/tv/games.scala +++ b/app/views/tv/games.scala @@ -20,9 +20,6 @@ object games { cls := "page-menu tv-games", dataRel := s"$netBaseUrl${routes.Tv.gameChannelReplacement(channel.key, "gameId", Nil)}" )( - st.aside(cls := "page-menu__menu")( - side.channels(channel, champions, "/games") - ), div(cls := "page-menu__content now-playing")( povs map { views.html.game.mini(_) } ) diff --git a/app/views/tv/index.scala b/app/views/tv/index.scala index 98fb2bdb80..f74bc3119b 100644 --- a/app/views/tv/index.scala +++ b/app/views/tv/index.scala @@ -49,17 +49,10 @@ object index { main(cls := "round tv-single")( st.aside(cls := "round__side")( side.meta(pov), - side.channels(channel, champions, "/tv") ), views.html.round.bits.roundAppPreload(pov, controls = false), div(cls := "round__underboard")( - views.html.round.bits.crosstable(cross, pov.game), - div(cls := "tv-history")( - h2(trans.previouslyOnLichessTV()), - div(cls := "now-playing")( - history map { views.html.game.mini(_) } - ) - ) + views.html.round.bits.crosstable(cross, pov.game) ) ) ) diff --git a/app/views/user/bits.scala b/app/views/user/bits.scala index d846b1fbfc..5756517666 100644 --- a/app/views/user/bits.scala +++ b/app/views/user/bits.scala @@ -13,18 +13,6 @@ object bits { def communityMenu(active: String)(implicit ctx: Context) = st.nav(cls := "page-menu__menu subnav")( - a(cls := active.active("leaderboard"), href := routes.User.list)(trans.leaderboard()), - a( - cls := active.active("ratings"), - href := routes.User.ratingDistribution("blitz") - )( - trans.ratingStats() - ), - a(cls := active.active("tournament"), href := routes.Tournament.leaderboard)( - trans.tournamentWinners() - ), - a(cls := active.active("shield"), href := routes.Tournament.shields)("Shields"), - a(cls := active.active("bots"), href := routes.PlayApi.botOnline)("Online bots") ) def miniClosed(u: User)(implicit ctx: Context) = diff --git a/app/views/user/bots.scala b/app/views/user/bots.scala index aa0bfe078e..69665e0c36 100644 --- a/app/views/user/bots.scala +++ b/app/views/user/bots.scala @@ -24,22 +24,9 @@ object bots { main(cls := "page-menu bots")( user.bits.communityMenu("bots"), sorted.partition(_.isVerified) match { - case (featured, all) => + case (featured@_, all) => div(cls := "bots page-menu__content")( - div(cls := "box bots__featured")( - div(cls := "box__top")(h1("Featured bots")), - botTable(featured) - ), div(cls := "box")( - div(cls := "box__top")( - h1("Community bots"), - a( - cls := "bots__about", - href := "https://lichess.org/blog/WvDNticAAMu_mHKP/welcome-lichess-bots" - )( - "About Lichess Bots" - ) - ), botTable(all) ) ) @@ -80,17 +67,6 @@ object bots { )(showPeriod(tvPeriod)) } ) - }, - if (ctx is u) td - else { - td( - a( - dataIcon := "", - cls := List("button button-empty text" -> true), - st.title := trans.challenge.challengeToPlay.txt(), - href := s"${routes.Lobby.home}?user=${u.username}#friend" - )(trans.play()) - ) } ) } diff --git a/app/views/user/show/newPlayer.scala b/app/views/user/show/newPlayer.scala index 1f923e3654..7769ba0997 100644 --- a/app/views/user/show/newPlayer.scala +++ b/app/views/user/show/newPlayer.scala @@ -10,7 +10,7 @@ object newPlayer { def apply(u: User) = div(cls := "new-player")( - h2("Welcome to lichess.org!"), + h2("Bienvenido a DeepCrayonFish!"), p( "This is your profile page.", u.profile.isEmpty option frag( @@ -30,23 +30,7 @@ object newPlayer { ) ), p( - "What now? Here are a few suggestions:" + "Note: This is a development / test server that will be restarted, wiped, deleted, and permanently disabled at any time. Not for production." ), - ul( - li(a(href := routes.Learn.index)("Learn chess rules")), - li(a(href := routes.Puzzle.home)("Improve with chess tactics puzzles")), - li(a(href := s"${routes.Lobby.home}#ai")("Play the artificial intelligence")), - li(a(href := s"${routes.Lobby.home}#hook")("Play opponents from around the world")), - li(a(href := routes.User.list)("Follow your friends on Lichess")), - li(a(href := routes.Tournament.home)("Play in tournaments")), - li( - "Learn from ", - a(href := routes.Study.allDefault(1))("studies"), - " and ", - a(href := routes.Video.index)("videos") - ), - li(a(href := routes.Pref.form("game-display"))("Configure Lichess to your liking")), - li("Explore the site and have fun :)") - ) ) } diff --git a/conf/base.conf b/conf/base.conf index 5f82fb52be..7e4e91e862 100644 --- a/conf/base.conf +++ b/conf/base.conf @@ -13,16 +13,16 @@ mongodb { } } net { - domain = "localhost:9663" - socket.domains = [ "localhost:9664" ] + domain = "deepcrayon.fish" + socket.domains = [ "deepcrayon.fish" ] asset.domain = ${net.domain} - asset.base_url = "http://"${net.asset.domain} + asset.base_url = "https://"${net.asset.domain} asset.minified = false - base_url = "http://"${net.domain} - email = "" + base_url = "https://"${net.domain} + email = "y@deepcrayon.fish" crawlable = false ratelimit = true - prodDomain = "lichess.org" + prodDomain = "deepcrayon.fish" http.log = true stage.banner = false } @@ -40,7 +40,7 @@ play { secret.key = "CiebwjgIM9cHQ;I?Xk:sfqDJ;BhIe:jsL?r=?IPF[saf>s^r0]?0grUq4>q?5mP^" # public (lila does not rely on cookie signing) } ws { - useragent = "lichess.org" + useragent = "deepcrayon.fish" compressionEnabled = true timeout { connection = 5 seconds @@ -92,7 +92,7 @@ app { api { token = secret influx_event = { - endpoint = "http://monitor.lichess.ovh:8086/write?db=events" + endpoint = "http://127.0.0.1:8086/write?db=events" env = "dev" } } @@ -138,7 +138,7 @@ puzzle { path = puzzle2_path } } -storm.secret = "somethingElseInProd" +storm.secret = "ph7odAw3odJalni7ewI24pNa" coordinate { collection { score = coordinate_score @@ -155,11 +155,11 @@ video { view = video_view } sheet { - url = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSSaZYC5lUe0o5CVydmi6imP7QIrIHB1lKGL7xlke68IjlfslOdwRr3Xs_69cwmZxn9Tkuea3MGOHXx/pub?gid=0&single=true&output=csv" + url = "https://127.0.0.1/spreadsheets/d/e/2PACX-1vSSaZYC5lUe0o5CVydmi6imP7QIrIHB1lKGL7xlke68IjlfslOdwRr3Xs_69cwmZxn9Tkuea3MGOHXx/pub?gid=0&single=true&output=csv" delay = 6 hours } youtube { - url = "https://www.googleapis.com/youtube/v3/videos" + url = "https://127.0.0.1/youtube/v3/videos" api_key = "" max = 50 delay = 20 minutes @@ -202,31 +202,31 @@ security { } email_confirm { enabled = false - secret = "???" + secret = "vimm5Eab1ud9Ho3d6ouh29owAp" cookie = "email_confirm" } email_change { - secret = "???" + secret = "K2ri74bogyeipEatsh6Ir1" } login_token { - secret = "???" + secret = "Slese3fevOadTy6nvac3G" } tor { - enabled = true - provider_url = "https://check.torproject.org/torbulkexitlist" + enabled = false + provider_url = "https://127.0.0.1/torbulkexitlist" refresh_delay = 1 hour } disposable_email { enabled = false - provider_url = "https://raw.githubusercontent.com/ornicar/disposable/publish/domains.txt" + provider_url = "https://127.0.0.1/ornicar/disposable/publish/domains.txt" refresh_delay = 10 minutes } dns_api { - url = "https://cloudflare-dns.com/dns-query" - timeout = 5 seconds + url = "https://127.0.0.1/dns-query" + timeout = 1 seconds } check_mail_api { - url = "https://mailcheck.p.rapidapi.com/" + url = "https://127.0.0.1/" key = "" } ip2proxy { @@ -254,7 +254,7 @@ oauth { } } hcaptcha { - endpoint = "https://hcaptcha.com/siteverify" + endpoint = "https://127.0.0.1/siteverify" public_key = "f91a151d-73e5-4a95-9d4e-74bfa19bec9d" private_key = "" enabled = false @@ -273,10 +273,10 @@ push { } web { vapid_public_key = "BGr5CL0QlEYa7qW7HLqe7DFkCeTsYMLsi1Db+5Vwt1QBIs6+WxN8066AjtP8S9u+w+CbleE8xWY+qQaNEMs7sAs=" - url = "http://push.lichess.ovh:9054" + url = "http://127.0.0.1:9054" } firebase { - url = "https://fcm.googleapis.com/v1/projects/lichess-1366/messages:send" + url = "https://127.0.0.1/v1/projects/lichess-1366/messages:send" json = "" } } @@ -450,7 +450,7 @@ zulip { } plan { stripe { - endpoint="https://api.stripe.com/v1" + endpoint="https://127.0.0.1/v1" keys { public="" secret="" diff --git a/conf/base.conf.orig b/conf/base.conf.orig new file mode 100644 index 0000000000..5f82fb52be --- /dev/null +++ b/conf/base.conf.orig @@ -0,0 +1,530 @@ +# The "secret" keys in here are for development purposes. +# None of them have ever been used in production. +# This also applies to former versions of this file, and to all other config files. + +http.port = 9663 +https.port = disabled +mongodb { + uri = "mongodb://127.0.0.1:27017?appName=lila" + mongo-async-driver = ${akka} + yolo { + uri = ${mongodb.uri} + # uri = "mongodb://127.0.0.1:27010?appName=lila&connectTimeoutMS=800&rm.maxNonQueryableHeartbeats=9999" + } +} +net { + domain = "localhost:9663" + socket.domains = [ "localhost:9664" ] + asset.domain = ${net.domain} + asset.base_url = "http://"${net.asset.domain} + asset.minified = false + base_url = "http://"${net.domain} + email = "" + crawlable = false + ratelimit = true + prodDomain = "lichess.org" + http.log = true + stage.banner = false +} +play { + application.loader = "lila.app.AppLoader" + http { + requestHandler = "play.api.http.DefaultHttpRequestHandler" + errorHandler = provided + filters = provided + parser.maxMemoryBuffer=512KiB + session { + cookieName = "lila2" + maxAge = 3650 days + } + secret.key = "CiebwjgIM9cHQ;I?Xk:sfqDJ;BhIe:jsL?r=?IPF[saf>s^r0]?0grUq4>q?5mP^" # public (lila does not rely on cookie signing) + } + ws { + useragent = "lichess.org" + compressionEnabled = true + timeout { + connection = 5 seconds + idle = 5 minutes + request = 5 minutes + } + } + server { + # The maximum length of the HTTP headers. The most common effect of this is a restriction in cookie length, including + # number of cookies and size of cookie values. + max-header-size = 4096 # 8192 + netty { + transport = "native" + # The maximum length of the initial line. This effectively restricts the maximum length of a URL that the server will + # accept, the initial line consists of the method (3-7 characters), the URL, and the HTTP version (8 characters), + # including typical whitespace, the maximum URL length will be this number - 18. + maxInitialLineLength = 2048 # 4096 + } + } + akka { + actor-system = lila + } +} +akka { + loggers = ["akka.event.slf4j.Slf4jLogger"] + loglevel = INFO + # stdout-loglevel = INFO + log-dead-letters-during-shutdown = off + akka.log-dead-letters = off + coordinated-shutdown { + phases { + actor-system-terminate { + timeout = 5s + } + } + } + blocking-smtp-dispatcher { + executor = "thread-pool-executor" + thread-pool-executor { + core-pool-size-min = 8 + core-pool-size-max = 64 + } + } +} +app { + renderer.name = "renderer" + stage = false +} +api { + token = secret + influx_event = { + endpoint = "http://monitor.lichess.ovh:8086/write?db=events" + env = "dev" + } +} +accessibility { + blind { + cookie { + name = "mBzamRgfXgRBSnXB" + salt = "WWcTbz5xxaHU4d96" + } + } +} +pagerDuty { + serviceId = "" + apiKey = "" +} +prismic { + api_url = "https://lichess.cdn.prismic.io/api" +} +blog { + prismic = ${prismic} + collection = blog + last_post_cache.ttl = 5 minutes +} +chat { + collection { + chat = chat + timeout = chat_timeout + } + actor.name = chat + timeout { + duration = 15 minutes + check_every = 15 seconds + } +} +study.mongodb.uri = ${mongodb.uri} +puzzle { + mongodb { + uri = ${mongodb.uri} + } + collection { + puzzle = puzzle2_puzzle + round = puzzle2_round + path = puzzle2_path + } +} +storm.secret = "somethingElseInProd" +coordinate { + collection { + score = coordinate_score + } +} +event { + collection { + event = event + } +} +video { + collection { + video = video + view = video_view + } + sheet { + url = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSSaZYC5lUe0o5CVydmi6imP7QIrIHB1lKGL7xlke68IjlfslOdwRr3Xs_69cwmZxn9Tkuea3MGOHXx/pub?gid=0&single=true&output=csv" + delay = 6 hours + } + youtube { + url = "https://www.googleapis.com/youtube/v3/videos" + api_key = "" + max = 50 + delay = 20 minutes + } +} +search { + enabled = false + writeable = true + endpoint = "http://localhost:9673" +} +teamSearch { + index = team + actor.name = team-search +} +relation { + collection { + relation = relation + } + limit { + follow = 400 + block = 500 + } +} +bookmark { + collection.bookmark = bookmark + actor.name = bookmark +} +geoip { + file = "" + cache_ttl = 20 minutes +} +security { + collection.security = security + collection.print_ban = print_ban + collection.firewall = firewall + flood.duration = 60 seconds + geoip = ${geoip} + password_reset { + secret = "???" + } + email_confirm { + enabled = false + secret = "???" + cookie = "email_confirm" + } + email_change { + secret = "???" + } + login_token { + secret = "???" + } + tor { + enabled = true + provider_url = "https://check.torproject.org/torbulkexitlist" + refresh_delay = 1 hour + } + disposable_email { + enabled = false + provider_url = "https://raw.githubusercontent.com/ornicar/disposable/publish/domains.txt" + refresh_delay = 10 minutes + } + dns_api { + url = "https://cloudflare-dns.com/dns-query" + timeout = 5 seconds + } + check_mail_api { + url = "https://mailcheck.p.rapidapi.com/" + key = "" + } + ip2proxy { + enabled = false + url = "http://ip2proxy.lichess.ovh:1929" + } + hcaptcha = ${hcaptcha} + lame_name_check = true +} +mailer { + primary { + mock = true + host = "localhost" + port = 587 + tls = true + user = "login@"${net.domain} + password = "???" + sender = ${net.domain}" " + } + secondary = ${mailer.primary} +} +oauth { + mongodb { + uri = ${mongodb.uri} + } +} +hcaptcha { + endpoint = "https://hcaptcha.com/siteverify" + public_key = "f91a151d-73e5-4a95-9d4e-74bfa19bec9d" + private_key = "" + enabled = false +} +shutup { + collection.shutup = shutup + actor.name = shutup +} +playban { + collection.playban = playban +} +push { + collection { + device = push_device + subscription = push_subscription + } + web { + vapid_public_key = "BGr5CL0QlEYa7qW7HLqe7DFkCeTsYMLsi1Db+5Vwt1QBIs6+WxN8066AjtP8S9u+w+CbleE8xWY+qQaNEMs7sAs=" + url = "http://push.lichess.ovh:9054" + } + firebase { + url = "https://fcm.googleapis.com/v1/projects/lichess-1366/messages:send" + json = "" + } +} +report { + collection.report = report2 + actor.name = report + score.threshold = 50 +} +i18n { + web_path.relative = public/trans +} +detectlanguage.api { + url = "https://ws.detectlanguage.com/0.2/detect" + key = "" +} +timeline { + collection { + unsub = timeline_unsub + entry = timeline_entry + } + user { + display_max = 10 + actor.name = user-timeline + } +} +game { + collection { + game = game5 + crosstable = crosstable2 + matchup = matchup + } + captcher { + name = captcher + duration = 15 seconds + } + gifUrl = "http://gif.lichess.ovh:6175" +} +streamer { + collection.streamer = "streamer" + paginator.max_per_page = 12 + streaming { + twitch { + client_id = "" + secret = "" + } + google.api_key = "" + keyword = "lichess.org" + } +} +explorer { + endpoint = "https://explorer.lichess.ovh" + internal_endpoint = "http://explorer.lichess.ovh" + tablebase = { + endpoint = "https://tablebase.lichess.ovh" + } +} +gameSearch { + index = game + paginator.max_per_page = 12 + actor.name = game-search +} +round { + collection { + note = game_note + forecast = forecast + alarm = round_alarm + } +} +tournament { + collection { + tournament = tournament2 + player = tournament_player + pairing = tournament_pairing + leaderboard = tournament_leaderboard + } + history.message.ttl = 20 seconds + sri.timeout = 7 seconds # small to avoid missed events + api_actor.name = tournament-api + pairing.delay = 3.1 seconds +} +swiss { + bbpairing = "/path/to/bbpPairings.exe" +} +simul { + collection.simul = simul + feature.views = 10000 # max frontpage views of simul per host per day +} +forum { + topic.max_per_page = 10 + post.max_per_page = 10 +} +forumSearch { + index = forum + paginator.max_per_page = 10 + actor.name = forum-search +} +message { + thread.max_per_page = 30 + collection.thread = m_thread +} +coach { + collection.coach = coach + collection.review = coach_review +} +memo { + collection { + cache = cache + config = flag + } + picfit { + collection = picfit_image + secretKey = "qix8rozsRE6Rsw5uvBjwJUCFfQhyaKbR" # request signature + endpointGet = "http://127.0.0.1:3001" + endpointPost = "http://127.0.0.1:3001" + } +} +redis { + uri = "redis://127.0.0.1" + # uri = "redis-socket:///var/run/redis/redis-server.sock" +} +socket { + redis = ${redis} +} +setup.max_playing = 200 +evalCache { + collection.evalCache = eval_cache +} +user { + online.ttl = 7 seconds + collection { + user = user4 + note = note + trophy = trophy + trophyKind = trophyKind + ranking = ranking + } +} +fishnet { + redis = ${redis} + collection { + analysis = fishnet_analysis + client = fishnet_client + } + offline_mode = true # any client can provide moves and analysis + actor.name = fishnet + analysis.nodes = 1500000 # sf 15 dev + move.plies = 300 + client_min_version = "2.1.3" +} +insight { + mongodb { + uri = "mongodb://127.0.0.1:27017/lichess-insight?appName=lila" + } +} +notify { + collection.notify = notify + actor.name = notify +} +learn { + collection.progress = learn_progress +} +simulation { + enabled = false + players = 300 + watchers = 200 +} +zulip { + domain = "" + user = "" + pass = "" +} +plan { + stripe { + endpoint="https://api.stripe.com/v1" + keys { + public="" + secret="" + } + products { + monthly = "prod_JZswNwe0eLPJIU" + onetime = "prod_JZuNrVAZSUieAd" + gift = "prod_JboaVzGqSWzVGI" + } + } + paypal { + ipn_key="" + } + collection { + patron = plan_patron + charge = plan_charge + } + # https://openexchangerates.org + oer.appId = "" +} +hub { + actor { + game { + search = ${gameSearch.actor.name} + } + renderer = ${app.renderer.name} + captcher = ${game.captcher.name} + forum { + search = ${forumSearch.actor.name} + } + team.search = ${teamSearch.actor.name} + fishnet = ${fishnet.actor.name} + tournament.api = ${tournament.api_actor.name} + timeline { + user = ${timeline.user.actor.name} + } + bookmark = ${bookmark.actor.name} + report = ${report.actor.name} + shutup = ${shutup.actor.name} + chat = ${chat.actor.name} + notify = ${notify.actor.name} + } +} +kamon { + enabled = false + environment.service = "lila" + metric.tick-interval = 60 seconds + influxdb { + hostname = "" + port = 8086 + database = "kamon" + percentiles = [50.0, 75.0, 90.0, 95.0, 99.0, 99.9] + protocol = "http" + post-empty-distributions = false + precision = "s" + environment-tags { + include-service = no + include-host = no + include-instance = yes + } + } + prometheus { + buckets { + default-buckets = [ 10, 100, 1000, 10000, 100000 ] + time-buckets = [ 0.01, 0.05, 0.1, 0.5, 1, 5, 10 ] + information-buckets = [ 512, 2048, 16384, 524288, ] + } + } + modules { + jvm-metrics.enabled = yes + process-metrics.enabled = yes + host-metrics.enabled = no + prometheus-reporter.enabled = yes + } +} +# Don't let play manage its own PID file +pidfile.path = "/dev/null" diff --git a/modules/pref/src/main/PieceSet.scala b/modules/pref/src/main/PieceSet.scala index ca8ca851ba..658dd9e16a 100644 --- a/modules/pref/src/main/PieceSet.scala +++ b/modules/pref/src/main/PieceSet.scala @@ -24,12 +24,12 @@ sealed trait PieceSetObject { object PieceSet extends PieceSetObject { - val default = new PieceSet("cburnett") + val default = new PieceSet("alpha") val all = List( default.name, "merida", - "alpha", + "cburnett", "pirouetti", "chessnut", "chess7", diff --git a/modules/pref/src/main/Pref.scala b/modules/pref/src/main/Pref.scala index 108f709ead..907c9f924e 100644 --- a/modules/pref/src/main/Pref.scala +++ b/modules/pref/src/main/Pref.scala @@ -417,7 +417,7 @@ object Pref { lazy val default = Pref( _id = "", - bg = Bg.LIGHT, + bg = Bg.DARKBOARD, bgImg = none, is3d = false, theme = Theme.default.name, @@ -432,7 +432,7 @@ object Pref { moretime = Moretime.ALWAYS, clockBar = true, clockSound = true, - premove = true, + premove = false, animation = Animation.NORMAL, captured = true, follow = true, diff --git a/translation/dest/activity/en-US.xml b/translation/dest/activity/en-US.xml index cc30de4621..7fe6f78006 100644 --- a/translation/dest/activity/en-US.xml +++ b/translation/dest/activity/en-US.xml @@ -3,8 +3,8 @@ Activity Hosted a live stream - Supported lichess.org for %1$s month as a %2$s - Supported lichess.org for %1$s months as a %2$s + Supported deepcrayon.fish for %1$s month as a %2$s + Supported deepcrayon.fish for %1$s months as a %2$s Practiced %1$s position on %2$s @@ -67,7 +67,7 @@ Competed in %s swiss tournaments Ranked #%1$s in %2$s - Signed up to lichess.org + Signed up to deepcrayon.fish Joined %s team Joined %s teams diff --git a/translation/source/activity.xml b/translation/source/activity.xml index afcd0fdd1d..5abde7f6e1 100644 --- a/translation/source/activity.xml +++ b/translation/source/activity.xml @@ -3,8 +3,8 @@ Activity Hosted a live stream - Supported lichess.org for %1$s month as a %2$s - Supported lichess.org for %1$s months as a %2$s + Supported deepcrayon.fish for %1$s month as a %2$s + Supported deepcrayon.fish for %1$s months as a %2$s Practised %1$s position on %2$s @@ -67,7 +67,7 @@ Competed in %s swiss tournaments Ranked #%1$s in %2$s - Signed up to lichess.org + Signed up to deepcrayon.fish Joined %s team Joined %s teams diff --git a/translation/source/broadcast.xml b/translation/source/broadcast.xml index e8cfb9761d..c5805e76e0 100644 --- a/translation/source/broadcast.xml +++ b/translation/source/broadcast.xml @@ -14,8 +14,8 @@ Full tournament description Optional long description of the tournament. %1$s is available. Length must be less than %2$s characters. Source URL, or game IDs - URL that Lichess will check to get PGN updates. It must be publicly accessible from the Internet. - Alternatively, you can enter up to 64 Lichess game IDs, separated by spaces. + URL that DeepcrayonFish will check to get PGN updates. It must be publicly accessible from the Internet. + Alternatively, you can enter up to 64 DeepcrayonFish game IDs, separated by spaces. Start date in your own timezone Optional, if you know when the event starts Credit the source diff --git a/translation/source/class.xml b/translation/source/class.xml index fb7477fc7f..9c6c4c9333 100644 --- a/translation/source/class.xml +++ b/translation/source/class.xml @@ -1,13 +1,13 @@ Classes - Teach classes of chess students with the Lichess Classes tool suite. + Teach classes of chess students with the DeepcrayonFish Classes tool suite. Features Quickly generate safe usernames and passwords for students Track student progress in games and puzzles Message all students about new class material 100% free for all, forever, with no ads or trackers - Apply to be a Lichess Teacher + Apply to be a DeepcrayonFish Teacher No classes yet. Teachers: %s New class @@ -23,7 +23,7 @@ Class description Visible by both teachers and students of the class Teachers of the class - Add Lichess usernames to invite them as teachers. One per line. + Add DeepcrayonFish usernames to invite them as teachers. One per line. Reset password Make sure to copy or write down the password now. You won’t be able to see it again! Password: %s @@ -32,22 +32,22 @@ Real name Private. Will never be shown outside the class. Helps remember who the student is. Add student - Lichess profile %1$s created for %2$s. + DeepcrayonFish profile %1$s created for %2$s. Student: %1$s Username: %2$s Password: %3$s - Invite a Lichess account - If the student already has a Lichess account, you can invite them to the class. - They will receive a message on Lichess with a link to join the class. + Invite a DeepcrayonFish account + If the student already has a DeepcrayonFish account, you can invite them to the class. + They will receive a message on DeepcrayonFish with a link to join the class. Important: only invite students you know, and who actively want to join the class. Never send unsolicited invites to arbitrary players. - Create a new Lichess account - If the student doesn't have a Lichess account yet, you can create one for them here. + Create a new DeepcrayonFish account + If the student doesn't have a DeepcrayonFish account yet, you can create one for them here. No email address is required. A password will be generated, and you will have to transmit it to the student, so they can log in. Important: a student must not have multiple accounts. If they already have one, use the invite form instead. Only create accounts for real students. Do not use this to make multiple accounts for yourself. You would get banned. - Lichess username + DeepcrayonFish username Generate a new username Welcome to your class: %s. Here is the link to access the class. diff --git a/translation/source/coach.xml b/translation/source/coach.xml index 4016cd135a..16fce99061 100644 --- a/translation/source/coach.xml +++ b/translation/source/coach.xml @@ -1,9 +1,9 @@ - Lichess coaches - Lichess coach + DeepcrayonFish coaches + DeepcrayonFish coach Are you a great chess coach with a %s? - NM or FIDE title + NM or FIDE title Confirm your title here and we will review your application. Send us an email at %s and we will review your application. Location @@ -14,7 +14,7 @@ Accepting students Not accepting students at the moment %s coaches chess students - View %s Lichess profile + View %s DeepcrayonFish profile Send a private message About me Playing experience diff --git a/translation/source/contact.xml b/translation/source/contact.xml index e082b38bfd..7e6f12fabe 100644 --- a/translation/source/contact.xml +++ b/translation/source/contact.xml @@ -1,7 +1,7 @@ Contact - Contact Lichess + Contact DeepcrayonFish What can we help you with? Visit this page to solve the issue I can't log in @@ -12,8 +12,8 @@ I lost access to my two-factor authentication codes Complete a password reset to remove your second factor I need account support - I want my title displayed on Lichess - To show your title on your Lichess profile, and participate in Titled Arenas, visit the title confirmation page + I want my title displayed on DeepcrayonFish + To show your title on your DeepcrayonFish profile, and participate in Titled Arenas, visit the title confirmation page I want to close my account You can close your account on this page Do not ask us by email to close an account, we won't do it. @@ -34,10 +34,10 @@ Please do not send direct messages to moderators. Only reporting players through the report form is effective. I want to report a bug - In the Lichess Feedback section of the forum - As a Lichess website issue on GitHub - As a Lichess mobile app issue on GitHub - In the Lichess Discord server + In the DeepcrayonFish Feedback section of the forum + As a DeepcrayonFish website issue on GitHub + As a DeepcrayonFish mobile app issue on GitHub + In the DeepcrayonFish Discord server Please describe what the bug looks like, what you expected to happen instead, and the steps to reproduce the bug. Illegal pawn capture It is called "en passant" and is one of the rules of chess. @@ -64,13 +64,13 @@ Do not deny having cheated. If you want to be allowed to create a new account, just admit to what you did, and show that you understood that it was a mistake. Other restriction Collaboration, legal, commercial - Monetising Lichess - Buying Lichess - Authorisation to use Lichess - You are welcome to use Lichess for your activity, even commercial. - You can show it in your videos, and you can print screenshots of Lichess in your books. + Monetising DeepcrayonFish + Buying DeepcrayonFish + Authorisation to use DeepcrayonFish + You are welcome to use DeepcrayonFish for your activity, even commercial. + You can show it in your videos, and you can print screenshots of DeepcrayonFish in your books. Credit is appreciated but not required. None of the above Send us an email at %s. - Please explain your request clearly and thoroughly. State your Lichess username, and any information that could help us help you. + Please explain your request clearly and thoroughly. State your DeepcrayonFish username, and any information that could help us help you. diff --git a/translation/source/emails.xml b/translation/source/emails.xml index 3c3d3713ec..ef1635d1f3 100644 --- a/translation/source/emails.xml +++ b/translation/source/emails.xml @@ -1,21 +1,21 @@ - Confirm your lichess.org account, %s - Click the link to enable your Lichess account: - If you did not register with Lichess you can safely ignore this message. - Reset your lichess.org password, %s + Confirm your deepcrayon.fish account, %s + Click the link to enable your DeepcrayonFish account: + If you did not register with DeepcrayonFish you can safely ignore this message. + Reset your deepcrayon.fish password, %s We received a request to reset the password for your account. If you made this request, click the link below. If not, you can ignore this email. Confirm new email address, %s You have requested to change your email address. To confirm you have access to this email, please click the link below: - Welcome to lichess.org, %s - You have successfully created your account on https://lichess.org. + Welcome to deepcrayon.fish, %s + You have successfully created your account on https://deepcrayon.fish. Here is your profile page: %1$s. You can personalise it on %2$s. Have fun, and may your pieces always find their way to your opponent's king! - Log in to lichess.org, %s + Log in to deepcrayon.fish, %s (Clicking not working? Try pasting it into your browser!) This is a service email related to your use of %s. To contact us, please use %s. diff --git a/translation/source/faq.xml b/translation/source/faq.xml index c171c8f0ae..71fb38eb92 100644 --- a/translation/source/faq.xml +++ b/translation/source/faq.xml @@ -2,20 +2,20 @@ FAQ Frequently Asked Questions - Why is Lichess called Lichess? - Lichess is a combination of live/light/libre and chess. It is pronounced %1$s. + Why is DeepcrayonFish called DeepcrayonFish? + DeepcrayonFish is a combination of live/light/libre and chess. It is pronounced %1$s. lee-chess Hear it pronounced by a specialist. - Live, because games are played and watched in real-time 24/7; light and libre for the fact that Lichess is open-source and unencumbered by proprietary junk that plagues other websites. - Similarly, the source code for Lichess, %1$s, stands for li[chess in sca]la, seeing as the bulk of Lichess is written in %2$s, an intuitive programming language. - How can I contribute to Lichess? - Lichess is powered by donations from patrons and the efforts of a team of volunteers. - You can find out more about %1$s (including a %2$s). If you want to help Lichess by volunteering your time and skills, there are many %3$s. + Live, because games are played and watched in real-time 24/7; light and libre for the fact that DeepcrayonFish is open-source and unencumbered by proprietary junk that plagues other websites. + Similarly, the source code for DeepcrayonFish, %1$s, stands for li[chess in sca]la, seeing as the bulk of DeepcrayonFish is written in %2$s, an intuitive programming language. + How can I contribute to DeepcrayonFish? + DeepcrayonFish is powered by donations from patrons and the efforts of a team of volunteers. + You can find out more about %1$s (including a %2$s). If you want to help DeepcrayonFish by volunteering your time and skills, there are many %3$s. being a patron breakdown of our costs other ways to help - Are there websites based on Lichess? - Yes. Lichess has indeed inspired other open-source sites that use our %1$s, %2$s, or %3$s. + Are there websites based on DeepcrayonFish? + Yes. DeepcrayonFish has indeed inspired other open-source sites that use our %1$s, %2$s, or %3$s. Fair Play When am I eligible for the automatic rating refund from cheaters? One minute after a player is marked, their 40 latest rated games in the last 3 days are taken. If you are their opponent in those games, you lost rating (because of a loss or a draw), and your rating was not provisional, you get a rating refund. The refund is capped based on your peak rating and your rating progress after the game. @@ -25,16 +25,16 @@ How can I become a moderator? It’s not possible to apply to become a moderator. If we see someone who we think would be good as a moderator, we will contact them directly. Is correspondence different from normal chess? - On Lichess, the main difference in rules for correspondence chess is that an opening book is allowed. The use of engines is still prohibited and will result in being flagged for engine assistance. Although ICCF allows engine use in correspondence, Lichess does not. + On DeepcrayonFish, the main difference in rules for correspondence chess is that an opening book is allowed. The use of engines is still prohibited and will result in being flagged for engine assistance. Although ICCF allows engine use in correspondence, DeepcrayonFish does not. Gameplay How are Bullet, Blitz and other time controls decided? - Lichess time controls are based on estimated game duration = %1$s. + DeepcrayonFish time controls are based on estimated game duration = %1$s. For instance, the estimated duration of a 5+3 game is 5 × 60 + 40 × 3 = 420 seconds. (clock initial time in seconds) + 40 × (clock increment) ≤ %1$ss = %2$s ≥ %1$ss = %2$s - What variants can I play on Lichess? - Lichess supports standard chess and %1$s. + What variants can I play on DeepcrayonFish? + DeepcrayonFish supports standard chess and %1$s. 8 chess variants What is the average centipawn loss (ACPL)? The centipawn is the unit of measure used in chess as representation of the advantage. A centipawn is equal to 1/100th of a pawn. Therefore 100 centipawns = 1 pawn. These values play no formal role in the game but are useful to players, and essential in computer chess, for evaluating positions. @@ -43,7 +43,7 @@ The top computer move will lose zero centipawns, but lesser moves will result in This value can be used as an indicator of the quality of play. The fewer centipawns one loses per move, the stronger the play. -The computer analysis on Lichess is powered by Stockfish. +The computer analysis on DeepcrayonFish is powered by Stockfish. Losing on time, drawing and insufficient material In the event of one player running out of time, that player will usually lose the game. However, the game is drawn if the position is such that the opponent cannot checkmate the player's king by any possible series of legal moves (%1$s). @@ -60,31 +60,31 @@ It is described in section 3.7 (d) of the %2$s: See the %3$s on this move for some practice with it. good introduction - Lichess training + DeepcrayonFish training Threefold repetition - If a position occurs three times, players can claim a draw by %1$s. Lichess implements the official FIDE rules, as described in Article 9.2 (d) of the %2$s. + If a position occurs three times, players can claim a draw by %1$s. DeepcrayonFish implements the official FIDE rules, as described in Article 9.2 (d) of the %2$s. threefold repetition We did not repeat moves. Why was the game still drawn by repetition? Threefold repetition is about repeated %1$s, not moves. Repetition does not have to occur consecutively. positions We repeated a position three times. Why was the game not drawn? - Repetition needs to be claimed by one of the players. You can do so by pressing the button that is shown, or by offering a draw before your final repeating move, it won't matter if your opponent rejects the draw offer, the threefold repetition draw will be claimed anyway. You can also %1$s Lichess to automatically claim repetitions for you. Additionally, fivefold repetition always immediately ends the game. + Repetition needs to be claimed by one of the players. You can do so by pressing the button that is shown, or by offering a draw before your final repeating move, it won't matter if your opponent rejects the draw offer, the threefold repetition draw will be claimed anyway. You can also %1$s DeepcrayonFish to automatically claim repetitions for you. Additionally, fivefold repetition always immediately ends the game. configure Accounts - What titles are there on Lichess? - Lichess recognises all FIDE titles gained from OTB (over the board) play, as well as %1$s. Here is a list of FIDE titles: + What titles are there on DeepcrayonFish? + DeepcrayonFish recognises all FIDE titles gained from OTB (over the board) play, as well as %1$s. Here is a list of FIDE titles: If you have an OTB title, you can apply to have this displayed on your account by completing the %1$s, including a clear image of an identifying document/card and a selfie of you holding the document/card. -Verifying as a titled player on Lichess gives access to play in the Titled Arena events. +Verifying as a titled player on DeepcrayonFish gives access to play in the Titled Arena events. Finally there is an honorary %2$s title. many national master titles verification form - Can I get the Lichess Master (LM) title? + Can I get the DeepcrayonFish Master (LM) title? No. - This honorific title is unofficial and only exists on Lichess. + This honorific title is unofficial and only exists on DeepcrayonFish. -We rarely award it to highly notable players who are good citizens of Lichess, at our discretion. You don't get the LM title, the LM title gets to you. If you qualify, you will get a message from us regarding it and the choice to accept or decline. +We rarely award it to highly notable players who are good citizens of DeepcrayonFish, at our discretion. You don't get the LM title, the LM title gets to you. If you qualify, you will get a message from us regarding it and the choice to accept or decline. Do not ask for the LM title. What can my username be? @@ -93,13 +93,13 @@ Do not ask for the LM title. Can I change my username? No, usernames cannot be changed for technical and practical reasons. Usernames are materialized in too many places: databases, exports, logs, and people's minds. You can adjust the capitalization once. Unique trophies - That trophy is unique in the history of Lichess, nobody other than %1$s will ever have it. + That trophy is unique in the history of DeepcrayonFish, nobody other than %1$s will ever have it. To get it, hiimgosu challenged himself to berserk and win all games of %s. an 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 - What rating system does Lichess use? - Ratings are calculated using the Glicko-2 rating method developed by Mark Glickman. This is a very popular rating method, and is used by a significant number of chess organisations (FIDE being a notable counter-example, as they still use the dated Elo rating system). + DeepcrayonFish ratings + What rating system does DeepcrayonFish use? + Ratings are calculated using the Glicko-2 rating method developed by Mark Glickman. This is a very popular rating method, and is used by a significant number of chess organisations (FIDE being a notable counter-example, as they still use the dated Elo rating system). Fundamentally, Glicko ratings use "confidence intervals" when calculating and representing your rating. When you first start using the site, your rating starts at 1500 ± 1000. The 1500 represents your rating, and the 1000 represents the confidence interval. @@ -128,13 +128,13 @@ It's best to think of ratings as "relative" figures (as opposed to "absolute" fi Enable Zen-mode in the %1$s, or by pressing %2$s during a game. display preferences I lost a game due to lag/disconnection. Can I get my rating points back? - Unfortunately, we cannot give back rating points for games lost due to lag or disconnection, regardless of whether the problem was at your end or our end. The latter is very rare though. Also note that when Lichess restarts and you lose on time because of that, we abort the game to prevent an unfair loss. + Unfortunately, we cannot give back rating points for games lost due to lag or disconnection, regardless of whether the problem was at your end or our end. The latter is very rare though. Also note that when DeepcrayonFish restarts and you lose on time because of that, we abort the game to prevent an unfair loss. How to... Enable or disable notification popups? View site information popup - Lichess can optionally send popup notifications, for example when it is your turn or you received a private message. + DeepcrayonFish can optionally send popup notifications, for example when it is your turn or you received a private message. -Click the lock icon next to the lichess.org address in the URL bar of your browser. +Click the lock icon next to the deepcrayon.fish address in the URL bar of your browser. -Then select whether to allow or block notifications from Lichess. +Then select whether to allow or block notifications from DeepcrayonFish. diff --git a/translation/source/lag.xml b/translation/source/lag.xml index 5644f18637..b727defbff 100644 --- a/translation/source/lag.xml +++ b/translation/source/lag.xml @@ -1,16 +1,16 @@ - Is Lichess lagging? + Is DeepcrayonFish lagging? Measurements in progress... No. And your network is good. - No. And your network is bad. + No. And your network is bad. Yes. It will be fixed soon! And now, the long answer! Game lag is composed of two unrelated values (lower is better): - Lichess server latency - The time it takes to process a move on the server. It's the same for everybody, and only depends on the servers load. The more players and the higher it gets, but Lichess developers do their best to keep it low. It rarely exceeds 10ms. - Network between Lichess and you - The time it takes to send a move from your computer to Lichess server, and get the response back. It's specific to your distance to Lichess (France), and to the quality of your Internet connection. Lichess developers cannot fix your wifi or make light go faster. + DeepcrayonFish server latency + The time it takes to process a move on the server. It's the same for everybody, and only depends on the servers load. The more players and the higher it gets, but DeepcrayonFish developers do their best to keep it low. It rarely exceeds 10ms. + Network between DeepcrayonFish and you + The time it takes to send a move from your computer to DeepcrayonFish server, and get the response back. It's specific to your distance to DeepcrayonFish (France), and to the quality of your Internet connection. DeepcrayonFish developers cannot fix your wifi or make light go faster. You can find both these values at any time, by clicking your username in the top bar. Lag compensation - Lichess compensates network lag. This includes sustained lag and occasional lag spikes. There are limits and heuristics based on time control and the compensated lag so far, so that the result should feel reasonable for both players. As a result, having a higher network lag than your opponent is not a handicap! + DeepcrayonFish compensates network lag. This includes sustained lag and occasional lag spikes. There are limits and heuristics based on time control and the compensated lag so far, so that the result should feel reasonable for both players. As a result, having a higher network lag than your opponent is not a handicap! diff --git a/translation/source/learn.xml b/translation/source/learn.xml index 32c362241b..c5418f8b13 100644 --- a/translation/source/learn.xml +++ b/translation/source/learn.xml @@ -211,7 +211,7 @@ in two moves! What next? You know how to play chess, congratulations! Do you want to become a stronger player? Register - Get a free Lichess account + Get a free DeepcrayonFish account Practise Learn common chess positions Puzzles diff --git a/translation/source/patron.xml b/translation/source/patron.xml index 6fa59e2316..5feb5468d2 100644 --- a/translation/source/patron.xml +++ b/translation/source/patron.xml @@ -2,13 +2,13 @@ Donate Donate as %s - Lichess Patron + DeepcrayonFish Patron Free account - Become a Lichess Patron - %s became a Lichess Patron + Become a DeepcrayonFish Patron + %s became a DeepcrayonFish Patron - %1$s is a Lichess Patron for %2$s month - %1$s is a Lichess Patron for %2$s months + %1$s is a DeepcrayonFish Patron for %2$s month + %1$s is a DeepcrayonFish Patron for %2$s months New Patrons Free chess for everyone, forever! @@ -18,10 +18,10 @@ You have a Patron account until %s. If not renewed, you will then be downgraded to free. We are a non‑profit association because we believe everyone should have access to a free, world-class chess platform. - We rely on support from people like you to make it possible. If you enjoy using Lichess, please consider supporting us by donating and becoming a Patron! + We rely on support from people like you to make it possible. If you enjoy using DeepcrayonFish, please consider supporting us by donating and becoming a Patron! Lifetime - Pay %s once. Be a Lichess Patron forever! - Lifetime Lichess Patron + Pay %s once. Be a DeepcrayonFish Patron forever! + Lifetime DeepcrayonFish Patron Monthly Recurring billing, renewing your Patron wings every month. One-time @@ -31,30 +31,30 @@ Credit Card PayPal We are a small team, so your support makes a huge difference! - The celebrated Patrons who make Lichess possible + The celebrated Patrons who make DeepcrayonFish possible Where does the money go? First of all, powerful servers. -Then we pay a full-time developer: %s, the founder of Lichess. +Then we pay a full-time developer: %s, the founder of DeepcrayonFish. See the detailed cost breakdown - Is Lichess an official non-profit? + Is DeepcrayonFish an official non-profit? Yes, here's the act of creation (in French) Can I change/cancel my monthly support? Yes, at any time, from this page. Or you can %s. - contact Lichess support + contact DeepcrayonFish support Other methods of donation? We also accept bank transfers And here's our bitcoin address: %s Are some features reserved to Patrons? - No, because Lichess is entirely free, forever, and for everyone. That's a promise. + No, because DeepcrayonFish is entirely free, forever, and for everyone. That's a promise. However, Patrons get bragging rights with a cool new profile icon. See the detailed feature comparison - Lichess Patron for one month - Lichess Patron for %s months + DeepcrayonFish Patron for one month + DeepcrayonFish Patron for %s months - You support lichess.org with %s per month. + You support deepcrayon.fish with %s per month. Thank you very much for your help. You rock! Current status Next payment @@ -65,17 +65,17 @@ However, Patrons get bragging rights with a cool new profile icon. Change the monthly amount (%s) cancel your support %1$s or %2$s - Decide what Lichess is worth to you: + Decide what DeepcrayonFish is worth to you: Withdraw your credit card and stop payments: - No longer support Lichess - View other Lichess Patrons + No longer support DeepcrayonFish + View other DeepcrayonFish Patrons Date Amount Your transaction has been completed, and a receipt for your donation has been emailed to you. You now have a permanent Patron account. Check out your profile page! - You are now a lifetime Lichess Patron! - You are now a Lichess Patron for one month! - In one month, you will NOT be charged again, and your Lichess account will revert to a regular account. + You are now a lifetime DeepcrayonFish Patron! + You are now a DeepcrayonFish Patron for one month! + In one month, you will NOT be charged again, and your DeepcrayonFish account will revert to a regular account. Change currency diff --git a/translation/source/perfStat.xml b/translation/source/perfStat.xml index 5b0b21ae9a..9936a1c1f2 100644 --- a/translation/source/perfStat.xml +++ b/translation/source/perfStat.xml @@ -6,7 +6,7 @@ Not enough rated games have been played to establish a reliable rating. Progression over the last %s games: Rating deviation: %s. - Lower value means the rating is more stable. Above %1$s, the rating is considered provisional. To be included in the rankings, this value should be below %2$s (standard chess) or %3$s (variants). + Lower value means the rating is more stable. Above %1$s, the rating is considered provisional. To be included in the rankings, this value should be below %2$s (standard chess) or %3$s (variants). Total games Rated games Tournament games diff --git a/translation/source/puzzle.xml b/translation/source/puzzle.xml index 2269da32e9..caec435950 100644 --- a/translation/source/puzzle.xml +++ b/translation/source/puzzle.xml @@ -68,7 +68,7 @@ Lookup puzzles from a player's games Puzzles from %s' games Search puzzles - You have no puzzles in the database, but Lichess still loves you very much. + You have no puzzles in the database, but DeepcrayonFish still loves you very much. Play rapid and classical games to increase your chances of having a puzzle of yours added! %1$s puzzles found in %2$s games diff --git a/translation/source/site.xml b/translation/source/site.xml index 07b96b23dc..56f1870daa 100644 --- a/translation/source/site.xml +++ b/translation/source/site.xml @@ -282,7 +282,7 @@ Give %s second Give %s seconds - This account violated the Lichess Terms of Service + This account violated the DeepcrayonFish Terms of Service Opening explorer & tablebase Takeback Propose a takeback @@ -454,7 +454,7 @@ computer analysis, game chat and shareable URL. Thank you! Social media links Inline notation - Previously on Lichess TV + Previously on DeepcrayonFish TV Online players Active players Beware, the game is rated but has no clock! @@ -610,7 +610,7 @@ computer analysis, game chat and shareable URL. Fischer Clock setup. The more players you take on, the more time you may need. You may add extra time to your clock to help you cope with the simul. Host extra clock time - Lichess tournaments + DeepcrayonFish tournaments Arena tournament FAQ Time before tournament starts Average centipawn loss @@ -644,8 +644,8 @@ computer analysis, game chat and shareable URL. We've sent an email to %s. Click the link in the email to reset your password. By registering, you agree to the %s. Read about our %s. - Network lag between you and Lichess - Time to process a move on Lichess's server + Network lag between you and DeepcrayonFish + Time to process a move on DeepcrayonFish's server Download annotated Download raw Download imported @@ -661,14 +661,14 @@ computer analysis, game chat and shareable URL. With everybody Kid mode This is about safety. In kid mode, all site communications are disabled. Enable this for your children and school students, to protect them from other internet users. - In kid mode, the Lichess logo gets a %s icon, so you know your kids are safe. + In kid mode, the DeepcrayonFish logo gets a %s icon, so you know your kids are safe. Enable Kid mode Disable Kid mode Security Sessions revoke all sessions Play chess everywhere - As free as Lichess + As free as DeepcrayonFish Built for the love of chess, not money Everybody gets all features for free Zero advertisement @@ -781,14 +781,14 @@ computer analysis, game chat and shareable URL. Try to win (or at least draw) every game you play. Resign lost games (don't let the clock run down). We apologise for the temporary inconvenience, - and wish you great games on lichess.org. + and wish you great games on deepcrayon.fish. Thank you for reading! Lifetime score Current match score I agree that I will at no time receive assistance during my games (from a chess computer, book, database or another person). I agree that I will always be respectful to other players. I agree that I will not create multiple accounts. - I agree that I will follow all Lichess policies. + I agree that I will follow all DeepcrayonFish policies. Search or start new conversation Edit Rapid @@ -825,13 +825,13 @@ computer analysis, game chat and shareable URL. %1$s vs %2$s Someone reviewed your coach profile. New pending review - You lost to someone who violated the Lichess TOS + You lost to someone who violated the DeepcrayonFish TOS Refund: %1$s %2$s rating points. Time is almost up! [Click to reveal email address] Download Welcome! - Lichess is a charity and entirely free/libre open source software. + DeepcrayonFish is a charity and entirely free/libre open source software. All operating costs, development, and content are funded solely by user donations. Coach manager Streamer manager diff --git a/translation/source/streamer.xml b/translation/source/streamer.xml index 5191b412a7..8c3a1b8c91 100644 --- a/translation/source/streamer.xml +++ b/translation/source/streamer.xml @@ -1,12 +1,12 @@ - Lichess streamers - Lichess streamer + DeepcrayonFish streamers + DeepcrayonFish streamer LIVE! OFFLINE Currently streaming: %s Last stream %s - Become a Lichess streamer + Become a DeepcrayonFish streamer Do you have a Twitch or YouTube channel? Here we go! All streamers @@ -15,29 +15,29 @@ Download streamer kit %s is streaming Streaming rules - Include the keyword \"lichess.org\" in your stream title and use the category \"Chess\" when you stream on Lichess. - Remove the keyword when you stream non-Lichess stuff. - Lichess will detect your stream automatically and enable the following perks: + Include the keyword \"deepcrayon.fish\" in your stream title and use the category \"Chess\" when you stream on DeepcrayonFish. + Remove the keyword when you stream non-DeepcrayonFish stuff. + DeepcrayonFish will detect your stream automatically and enable the following perks: Read our %s to ensure fair play for everyone during your stream. streaming Fairplay FAQ Benefits of streaming with the keyword - Get a flaming streamer icon on your Lichess profile. + Get a flaming streamer icon on your DeepcrayonFish profile. Get bumped up to the top of the streamers list. - Notify your Lichess followers. + Notify your DeepcrayonFish followers. Show your stream in your games, tournaments and studies. Your stream is approved. Your stream is being reviewed by moderators. Please fill in your streamer information, and upload a picture. - When you are ready to be listed as a Lichess streamer, %s - request a moderator review + When you are ready to be listed as a DeepcrayonFish streamer, %s + request a moderator review If your stream is in a language other than English, include the correct language tag (%s), enclosed in square brackets, at the start of your stream title. As examples, you can include "[RU]" for Russian, "[TR]" for Turkish, "[FR]" for French, etc. -Put this in the stream title in the Twitch or YouTube page, not in the Lichess stream settings. +Put this in the stream title in the Twitch or YouTube page, not in the DeepcrayonFish stream settings. If your stream is in English, there is no need to include a language tag. Your Twitch username or URL Optional. Leave empty if none Your YouTube channel ID or URL - Your streamer name on Lichess + Your streamer name on DeepcrayonFish Keep it short: %s character max Keep it short: %s characters max diff --git a/translation/source/study.xml b/translation/source/study.xml index 508d4d805a..34e07e1229 100644 --- a/translation/source/study.xml +++ b/translation/source/study.xml @@ -65,7 +65,7 @@ Download game Study URL Current chapter URL - You can paste this in the forum or your Lichess blog to embed + You can paste this in the forum or your DeepcrayonFish blog to embed Start at initial position Start at %s Embed in your website @@ -136,7 +136,7 @@ Interesting move Dubious move Only move - Zugzwang + Zugzwang Equal position Unclear position White is slightly better @@ -148,11 +148,11 @@ Novelty Development Initiative - Attack - Counterplay - Time trouble + Attack + Counterplay + Time trouble With compensation - With the idea + With the idea Next chapter Previous chapter Study actions diff --git a/translation/source/swiss.xml b/translation/source/swiss.xml index c332603fb1..91a44814c7 100644 --- a/translation/source/swiss.xml +++ b/translation/source/swiss.xml @@ -70,7 +70,7 @@ Late joiners get a single bye, even if they missed several rounds. The reason is that it has no fair way of dealing with people leaving the tournament early. We cannot expect that all players will play all their games in an online event. It just won't happen, and as a result most Round Robin tournaments would be flawed and unfair, which defeats their very reason to exist. The closest you can get to Round Robin online is to play a Swiss tournament with a very high number of rounds. Then all possible pairings will be played before the tournament ends. What about other tournament systems? - We don't plan to add more tournament systems to Lichess at the moment. + We don't plan to add more tournament systems to DeepcrayonFish at the moment. In a Swiss tournament %1$s, each competitor does not necessarily play all other entrants. Competitors meet one-on-one in each round and are paired using a set of rules designed to ensure that each competitor plays opponents with a similar running score, but not the same opponent more than once. The winner is the competitor with the highest aggregate points earned in all rounds. All competitors play in each round unless there is an odd number of players." Swiss tournaments can only be created by team leaders, and can only be played by team members. %1$s to start playing in swiss tournaments.