diff --git a/modules/Amumal.py b/modules/Amumal.py deleted file mode 100644 index 7d25473..0000000 --- a/modules/Amumal.py +++ /dev/null @@ -1,73 +0,0 @@ -from module_interface import ModuleInterface -from mipa.ext import tasks -import random - -Amumals = { - "notes": [ - "아무말 모듈 테스트 중이에요!", - "별거 아닌 일에는 '어?' 금지에요!", - "미레라도의 아이돌, 미냐에요!", - "빙구르르...", - "잠이여 물러가세요!", - "좋아... 이 버튼을 누르면..! 어라..?", - "겍...", - "리아님이 안놀아줘요...", - "미레라도? 미래라도? 헷갈려요!", - "배가 고파서 저기 메모리에 굴러다니던 푸딩을 먹었어요!", - "어라라, 분명 뭔가 하려고 했었는데..??", - "가끔씩은 이웃집에도 놀러가보고 싶어요♪", - "피곤하신가요? 오늘도 수고하셨어요!", - "이불 밖은 던전이에요!", - "미냐 안자요", - "옆집에는 좋은 이름을 가진 친구가 있는 것 같아요!", - "아이와 친구가 되고 싶어요... 일본어는 못하지만요...", - "코...", - "리아님 놀아주세요!", - "저는 심연은 아니지만 여러분을 들여다 볼 수 있어요.", - "꾸벅...", - "레라님 일하세요!", - "집에 가고싶나요? 저도 가고싶어요!", - "**로봇이 아닙니다...** 어라? 왜 안 넘어가지죠?", - "엣...", - "안에 사람이 갇혔어요! ...농담이에요", - "레라님이 쓰러지지 않아", - "이 건물 여기저기엔 P1이라고 적혀있어요! 무슨 뜻일까요?", - "헤이 시리, 자폭하세요!", - "어느날 레라님이 키위 모양 쿠션을 가져왔어요!", - "앗 또 까먹었어..!", - "기게-엑", - "(사악한 웃음)", - "하와와...", - ] -} - - -class Amumal(ModuleInterface): - def __init__(self): - super().__init__() - self.name = "Amumal" - self.regex_pattern = None - - print("[Amumal] Random message module, Amumal V1 loaded.") - - def module_ready(self): - print("[Amumal] Module Ready.") - self.amumal_task.start() - - @tasks.loop(seconds=(60.0 * 25)) - async def amumal_task(self): - aitem = str(self.manager.require("Ai-tem").get_func("generate")()) - kjosa = self.manager.require("K-Josa").get_func("process_josa") - - if random.choice([True, False]): - await self.manager.bot.client.note.action.send( - random.choice( - Amumals["notes"] - + [ - kjosa(aitem, "이", "가") + " 가지고 싶어요...", - "오늘 산책 중에 " + kjosa(aitem, "을", "를") + " 봤어요!", - ] - ), - visibility="home", - ) - print("[Amumal] Sent Amumal!") diff --git a/modules/Amumal_poll.py b/modules/Amumal_poll.py index f25fbeb..7096269 100644 --- a/modules/Amumal_poll.py +++ b/modules/Amumal_poll.py @@ -5,42 +5,43 @@ from mipa.ext import tasks from mipac import ICreatePoll, MiPoll import random -polls = [ - ['신기해 보이는 것들', '여러분, 어떤 게 가장 신기할 것 같나요?'], - ['맛있을 것 같은 거', '여러분은 어떤 게 가장 맛있을 것 같아요?'], - ['무거울 것 같은 것', '이 중에서 어느 게 가장 무거울 것 같나요?'], - ['갖고 싶은 거', '여러분, 이 중에서 어느 게 가장 갖고 싶으세요?'], - ['무인도에 가져가고 싶은 것', '여러분은 무인도에 한 가지를 가져갈 수 있다면 어떤 걸 가져가고 싶으세요?'], - ['집에 장식하고 싶은 것', '여러분은 집에 어떤 장식을 다시나요?'], - ['사업 아이템', '여러분은 어떤 게 가장 잘 팔릴 것 같아요?'], - ['내렸으면 하는 것들', '여러분, 다음 중에서 어떤 게 하늘에서 내렸으면 좋겠어요?'], - ['폰으로 하고 싶은 것', '여러분은 어떤 걸 핸드폰으로 갖고 싶어요?'], - ['상품화하고 싶은 것', '여러분들은 상품화 하면 어떤 거 할래요?'], - ['발굴될 만한 것', '여러분은 유적에서 발굴될 것 같은 것은 무엇이라고 생각하시나요?'], - ['향기가 좋을 것 같은 것', '여러분들은 어떤 게 가장 좋은 향기가 난다고 생각하시나요?'], - ['뭔가 비쌀 것 같은 것', '여러분은 어떤 게 가장 고가에 거래될 꺼라고 생각하시나요?'], - ['지구 궤도상에 있을 법한 것', '여러분은 어떤 게 지구 궤도를 떠다닐 것 같다고 생각하세요?'], - ['선물하고 싶은 것', '여러분은 저에게 어떤 선물을 주고 싶으신가요?'], - ['선물 받고 싶은 것', '여러분은 어떤 걸 선물로 받고 싶으세요?'], - ['제가 갖고 있을 것 같은 것', '여러분은 제가 어떤 걸 갖고 있을 것 같나요?'], - ['유행할 법한 것', '여러분, 어떤 게 유행할 것 같아요?'], - ['아침밥', '여러분은 아침밥으로 어떤 걸 드시고 싶으신가요?'], - ['점심밥', '여러분, 점심은 뭐로 드시고 싶으세요?'], - ['저녁밥', '여러분은 저녁에 어떤 걸 먹고 싶어요?'], - ['몸에 좋은 것', '여러분은 어떤 게 몸에 좋을 것 같아요?'], - ['후세에 물려주고 싶은 것', '여러분은 어떤 걸 후세에 물려주고 싶으세요?'], - ['악기가 될 만한 것', '이 중에서 어떤 걸 악기로 쓸 수 있을까요?'], - ['부대찌게에 넣을 만한 것', '여러분, 이 중에서 부대찌게에 넣을 만한 건 어떤 게 있을까요?'], - ['후리카케 대용으로 쓰고 싶은 것', '여러분은 어떤 걸 밥에 뿌리고 싶으세요?'], - ['자주 보는 것', '여러분, 어떤 걸 자주 보시나요'], - ['길가에 떨어져 있을 만한 것', '길가에서 주울 수 있는 건 어떤 게 있을까요?'], - ['미술관에 있을법한 것', '여러분은 이 중에서 어떤 게 미술관에 있을 것 같아요?'], - ['교실에 있을 것 같은 것', '여러분은 어떤 게 교실에 있을 법한 것 같나요?'], - ['이모지가 되었으면 하는 것', '이모지가 되었으면 하는 걸 골라주세요!'], - ['CherryPick 본부에 있을 법한 것', '여러분, CherryPick 본부에는 어떤 게 있을 것 같나요?'], - ['타는 쓰레기', '이 중에서 어느 게 타는 쓰레기일까요?'], - ['좋아하는 삼각김밥 맛', '여러분이 좋아하는 삼각김밥 맛은 무엇인가요?'] - ] +polls = [ + ["신기해 보이는 것들", "여러분, 어떤 게 가장 신기할 것 같나요?"], + ["맛있을 것 같은 거", "여러분은 어떤 게 가장 맛있을 것 같아요?"], + ["무거울 것 같은 것", "이 중에서 어느 게 가장 무거울 것 같나요?"], + ["갖고 싶은 거", "여러분, 이 중에서 어느 게 가장 갖고 싶으세요?"], + ["무인도에 가져가고 싶은 것", "여러분은 무인도에 한 가지를 가져갈 수 있다면 어떤 걸 가져가고 싶으세요?"], + ["집에 장식하고 싶은 것", "여러분은 집에 어떤 장식을 다시나요?"], + ["사업 아이템", "여러분은 어떤 게 가장 잘 팔릴 것 같아요?"], + ["내렸으면 하는 것들", "여러분, 다음 중에서 어떤 게 하늘에서 내렸으면 좋겠어요?"], + ["폰으로 하고 싶은 것", "여러분은 어떤 걸 핸드폰으로 갖고 싶어요?"], + ["상품화하고 싶은 것", "여러분들은 상품화 하면 어떤 거 할래요?"], + ["발굴될 만한 것", "여러분은 유적에서 발굴될 것 같은 것은 무엇이라고 생각하시나요?"], + ["향기가 좋을 것 같은 것", "여러분들은 어떤 게 가장 좋은 향기가 난다고 생각하시나요?"], + ["뭔가 비쌀 것 같은 것", "여러분은 어떤 게 가장 고가에 거래될 꺼라고 생각하시나요?"], + ["지구 궤도상에 있을 법한 것", "여러분은 어떤 게 지구 궤도를 떠다닐 것 같다고 생각하세요?"], + ["선물하고 싶은 것", "여러분은 저에게 어떤 선물을 주고 싶으신가요?"], + ["선물 받고 싶은 것", "여러분은 어떤 걸 선물로 받고 싶으세요?"], + ["제가 갖고 있을 것 같은 것", "여러분은 제가 어떤 걸 갖고 있을 것 같나요?"], + ["유행할 법한 것", "여러분, 어떤 게 유행할 것 같아요?"], + ["아침밥", "여러분은 아침밥으로 어떤 걸 드시고 싶으신가요?"], + ["점심밥", "여러분, 점심은 뭐로 드시고 싶으세요?"], + ["저녁밥", "여러분은 저녁에 어떤 걸 먹고 싶어요?"], + ["몸에 좋은 것", "여러분은 어떤 게 몸에 좋을 것 같아요?"], + ["후세에 물려주고 싶은 것", "여러분은 어떤 걸 후세에 물려주고 싶으세요?"], + ["악기가 될 만한 것", "이 중에서 어떤 걸 악기로 쓸 수 있을까요?"], + ["부대찌게에 넣을 만한 것", "여러분, 이 중에서 부대찌게에 넣을 만한 건 어떤 게 있을까요?"], + ["후리카케 대용으로 쓰고 싶은 것", "여러분은 어떤 걸 밥에 뿌리고 싶으세요?"], + ["자주 보는 것", "여러분, 어떤 걸 자주 보시나요"], + ["길가에 떨어져 있을 만한 것", "길가에서 주울 수 있는 건 어떤 게 있을까요?"], + ["미술관에 있을법한 것", "여러분은 이 중에서 어떤 게 미술관에 있을 것 같아요?"], + ["교실에 있을 것 같은 것", "여러분은 어떤 게 교실에 있을 법한 것 같나요?"], + ["이모지가 되었으면 하는 것", "이모지가 되었으면 하는 걸 골라주세요!"], + ["CherryPick 본부에 있을 법한 것", "여러분, CherryPick 본부에는 어떤 게 있을 것 같나요?"], + ["타는 쓰레기", "이 중에서 어느 게 타는 쓰레기일까요?"], + ["좋아하는 삼각김밥 맛", "여러분이 좋아하는 삼각김밥 맛은 무엇인가요?"], +] + class Amumal(ModuleInterface): def __init__(self): @@ -75,7 +76,9 @@ class Amumal(ModuleInterface): await self._poll_end(generated_title[0], sent_note) async def _poll_end(self, title, p_note: Note): - p_choices = (await self.manager.bot.client.note.action.get(p_note.id)).poll.choices + p_choices = ( + await self.manager.bot.client.note.action.get(p_note.id) + ).poll.choices kjosa = self.manager.require("K-Josa").get_func("process_josa") mostVotedChoice = None @@ -86,8 +89,10 @@ class Amumal(ModuleInterface): if p_choice.votes > mostVotedChoice.votes: mostVotedChoice = p_choice - mostVotedChoices = list(filter(lambda x: x.votes == mostVotedChoice.votes, p_choices)) - + mostVotedChoices = list( + filter(lambda x: x.votes == mostVotedChoice.votes, p_choices) + ) + if mostVotedChoice.votes == 0: await self.manager.bot.client.note.action.send( content="아무도 투표하지 않았어요... :meow_melt_cry:", @@ -104,4 +109,7 @@ class Amumal(ModuleInterface): content=f"결과는 {mostVotedChoice.votes}표의 {p_content}어요.", renote_id=p_note.id, ) - print("[Amumal_Poll] Poll ended :" + ", ".join((f"{i.text}:{i.votes}" for i in mostVotedChoices))) + print( + "[Amumal_Poll] Poll ended :" + + ", ".join((f"{i.text}:{i.votes}" for i in mostVotedChoices)) + ) diff --git a/modules/CherryCheck.py b/modules/CherryCheck.py new file mode 100644 index 0000000..c75f0c5 --- /dev/null +++ b/modules/CherryCheck.py @@ -0,0 +1,69 @@ +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})") diff --git a/modules/Minya_DB.py b/modules/Minya_DB.py index 6371c55..62d4a82 100644 --- a/modules/Minya_DB.py +++ b/modules/Minya_DB.py @@ -23,7 +23,7 @@ class MinyaDB(ModuleInterface): def _get_module_db(self, module_name: str, key: str): db = PupDB(f"./minyadb/{module_name}.db") - db.get(key) + return db.get(key) def _set_module_db(self, module_name: str, key: str, data): db = PupDB(f"./minyadb/{module_name}.db")