diff --git a/apps/chesscomelo/chesscom_elo.gif b/apps/chesscomelo/chesscom_elo.gif new file mode 100644 index 0000000000..d7565b6422 Binary files /dev/null and b/apps/chesscomelo/chesscom_elo.gif differ diff --git a/apps/chesscomelo/chesscom_elo.star b/apps/chesscomelo/chesscom_elo.star new file mode 100644 index 0000000000..bad935f76d --- /dev/null +++ b/apps/chesscomelo/chesscom_elo.star @@ -0,0 +1,261 @@ +""" +Applet: Chess.com ELO +Summary: Track your Chess.com ELO +Description: Track your ELO from Chess.com from a variety of game types. +Author: theUnBurn +""" + +load("cache.star", "cache") +load("encoding/base64.star", "base64") +load("encoding/json.star", "json") +load("http.star", "http") +load("render.star", "render") +load("schema.star", "schema") + +NO_PROFILE_ICON = base64.decode(""" +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 +""") + +CHESS_COM_ICON = base64.decode(""" +iVBORw0KGgoAAAANSUhEUgAABEwAAARMCAMAAAC03/aIAAACkVBMVEVHcExseURdfTxchEJWiDxsmkZOfjdOfTlrnUNhiD5pnD5LdjhtmkBOdjZNeTprnkFNeTlsmUFOejdNdjhsnEFQeDhrmj9OeDhtnUBNeThsnEFNeDZrmz9PeTlOeTdsnUFOdzhsnEBMdzhtm0FOeDhOeDZrnEFNeDlsnEBOeThrm0FOdzhNdzhrnEBOeDZOeDhsnEBNeDdNeTlsnEBNeDdrm0BOeDhsnEBOdzhsnEBOeDhOeDdtnUBNeDlsnT9OeDhsnEBOdzhNdzdsnEBOeDdNeTlrnUBOeDdsnEBOeDhOdzhtnEBhjz1OeDhsnEBOeDhsnEBOeDhsnEBOdzhsnEBOeDhsnEBOeDhtnEBNeThrnD9snEBNeDhkkT5snEBOdzhOeDhsnEBOeThsnEBNeDhOdzhsmz9OeDhNeDhsnUBikT1NeDhsnEBOeDdOeDhsnD9OdzhrnEBcijxNdzhsnD9OeDhOeDhsnD9OeDdOeDhsnEBOeDhsnEBOdzdsnEBOeDhsnEBikD1NeDhsnEBOeDdOeThrnD9OeDhsnEBhjz1OeDhOeDhsnD9OeDhsnT9mlT5OeDhtnEBOeDhsnEBbiDtOdzdsnEBOeDhrnEBmlD5snD9OeDhsnEBsnD9OeDhsnD9OeDj////9/vz6/Pn3+fTz9+/w9evq8eTm7t7f6dXZ5c3R4MPK3LrF2LS/1Ky4z6O0zJ2rx5Kkwomau3yVuHWStnGPtG2LsWeGrmKAqlp8p1R4pE9zoUlvnkNsnEBrm0BqmkBpmT9olz9nlj9mlT5lkz5kkj5ikT1hjz1gjj1fjT1eizxcijxbiDtahztahjtZhTtYhDtWgjpVgTpUfzpTfjlSfTlQezlQejhPeThOeDiffw+BAAAAoXRSTlMAAgQGCAoKDg8SFBQXFxobHR4gIyQmKCgrKy4uMDAyMzU3ODo6PD0+QUFFRUhJSkxNTlBRU1VXWFpdXWBhYmRkZ2drbG5wcXN2d3p7fX2AgoWHioyOkJKUlpiZm5ydn5+ipaaqqq2vsLO0tLW4uLu9vb+/v8LCxcbHycrLzs7T09XX19nb3d/h4+Pj5efn6enp6+zv7+/x8fP09fX3+vr9/bkcL/UAADacSURBVHgB7cGJf1X12fDrOwNBhQAWniKPVXEW0TrUglonUBT0VYgUkcoRsCj6FhSP4oAi5wEUj2hfigdoDYTEqa22tdZOTvfOTrJJSDaEjDv7/mvOx2pkyrCHtdZv7bW+1yUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBop//3lTfMv//hx55+eevre/bpfyQak02/+93v/t//+b8fqbnxirNPFwAYTvmUq+98cO3Wd3Q4icSBhH6tiebW9NFX1y2dd9V/lQsAHGf8lff88pX9mrsD2pjq6M7UbV5994+rBQDktMvveeLXWqDmQ10DZjt/de/MsQIgvs746QOvaLFS6T4zs81LrxsnAOKn8vKfv6IeaerosW9sXjyzUgDEyMTbn9innmpK99s3an81Z5IAiIUf3vOy+iHVOWD/seneqQIg4qbct1V909jeb9/afO9kARBZZ9y5UX12sNu+89K8cQIggsqvfmy/BqCly75Tt+aqcgEQLRPve1OD0tSZte+8tXCSAIiOyx47oEFq6rJB9WtmCIBIqLzpFQ1cS7d9b/PNlQKg1J12z6/ViYP99r2dd48VAKVs/P2/VVcSHVn7Xu3iagFQqsY/sE9dauq2Y2qXVAuAUnTGA/vUtbaMHVO7ZJwAKDWn3feOhkCyy45Tu3CsACgl5be/rSHROmDH2TW3XACUjKu3ang09djxtlwjAErDWU9pqCTSdoL10wRA+J328/0aNgczdry6JWMFQMj99E0NoaY+O8FbswRAmJ25VsOpsctOtO4HAiCsyu7cp6GVthPVzisTAKE05VkNs7asnWjDfwmAELpzv4bbwQE7Ud0dAiBsJj6lodeSsZOsnyQAQuWne7QENGfsJHtnCYDwGPOQloamjJ1seZUACImztmqpaMrYybZMEwChcMM7WjqaMnay2hsFgHuVD2lJaR6wUyyrFACOTdyoJSaVtVO8OEEAOHXJr7XkHLRT7bxIADh0034tQe12qrqbBYArZfdrMb76/F//+Oyzzz77+z/+/cXXGqS0DaGmTAA4MeYxLdDnn33y8R/ebzjeh3/8018/+1wD0m1DWFMlABw4Y6MW4vNPP/6gYTgffPzXf2kAGvtsCC+OEwCBm/Ka5u9ff/l9w2je/9NnX6vfmgdsCNsmC4CAnfcbzdcXf/19Q27e/8u/1WetNpRd5wqAQF2yR/P0z4/fbcjDx/9Wfx2xoey9VAAE6Op9mp+//7EhX3/6Uv2U6LWh1F4lAALzk/2al3/+saEA73+mfmrO2lDqrhEAAZl9QPPx+ccNBfpE/dRuQ6q/XgAEYvYBzcPXn7zbULA/q5+6bUj11wuAAMw+oHn45+8bivFX9VFywIZUf70A8N3VBzR3X3/SUKR/qI/abWh11wgAn125X3P3+R8bivXh1+qjHhta3Y8FgK8u2ae5++z9huJ9qj5qztrQai8WAD760R7N3ScNXvi9+iltw9h7jgDwzZTfaM6++rjBG/9WHyUyNoydkwWAT87Yqjn78o8NHvlU/dRmw9k2TgD4YszzmrMvft/glT+rr3psOC9UCQA/PKY5+/zDBs98pL5K2bAeFQA+WKQ5+/zDBu98pP7qtmHVCADP3aA5+/zDBg99pP5qtuHdKAA8dv5+zdUXv2/w0sfqsy4bVt10AeCp8W9qrr76Q4On/qI+a7bhvVUtADxU8bzm6uuPGrz1qfqty4b3QoUA8M6DmrM/N3js3+q3ZhvBUgHgmdmas08bPPa++q/bRjBLAHjkrHc0V/98t8Fjf1L/pWwEtVMFgCcqX9FcffFBg9c+0wD02gg2VwoALzyoOfuowWsffK0BaLORLBMAHviJ5uzTBs99okFIZGwk1wqAok18W3P17/cavPbelxqItI1kV7UAKNZazdXXf2jw3J81GE02onUCoEi3ac4+afDce19oQLptRHMEQFHOfEdz9fm7DZ77RIPSaiOq/YEAKMbTmrOPGjz3wVcalETGRvSMACjCbZqzvzV4728anCM2sjkCoGATf6u5+uqDBs99pAFK2chqJwmAQj2mOfukwXPvf6FB6reRrREABbpac/bFew2e+5sGKm2juEYAFGTM65qzPzd47mMNVouN4o0qAVCIRZqzz99t8NqHX2rA+m0UNQKgAFP2a87+3OC1d/+lQTtso6ibLADy94Tm7It3G7z2Nw1cykbzKwGQt8s1d39p8NpfNHiJARvNTAGQp7JXNGdfvtfgrXc/+lod6LLRbC4TAPm5RXP3aYPH/vCVunDIRnWrAMjLmDc1d79v8NYHX6gTTTaqtyoFQD7ma+7+0eCt9/+tjvTbqBYIgDyctkdz93GDp977l7rSaaPaO1YA5G6R5u6rdxu89O4/1Jk2G12NAMjZGe9o7v7W4KV3P1N3mmx0teMEQK7u1zx81OChdz9Tl/ptdDUCIEdnvKO5+7LBQ+9+pk4dtdHVjhMAublP8/C3Bu+893d1q91ysFAA5GTM25qHjxs8894/1LEWy8GuKgGQizs1D1+/3+CVD/6lriWyloM7BEAOyl/XPPyzwSu//1zd67McvFEuAEY3W/Px1waP/OELDYFOy8UsATC6jZqPjxu88dFXGgbtlosXBcCozte8fNDgib98raHQYjm5QACMZpXm4/MGL7z7qYZEwnLyiAAYxRn7NR+fNXjg/b9raGQsF3XjBMDI5mte/tpQvD98ruHRYzlZIABGVPaa5uVPDUX7+CsNkSOWk1cFwIgu0/z8saFI736qodJuuZkhAEaySvPzYUNxPvinhstBy81KATCC0/Zpft5rKMpHX2rINFluascKgOHdovn5qqEY736q4ZO13NwqAIb3tObni4Yi/P5fGkL9lptnBMCwJmqePm8o3J+/0jDqsRxNEADDuVPzk/i8oVAf/l3D6ajl6C4BMJyNmqfPGwr0py81pNKWoxcFwDDO1DwlvmgoyAefaWi1W64mCYCh3al5e7ehAH/+UsOr1XI1TwAM7VnN24cNefvDPzXMWixXGwTAkM44oHn7Y0Oe3vvr1xpqSctV/ekCYCg3aP7+3JCfjz/XkEtYzm4UAEP5pebv04Z8/OEfmtCwy1quVguAIZTv0fz9uyF3H3z6tZaAjOVqb7kAONWFWojfN+To/b9+pSWhz3J2kQA41X1aiE8acvLeX77UEtFrObtXAJzqeS3EF+82jO69v3yhJaPbcvacADjFmANakD83jOb9T77UEtJlOauvEgAnu1IL8+X7DSP68K9faUk5Yrm7QgCcbJEW6LOGEXz02ddaYg5b7moEwMme10L9tWEYH/7l31p60pa75wTASSr2a8E+fbfhVO/96e9faylKW+7qKgTAic7XIvzrjw0n+v1f/vG1lqi05eECAXCiO7Uo//jzhw3fev+jTz77QktYu+VhngA40Sot1pf//sc//vnvr1T1ay1l7ZaHRwTAibaqFxJa+totD9sEwAlOU3znkOVjrAA43iWK77RZPi4VAMe7XfGdNsvHHQLgeA8pvtNm+VguAI73vOI7bZaP5wTA8fYovnPI8rFXABxnomJQu+VlggA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 +""") + +DAILY_ICON = base64.decode(""" +iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAASElEQVQYV2NkIAAYQfIf1yj95w+5x/hhrdJ/hv8MDAJQtkDwPUawApgiZMNAGkB8uAnYbAIpIk4BUVaAjAM5FqQYxoZbgc+nAH8DKQm4LAIzAAAAAElFTkSuQmCC +""") + +BLITZ_ICON = base64.decode(""" +iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAARklEQVQYV2NkIAAYkeU/rlH6/x8owvifgQGIGARC7jHCFYAkkRXzAyVBfDCBLglTCFKEYQWyJNwEdFNgxmNVgCyJogCXbwHsyhsJdVPgGgAAAABJRU5ErkJggg== +""") + +RAPID_ICON = base64.decode(""" +iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAASklEQVQYV2NkIAAYQfI5cx3/MzD8ZwBzgCwGRkaG/0B6Ssp+IAsKIIoQYEryfrAc3ASQAEwRjA2iSVOAbAXINLgJCIficAM+nwIAAHswCYjrxJEAAAAASUVORK5CYII= +""") + +BULLET_ICON = base64.decode(""" +iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAPklEQVQYV2NkIAAY0eWXdrn+B4lFl+0Gy6EoAEmCJJAVwRXABJFNBCkGK0DXidUKZEUw++FuwCWJ4UhsPgYAGyEoCcwglL0AAAAASUVORK5CYII= +""") + +PUZZLE_ICON = base64.decode(""" +iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAATklEQVQYV2NkIAAYkeVv11n/V206ynirzuo/IyMjg2rjUSCJBkCKYEIgxWAFMJ0wNogGSYJouAJsToGbgKwT2Xi4CTBBmP0w4zEUYLMGAOrjIAk11O6lAAAAAElFTkSuQmCC +""") + +ICONS = {"bullet": BULLET_ICON, "lightning": BLITZ_ICON, "rapid": RAPID_ICON, "chess": DAILY_ICON, "tactics": PUZZLE_ICON} + +options = [ + schema.Option( + display = "Rapid", + value = "rapid", + ), + schema.Option( + display = "Blitz", + value = "lightning", + ), + schema.Option( + display = "Bullet", + value = "bullet", + ), + schema.Option( + display = "Daily", + value = "chess", + ), + schema.Option( + display = "Puzzles", + value = "tactics", + ), + schema.Option( + display = "None", + value = "none", + ), +] + +ONE_HOUR_IN_SECONDS = 3600 + +CHESS_COM_URL = "https://www.chess.com" +CHESS_COM_STATS_ENDPOINT = "%s/callback/member/stats" % CHESS_COM_URL +CHESS_COM_PROFILE_ENDPOINT = "https://api.chess.com/pub/player" +DEFAULT_USERNAME = "magnuscarlsen" + +def get_diff_color(score): + if score < 0: + return "#ff0000" + elif score > 0: + return "#00ff00" + else: + return "#ffffff" + +# +def get_diff_string(score): + if score > 0: + return "+%d" % score + elif score < 0: + return "%d" % score + else: + return "" + +def get_stats(username): + endpoint = "%s/%s" % (CHESS_COM_STATS_ENDPOINT, username) + + cache_key = "stats=%s" % endpoint + cached_values = cache.get(cache_key) + if cached_values == None: + resp = http.get(endpoint).json() + cache.set(cache_key, json.encode(resp), ttl_seconds = ONE_HOUR_IN_SECONDS) + return resp["stats"] + else: + return json.decode(cached_values)["stats"] + +def get_profile_image(username): + endpoint = "%s/%s" % (CHESS_COM_PROFILE_ENDPOINT, username) + + cache_key = "profile=%s" % endpoint + img = cache.get(cache_key) + if img == None: + resp = http.get(endpoint).json() + if "avatar" in resp.keys(): + img = http.get(resp["avatar"]).body() + else: + img = NO_PROFILE_ICON + cache.set(cache_key, img, ttl_seconds = ONE_HOUR_IN_SECONDS) + + return img + +def main(config): + username = config.str("username", DEFAULT_USERNAME) + if username == "": + username = DEFAULT_USERNAME + + stat1 = config.str("stat1", options[0].value) + stat2 = config.str("stat2", options[1].value) + stat3 = config.str("stat3", options[2].value) + show_change = config.bool("show_elo_change", True) + + profile_image = get_profile_image(username) + + resp = get_stats(username) + stats = dict() + diff = dict() + + for rating in resp: + if "rating" not in rating["stats"].keys(): + continue + stats[rating["key"]] = int(rating["stats"]["rating"]) + if "rating_time_change_value" in rating["stats"].keys(): + diff[rating["key"]] = int(rating["stats"]["rating_time_change_value"]) + else: + diff[rating["key"]] = 0 + stats_to_render = [] + for stat in [stat1, stat2, stat3]: + if stat in stats.keys(): + children = [ + render.Image(src = ICONS[stat], width = 8, height = 8), + render.Text("%d" % stats[stat]), + ] + if show_change: + children.append( + render.Text(get_diff_string(diff[stat]), color = get_diff_color(diff[stat])), + ) + stats_to_render.append( + render.Row( + main_align = "center", + cross_align = "center", + children = children, + ), + ) + + if len(stats_to_render) == 0: + stats_to_render.append( + render.Row( + main_align = "center", + children = [ + render.Padding(pad = 2, child = render.WrappedText("No stats found", height = 20)), + ], + ), + ) + + render_username = render.Marquee( + width = 56, + child = render.Text(username), + ) + render_chesscom_icon = render.Padding( + pad = (0, 1, 0, 0), + child = render.Image( + src = CHESS_COM_ICON, + width = 7, + height = 7, + ), + ) + + render_profile_icon = render.Image(src = profile_image, width = 20, height = 20) + + render_stats = render.Column( + main_align = "center", + children = stats_to_render, + ) + + render_header = render.Row( + main_align = "start", + cross_align = "center", + children = [render_chesscom_icon, render_username], + ) + + render_body = render.Row( + expanded = True, + main_align = "center", + cross_align = "center", + children = [render_profile_icon, render_stats], + ) + + return render.Root( + child = render.Column( + children = [ + render.Box(height = 8, child = render_header), + render.Box(child = render_body), + ], + ), + ) + +def get_schema(): + return schema.Schema( + version = "1", + fields = [ + schema.Text( + id = "username", + name = "Chess.com Username", + desc = "Username to keep track of", + icon = "user", + default = DEFAULT_USERNAME, + ), + schema.Dropdown( + id = "stat1", + name = "Game Type #1", + desc = "First ELO to track", + default = options[0].value, + options = options, + icon = "chessPawn", + ), + schema.Dropdown( + id = "stat2", + name = "Game Type #2", + desc = "Second ELO to track", + default = options[1].value, + options = options, + icon = "chessPawn", + ), + schema.Dropdown( + id = "stat3", + name = "Game Type #3", + desc = "Third ELO to track", + default = options[2].value, + options = options, + icon = "chessPawn", + ), + schema.Toggle( + id = "show_elo_change", + name = "Show Change", + desc = "Show how far you've grown or fallen", + icon = "chartLine", + default = True, + ), + ], + ) diff --git a/apps/chesscomelo/manifest.yaml b/apps/chesscomelo/manifest.yaml new file mode 100644 index 0000000000..c4627c8490 --- /dev/null +++ b/apps/chesscomelo/manifest.yaml @@ -0,0 +1,8 @@ +--- +id: chesscom-elo +name: Chess.com ELO +summary: Track your Chess.com ELO +desc: Track your ELO from Chess.com from a variety of game types. +author: theUnBurn +fileName: chesscom_elo.star +packageName: chesscomelo