add bot
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -8,5 +8,6 @@ tmp/ | ||||
| build | ||||
| htmlcov | ||||
|  | ||||
| data.db | ||||
| *.db | ||||
| 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