Compare commits

..

2 Commits

Author SHA1 Message Date
a2dd6a03b8
add HHIRLLL S3 teams 2023-04-02 17:26:11 +10:00
bcaff22f23
resolve teams 2023-04-02 17:26:01 +10:00
2 changed files with 63 additions and 7 deletions

56
main.py
View File

@ -44,6 +44,21 @@ _ch.setFormatter(LogFormatter())
LOG.addHandler(_ch) LOG.addHandler(_ch)
TEAMS = {}
_logged_teams = []
def team(player: str) -> str:
"""Maps a username to a defined team."""
if player in TEAMS:
return TEAMS[player]
else:
if not player in _logged_teams:
LOG.warning(f"missing team mapping for {player}")
_logged_teams.append(player)
return player
class safelist(list): class safelist(list):
def get(self, index, default=None): def get(self, index, default=None):
try: try:
@ -133,7 +148,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection):
VALUES (?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?)
ON CONFLICT DO NOTHING ON CONFLICT DO NOTHING
""", """,
(game, turn, player, move, user, target), (game, turn, team(player), move, user, target),
) )
case ["switch", name, specie, *rest]: case ["switch", name, specie, *rest]:
player, name = resolve_mon(name) player, name = resolve_mon(name)
@ -143,7 +158,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection):
VALUES (?, ?, ?, ?) VALUES (?, ?, ?, ?)
ON CONFLICT DO NOTHING ON CONFLICT DO NOTHING
""", """,
(game, turn, player, name), (game, turn, team(player), name),
) )
conn.execute( conn.execute(
""" """
@ -151,7 +166,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection):
VALUES(?, ?, ?, ?) VALUES(?, ?, ?, ?)
ON CONFLICT DO NOTHING ON CONFLICT DO NOTHING
""", """,
(game, player, name, specie.split(", ")[0]), (game, team(player), name, specie.split(", ")[0]),
) )
case ["faint", mon]: case ["faint", mon]:
player, mon = resolve_mon(mon) player, mon = resolve_mon(mon)
@ -161,7 +176,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection):
VALUES(?, ?, ?, ?) VALUES(?, ?, ?, ?)
ON CONFLICT DO NOTHING ON CONFLICT DO NOTHING
""", """,
(game, turn, player, mon), (game, turn, team(player), mon),
) )
case ["win", player]: case ["win", player]:
conn.execute( conn.execute(
@ -170,7 +185,7 @@ def parse_log(game: str, log: str, into: sqlite3.Connection):
SET winner = ? SET winner = ?
WHERE id = ? WHERE id = ?
""", """,
(player, game), (team(player), game),
) )
case ["-sidestart", side, env]: case ["-sidestart", side, env]:
if not last_move: if not last_move:
@ -223,7 +238,15 @@ def parse_log(game: str, log: str, into: sqlite3.Connection):
VALUES(?, ?, ?, ?, ?, ?, ?) VALUES(?, ?, ?, ?, ?, ?, ?)
ON CONFLICT DO NOTHING ON CONFLICT DO NOTHING
""", """,
(game, turn, player, mon, source, source_user, source_player), (
game,
turn,
team(player),
mon,
source,
source_user,
team(source_player),
),
) )
case _: case _:
# LOG.debug(f"unhandled message {chunks[0]}") # LOG.debug(f"unhandled message {chunks[0]}")
@ -281,6 +304,14 @@ def main(args):
action="store_true", action="store_true",
help="fetch replays instead of using cache", help="fetch replays instead of using cache",
) )
parser.add_argument(
"-t",
"--teams",
action="store",
metavar="FILE",
default="teams.json",
help="JSON file defining players to teams",
)
parser.add_argument( parser.add_argument(
"-o", "-o",
"--output", "--output",
@ -297,6 +328,11 @@ def main(args):
elif args.verbose: elif args.verbose:
LOG.setLevel(logging.DEBUG) LOG.setLevel(logging.DEBUG)
if args.teams:
with open(args.teams) as f:
global TEAMS
TEAMS = json.load(f)
try: try:
db = sqlite3.connect(args.output) db = sqlite3.connect(args.output)
_init_db(db) _init_db(db)
@ -315,7 +351,13 @@ def main(args):
VALUES (?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?)
ON CONFLICT DO NOTHING ON CONFLICT DO NOTHING
""", """,
(replay.id, replay.p1, replay.p2, replay.format, replay.uploadtime), (
replay.id,
team(replay.p1),
team(replay.p2),
replay.format,
replay.uploadtime,
),
) )
parse_log(replay.id, replay.log, into=db) parse_log(replay.id, replay.log, into=db)

14
teams.json Normal file
View File

@ -0,0 +1,14 @@
{
"DogOfAnnoyance": "Raleigh County Revavrooms",
"FedeX23": "Buenos Aires Aggrons",
"InkFoxclaw": "Mew York",
"Inkfoxclaw": "Mew York",
"Lex101": "Scheveningen Slow Bros",
"Omega Cheyenne": "The Cheyenne Chimchars",
"Roromiya989": "San Francisco 549ers",
"YafamEm": "Emily's Eevees",
"in it for agency": "Barrow's Biggest Birds",
"phantomr23": "East Midland Milotics",
"treesgobark": "Nimbasa City Ninjasks",
"xeal is taken": "Canberra Mamoswines"
}