#!/usr/bin/env python3 from discord.utils import setup_logging import argparse import discord import logging import re import shutil import subprocess as sp discord.utils.setup_logging() _log = logging.getLogger("statbot") _GAMES = "games.txt" _DB = "holy-heck2.db" _DB_DEST = f"/var/lib/grafana/{_DB}" def _write_game(content: str): try: with open(_GAMES, "a") as f: f.write(content) f.write("\n") except: _log.exception(f"failed writing game {content}") def _update_db(): try: games = [] with open(_GAMES) as f: for line in f: games.append(line.strip()) sp.run(["./index.py", "-o", _DB] + games) shutil.move(_DB, _DB_DEST) _log.info("updated db") except: _log.exception(f"failed updating db") class BotClient(discord.Client): async def on_ready(self): _log.info(f"ready as {self.user}") async def on_message(self, message: discord.Message): content = message.content if re.match("https://replay.pokemonshowdown.com/dl-.*", content): _log.info(f"Recognised {content} as a League game") _write_game(content) _update_db() def main(): parser = argparse.ArgumentParser() parser.add_argument( "-t", "--token-file", metavar="FILE", default="token", help="file containing Discord API token", ) args = parser.parse_args() intents = discord.Intents.default() intents.message_content = True client = BotClient(intents=intents) with open(args.token_file) as f: token = f.read().strip() client.run(token, log_handler=None) if __name__ == "__main__": main()