diff --git a/main.py b/main.py index 05b2ac4..dd44e85 100755 --- a/main.py +++ b/main.py @@ -114,114 +114,6 @@ def parse_log(game: str, log: str, into: sqlite3.Connection): """, (game, player, name, specie.split(", ")[0]), ) - case _: - debug(f"unhandled message {chunks[0]}") - - -QUERIES = ["gametime", "moves", "nicknames", "playtime", "usage"] - - -def query(type: str, conn: sqlite3.Connection): - match type: - case "gametime": - print("Longest games") - print("=============") - for row in conn.execute( - """ - SELECT game, MAX(turn) AS n - FROM moves - GROUP BY game - ORDER BY n DESC - LIMIT 5 - """ - ): - replay = fetch(row.game, cache=True) - print(f"{replay.p1} vs {replay.p2}: {row.n} turns") - - case "moves": - print("Move usage overall") - print("==================") - for row in conn.execute( - """ - SELECT name, COUNT(*) AS n - FROM moves - GROUP BY name - ORDER BY n DESC, name - LIMIT 10 - """ - ): - print(f"{row.name}: {row.n}") - - case "nicknames": - print("Nickname usage per player") - print("=========================") - for row_p in conn.execute("SELECT DISTINCT player FROM nicknames"): - print(row_p.player) - for row_s in conn.execute( - "SELECT DISTINCT specie FROM nicknames WHERE player = ?", - (row_p.player,), - ): - print(f" {row_s.specie}: ", end="") - names = [] - for row in conn.execute( - """ - SELECT player, specie, name, count(game) AS n - FROM nicknames - WHERE player = ? AND specie = ? - GROUP BY player, specie, name - ORDER BY player, specie, name - """, - (row_p.player, row_s.specie), - ): - names.append(f"{row.name} (x{row.n})") - print(*names, sep=", ") - - case "playtime": - print("Active playtime per Pokemon") - print("===========================") - for row in conn.execute( - """ - SELECT m.player, k.specie, COUNT(m.name) AS n - FROM moves m - LEFT JOIN nicknames k ON (m.game, m.player, m.user) = (k.game, k.player, k.name) - GROUP BY k.specie, m.player - ORDER BY n DESC, k.specie, m.player - LIMIT 10 - """ - ): - print(f"{row.specie} ({row.player}): {row.n} turns") - - case "usage": - print("Pokemon usage per player") - print("========================") - games = { - r.player: r.n - for r in conn.execute( - """ - SELECT player, COUNT(m.game) AS n - FROM (SELECT DISTINCT player, game FROM moves) m - GROUP BY player - """ - ) - } - for row_p in conn.execute("SELECT DISTINCT player FROM nicknames"): - print(row_p.player) - for row_s in conn.execute( - """ - SELECT specie, COUNT(game) AS n - FROM nicknames - WHERE player = ? - GROUP BY specie - ORDER BY n DESC, specie - """, - (row_p.player,), - ): - print( - f" {row_s.specie}: {row_s.n}" - f" ({row_s.n / games[row_p.player] * 100:.2f}%)" - ) - case _: - error(f"unknown query {type}") @dataclass(frozen=True) @@ -270,13 +162,7 @@ def main(): "-v", "--verbose", action="store_true", help="add debugging info" ) parser.add_argument("-c", "--cache", action="store_true", help="cache replays") - parser.add_argument( - "-Q", - "--query", - choices=QUERIES, - help="run query instead of download", - ) - parser.add_argument("replay", nargs="*", help="replay ID or URL") + parser.add_argument("replay", nargs="+", help="replay ID or URL") args = parser.parse_args(sys.argv[1:]) logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO) @@ -285,32 +171,24 @@ def main(): db = sqlite3.connect("data.db") _init_db(db) - if args.query: - query(args.query, db) - else: - if not args.replay: - parser.print_usage() - print(f"{APP}: error: either query or replay arguments are required") - sys.exit(1) + for r in args.replay: + try: + replay = fetch(r, cache=args.cache) + except Exception as e: + error(f"bad replay {r}") + continue - for r in args.replay: - try: - replay = fetch(r, cache=args.cache) - except Exception as e: - error(f"bad replay {r}") - continue + db.execute( + """ + INSERT INTO games(id, p1, p2, format, uploadtime) + VALUES (?, ?, ?, ?, ?) + ON CONFLICT DO NOTHING + """, + (replay.id, replay.p1, replay.p2, replay.format, replay.uploadtime), + ) - db.execute( - """ - INSERT INTO games(id, p1, p2, format, uploadtime) - VALUES (?, ?, ?, ?, ?) - ON CONFLICT DO NOTHING - """, - (replay.id, replay.p1, replay.p2, replay.format, replay.uploadtime), - ) - - parse_log(replay.id, replay.log, into=db) - db.commit() + parse_log(replay.id, replay.log, into=db) + db.commit() finally: db.close()