Skip to content

Instantly share code, notes, and snippets.

@tors42
Created January 29, 2023 13:54
Show Gist options
  • Save tors42/b72654906ebb32dbf7cfffe8c4bb7750 to your computer and use it in GitHub Desktop.
Save tors42/b72654906ebb32dbf7cfffe8c4bb7750 to your computer and use it in GitHub Desktop.
Shows a list of Lichess Correspondence games, sorted by "urgency" to play a move
import java.time.*;
import java.util.function.Function;
import java.util.Comparator;
import chariot.model.Enums.Color;
import chariot.model.Enums.PerfType;
import chariot.model.Game;
import chariot.Client;
class Games {
public static void main(String[] args) {
String userId = args.length == 0 ? System.console().readLine("Lichess user id: ") : args[0];
Function<Game, Color> ourColorInGame =
game -> game.players().white().name().equalsIgnoreCase(userId) ? Color.white : Color.black;
Function<Game, Color> colorToPlayInGame =
game -> game.lastFen().contains(" w ") ? Color.white : Color.black;
Function<Game, Boolean> isItOurMove =
game -> ourColorInGame.apply(game) == colorToPlayInGame.apply(game);
Function<Game, Duration> timeLeftToMove =
game -> Duration.between(ZonedDateTime.now(), game.lastMoveAt().plusDays(game.daysPerTurn()));
Comparator<Game> gamesWithOurMoveFirst = Comparator.comparing(isItOurMove).reversed();
Comparator<Game> gamesWithClosestDeadline = Comparator.comparing(timeLeftToMove);
var client = Client.basic();
var games = client.games().byUserId(userId, params -> params
.perfType(PerfType.correspondence)
.ongoing()
.finished(false)
.lastFen()
.clocks()
).stream()
.sorted(gamesWithOurMoveFirst.thenComparing(gamesWithClosestDeadline))
.toList();
int wPadding = games.stream().mapToInt(game -> game.players().white().name().length()).max().orElse(15);
int bPadding = games.stream().mapToInt(game -> game.players().black().name().length()).max().orElse(15);
games.forEach(game -> System.out.format(
"%3d hours left - https://lichess.org/%s %"+wPadding+"s - %-"+bPadding+"s %2d days/move%n",
timeLeftToMove.apply(game).toHours(),
game.id(),
game.players().white().name() + (colorToPlayInGame.apply(game) == Color.white ? "*" : ""),
game.players().black().name() + (colorToPlayInGame.apply(game) == Color.black ? "*" : ""),
game.daysPerTurn()
));
}
}
@tors42
Copy link
Author

tors42 commented Jan 29, 2023

Pre-requisites:

  1. Java (at least version 17) Java 19 downloads
  2. chariot library (at least version 0.0.60) chariot-0.0.60.jar
  3. The above Games.java file Games.java

Example of how to run in a command-line terminal:

java -cp chariot-0.0.60.jar Games.java mars69ha

(assuming that chariot-0.0.60.jar and Games.java are in the current folder, and that java command is on the path, otherwise something like this: )

C:\path\to\downloaded\jdk-19.0.2\bin\java -cp C:\path\to\downloaded\chariot-0.0.60.jar C:\path\to\downloaded\Games.java mars69ha

And the output would be:

  9 hours left - https://lichess.org/AOUBaeuV     tonyncharlie - mars69ha*          5 days/move
 29 hours left - https://lichess.org/4LdPjQOU          BassTea - mars69ha*          5 days/move
 30 hours left - https://lichess.org/0t5FTQGJ        amadjambo - mars69ha*          5 days/move
 30 hours left - https://lichess.org/aEzscsu6    warsawstories - mars69ha*          7 days/move
 47 hours left - https://lichess.org/ypGaicJE   LegalRebellion - mars69ha*          5 days/move
 49 hours left - https://lichess.org/HFF3L1ur         francous - mars69ha*         10 days/move
 55 hours left - https://lichess.org/VI7NlPST      deathstar81 - mars69ha*         14 days/move
 66 hours left - https://lichess.org/GluNtctT      duracell233 - mars69ha*          7 days/move
 75 hours left - https://lichess.org/OYToskYV        mars69ha* - Jjjorge            5 days/move
 77 hours left - https://lichess.org/1B4nfRgW junkyard_algebra - mars69ha*          5 days/move
 81 hours left - https://lichess.org/xx9h7ffR        mars69ha* - Turm46             5 days/move
 85 hours left - https://lichess.org/5nZ51cYl junkyard_algebra - mars69ha*          5 days/move
 88 hours left - https://lichess.org/yqcmc4UM        mars69ha* - UpGoerFive         5 days/move
 91 hours left - https://lichess.org/FHRWUjSh          Jjjorge - mars69ha*          5 days/move
 97 hours left - https://lichess.org/NWcmV8zJ        TAMMAM_77 - mars69ha*          5 days/move
108 hours left - https://lichess.org/dhOtuNby        mars69ha* - RadikSh            5 days/move
109 hours left - https://lichess.org/YceC9wAK             hdmj - mars69ha*          5 days/move
109 hours left - https://lichess.org/ly4biqxy        mars69ha* - ahgar              5 days/move
113 hours left - https://lichess.org/aD3Gs2Rs        mars69ha* - Justask1975        7 days/move
114 hours left - https://lichess.org/Q7nbnrPi        mars69ha* - SanGria            5 days/move
115 hours left - https://lichess.org/MUC5YZKv        mars69ha* - Rudyvanderlaak     5 days/move
222 hours left - https://lichess.org/utYdwgUd         francous - mars69ha*         10 days/move
222 hours left - https://lichess.org/nP1ioif3        mars69ha* - francous          10 days/move
314 hours left - https://lichess.org/QGTvuiIG        mars69ha* - IAmMateCheckMate  14 days/move
 22 hours left - https://lichess.org/8wNbTXul         mars69ha - Vlsr1*             7 days/move
 58 hours left - https://lichess.org/m0Y5zWeW         mars69ha - Vlsr1*             5 days/move
 67 hours left - https://lichess.org/5gpvIVNh      Postmannen* - mars69ha          14 days/move
 78 hours left - https://lichess.org/YXzKmEzU       movilmate* - mars69ha           5 days/move
 78 hours left - https://lichess.org/EzoC14mC shaarumathi1994* - mars69ha           5 days/move
 84 hours left - https://lichess.org/gDNrxiP6          Weiter* - mars69ha           5 days/move
 85 hours left - https://lichess.org/fMHYDV8s         mars69ha - russmatney*        5 days/move
106 hours left - https://lichess.org/IL3i5PwG         mars69ha - TURISMOLOGO*       7 days/move
109 hours left - https://lichess.org/FS9FBHyl          SG_FTW* - mars69ha           5 days/move
109 hours left - https://lichess.org/5zcy9m0i      Leibowitz2* - mars69ha           5 days/move
109 hours left - https://lichess.org/3DEFd8ON         mars69ha - Leibowitz2*        5 days/move
109 hours left - https://lichess.org/KgY0auYQ         mars69ha - Vlsr1*             5 days/move
109 hours left - https://lichess.org/Hg3iYhlV    Atif_Mujtaba* - mars69ha           5 days/move
109 hours left - https://lichess.org/DaFFKtcV   ElectricFiree* - mars69ha           5 days/move
109 hours left - https://lichess.org/HjD8kpih   roymar-quispe* - mars69ha           5 days/move
109 hours left - https://lichess.org/1A5AGa0M   ElectricFiree* - mars69ha           5 days/move
109 hours left - https://lichess.org/zKP34Trk   roymar-quispe* - mars69ha           5 days/move
109 hours left - https://lichess.org/HiKAhUji         mars69ha - francous*          5 days/move
119 hours left - https://lichess.org/kJJzJBcM   ElectricFiree* - mars69ha           5 days/move
119 hours left - https://lichess.org/LnGVsQc7     Laughnchill* - mars69ha           5 days/move
119 hours left - https://lichess.org/Z7K4q3ZF         mars69ha - Tuurbina*          5 days/move
119 hours left - https://lichess.org/43ghxPLD         Jainill* - mars69ha           5 days/move
119 hours left - https://lichess.org/8EbSMhYh          tingui* - mars69ha           5 days/move
119 hours left - https://lichess.org/UGBCGyiz         mars69ha - rongzom*           5 days/move
126 hours left - https://lichess.org/MDWeZcfN         Nannini* - mars69ha           7 days/move
157 hours left - https://lichess.org/tf7XCxHv         mars69ha - zekekuri*          7 days/move
167 hours left - https://lichess.org/rV5sHwmO   JailtonMaster* - mars69ha           7 days/move
229 hours left - https://lichess.org/li3XHUW4            rxuz* - mars69ha          10 days/move
319 hours left - https://lichess.org/v2vthkux         mars69ha - miramoche*        14 days/move

@tors42
Copy link
Author

tors42 commented Jan 29, 2023

Oh,
and I also added it to tors42/playground,
where one can launch the program with the Web Browser by using GitHub Codespaces - (one needs a GitHub account for that though)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment