add bot
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -8,5 +8,6 @@ tmp/ | |||||||
| build | build | ||||||
| htmlcov | htmlcov | ||||||
|  |  | ||||||
| data.db | *.db | ||||||
| cache/ | cache/ | ||||||
|  | token | ||||||
|   | |||||||
							
								
								
									
										73
									
								
								bot.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								bot.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,73 @@ | |||||||
|  | #!/usr/bin/env python3 | ||||||
|  |  | ||||||
|  | from discord.utils import setup_logging | ||||||
|  | import argparse | ||||||
|  | import discord | ||||||
|  | import logging | ||||||
|  | import os | ||||||
|  | import re | ||||||
|  | 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) | ||||||
|  |         os.rename(_DB, _DB_DEST) | ||||||
|  |     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() | ||||||
		Reference in New Issue
	
	Block a user