from module_interface import ModuleInterface from mipa.ext import tasks import aiohttp # CherryChk V1 by Rera*C # Check's CherryPick's Docker image version and notify if there's a new version. (15 minutes interval) # Version is checked with tag name, 'latest' and 'develop' tag is ignored. class CherryChk(ModuleInterface): def __init__(self): super().__init__() self.name = "CherryChk" self.regex_pattern = None self.last_checked_time = None self._cherrypick_docker_image = "noridev/cherrypick" print( "[CherryChk] CherryPick Docker version checker module, CherryChk V1 loaded." ) def module_ready(self): print("[CherryChk] Module Ready.") self.update_checker.start() self.last_checked_time = self.manager.require("MinyaDB").get_func( "get_module_db" )(self.name, "last_checked_time") @tasks.loop(seconds=(60.0 * 15)) async def update_checker(self): try: # get latest version from dockerhub async with aiohttp.ClientSession() as session: async with session.get( f"https://hub.docker.com/v2/repositories/{self._cherrypick_docker_image}/tags" ) as resp: if resp.status == 200: json = await resp.json() # get all tags after last_checked_time for tag in json["results"]: if ( not self.last_checked_time or tag["last_updated"] > self.last_checked_time ): if tag["name"] != "latest" and tag["name"] != "develop": print( f"[CherryChk] New version found! ({tag['name']})" ) self.last_checked_time = tag["last_updated"] self.manager.require("MinyaDB").get_func( "set_module_db" )( self.name, "last_checked_time", tag["last_updated"], ) await self.manager.bot.client.note.action.send( content=f"새로운 버전의 체리픽 도커 이미지가 나온 것 같아요! ({tag['name']}) @rera \n" + f"https://hub.docker.com/r/{self._cherrypick_docker_image}/tags", visibility="home", ) break else: print( f"[CherryChk] Failed to get version from DockerHub. ({resp.status})" ) except Exception as e: print(f"[CherryChk] Failed to get version from DockerHub. ({e})")