forked from capedayo/minya_hotomoe
70 lines
3.1 KiB
Python
70 lines
3.1 KiB
Python
|
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})")
|