feat: cherrypick update check module added
This commit is contained in:
parent
26604978bf
commit
2ce8f6d392
4 changed files with 118 additions and 114 deletions
|
@ -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!")
|
|
|
@ -5,42 +5,43 @@ from mipa.ext import tasks
|
||||||
from mipac import ICreatePoll, MiPoll
|
from mipac import ICreatePoll, MiPoll
|
||||||
import random
|
import random
|
||||||
|
|
||||||
polls = [
|
polls = [
|
||||||
['신기해 보이는 것들', '여러분, 어떤 게 가장 신기할 것 같나요?'],
|
["신기해 보이는 것들", "여러분, 어떤 게 가장 신기할 것 같나요?"],
|
||||||
['맛있을 것 같은 거', '여러분은 어떤 게 가장 맛있을 것 같아요?'],
|
["맛있을 것 같은 거", "여러분은 어떤 게 가장 맛있을 것 같아요?"],
|
||||||
['무거울 것 같은 것', '이 중에서 어느 게 가장 무거울 것 같나요?'],
|
["무거울 것 같은 것", "이 중에서 어느 게 가장 무거울 것 같나요?"],
|
||||||
['갖고 싶은 거', '여러분, 이 중에서 어느 게 가장 갖고 싶으세요?'],
|
["갖고 싶은 거", "여러분, 이 중에서 어느 게 가장 갖고 싶으세요?"],
|
||||||
['무인도에 가져가고 싶은 것', '여러분은 무인도에 한 가지를 가져갈 수 있다면 어떤 걸 가져가고 싶으세요?'],
|
["무인도에 가져가고 싶은 것", "여러분은 무인도에 한 가지를 가져갈 수 있다면 어떤 걸 가져가고 싶으세요?"],
|
||||||
['집에 장식하고 싶은 것', '여러분은 집에 어떤 장식을 다시나요?'],
|
["집에 장식하고 싶은 것", "여러분은 집에 어떤 장식을 다시나요?"],
|
||||||
['사업 아이템', '여러분은 어떤 게 가장 잘 팔릴 것 같아요?'],
|
["사업 아이템", "여러분은 어떤 게 가장 잘 팔릴 것 같아요?"],
|
||||||
['내렸으면 하는 것들', '여러분, 다음 중에서 어떤 게 하늘에서 내렸으면 좋겠어요?'],
|
["내렸으면 하는 것들", "여러분, 다음 중에서 어떤 게 하늘에서 내렸으면 좋겠어요?"],
|
||||||
['폰으로 하고 싶은 것', '여러분은 어떤 걸 핸드폰으로 갖고 싶어요?'],
|
["폰으로 하고 싶은 것", "여러분은 어떤 걸 핸드폰으로 갖고 싶어요?"],
|
||||||
['상품화하고 싶은 것', '여러분들은 상품화 하면 어떤 거 할래요?'],
|
["상품화하고 싶은 것", "여러분들은 상품화 하면 어떤 거 할래요?"],
|
||||||
['발굴될 만한 것', '여러분은 유적에서 발굴될 것 같은 것은 무엇이라고 생각하시나요?'],
|
["발굴될 만한 것", "여러분은 유적에서 발굴될 것 같은 것은 무엇이라고 생각하시나요?"],
|
||||||
['향기가 좋을 것 같은 것', '여러분들은 어떤 게 가장 좋은 향기가 난다고 생각하시나요?'],
|
["향기가 좋을 것 같은 것", "여러분들은 어떤 게 가장 좋은 향기가 난다고 생각하시나요?"],
|
||||||
['뭔가 비쌀 것 같은 것', '여러분은 어떤 게 가장 고가에 거래될 꺼라고 생각하시나요?'],
|
["뭔가 비쌀 것 같은 것", "여러분은 어떤 게 가장 고가에 거래될 꺼라고 생각하시나요?"],
|
||||||
['지구 궤도상에 있을 법한 것', '여러분은 어떤 게 지구 궤도를 떠다닐 것 같다고 생각하세요?'],
|
["지구 궤도상에 있을 법한 것", "여러분은 어떤 게 지구 궤도를 떠다닐 것 같다고 생각하세요?"],
|
||||||
['선물하고 싶은 것', '여러분은 저에게 어떤 선물을 주고 싶으신가요?'],
|
["선물하고 싶은 것", "여러분은 저에게 어떤 선물을 주고 싶으신가요?"],
|
||||||
['선물 받고 싶은 것', '여러분은 어떤 걸 선물로 받고 싶으세요?'],
|
["선물 받고 싶은 것", "여러분은 어떤 걸 선물로 받고 싶으세요?"],
|
||||||
['제가 갖고 있을 것 같은 것', '여러분은 제가 어떤 걸 갖고 있을 것 같나요?'],
|
["제가 갖고 있을 것 같은 것", "여러분은 제가 어떤 걸 갖고 있을 것 같나요?"],
|
||||||
['유행할 법한 것', '여러분, 어떤 게 유행할 것 같아요?'],
|
["유행할 법한 것", "여러분, 어떤 게 유행할 것 같아요?"],
|
||||||
['아침밥', '여러분은 아침밥으로 어떤 걸 드시고 싶으신가요?'],
|
["아침밥", "여러분은 아침밥으로 어떤 걸 드시고 싶으신가요?"],
|
||||||
['점심밥', '여러분, 점심은 뭐로 드시고 싶으세요?'],
|
["점심밥", "여러분, 점심은 뭐로 드시고 싶으세요?"],
|
||||||
['저녁밥', '여러분은 저녁에 어떤 걸 먹고 싶어요?'],
|
["저녁밥", "여러분은 저녁에 어떤 걸 먹고 싶어요?"],
|
||||||
['몸에 좋은 것', '여러분은 어떤 게 몸에 좋을 것 같아요?'],
|
["몸에 좋은 것", "여러분은 어떤 게 몸에 좋을 것 같아요?"],
|
||||||
['후세에 물려주고 싶은 것', '여러분은 어떤 걸 후세에 물려주고 싶으세요?'],
|
["후세에 물려주고 싶은 것", "여러분은 어떤 걸 후세에 물려주고 싶으세요?"],
|
||||||
['악기가 될 만한 것', '이 중에서 어떤 걸 악기로 쓸 수 있을까요?'],
|
["악기가 될 만한 것", "이 중에서 어떤 걸 악기로 쓸 수 있을까요?"],
|
||||||
['부대찌게에 넣을 만한 것', '여러분, 이 중에서 부대찌게에 넣을 만한 건 어떤 게 있을까요?'],
|
["부대찌게에 넣을 만한 것", "여러분, 이 중에서 부대찌게에 넣을 만한 건 어떤 게 있을까요?"],
|
||||||
['후리카케 대용으로 쓰고 싶은 것', '여러분은 어떤 걸 밥에 뿌리고 싶으세요?'],
|
["후리카케 대용으로 쓰고 싶은 것", "여러분은 어떤 걸 밥에 뿌리고 싶으세요?"],
|
||||||
['자주 보는 것', '여러분, 어떤 걸 자주 보시나요'],
|
["자주 보는 것", "여러분, 어떤 걸 자주 보시나요"],
|
||||||
['길가에 떨어져 있을 만한 것', '길가에서 주울 수 있는 건 어떤 게 있을까요?'],
|
["길가에 떨어져 있을 만한 것", "길가에서 주울 수 있는 건 어떤 게 있을까요?"],
|
||||||
['미술관에 있을법한 것', '여러분은 이 중에서 어떤 게 미술관에 있을 것 같아요?'],
|
["미술관에 있을법한 것", "여러분은 이 중에서 어떤 게 미술관에 있을 것 같아요?"],
|
||||||
['교실에 있을 것 같은 것', '여러분은 어떤 게 교실에 있을 법한 것 같나요?'],
|
["교실에 있을 것 같은 것", "여러분은 어떤 게 교실에 있을 법한 것 같나요?"],
|
||||||
['이모지가 되었으면 하는 것', '이모지가 되었으면 하는 걸 골라주세요!'],
|
["이모지가 되었으면 하는 것", "이모지가 되었으면 하는 걸 골라주세요!"],
|
||||||
['CherryPick 본부에 있을 법한 것', '여러분, CherryPick 본부에는 어떤 게 있을 것 같나요?'],
|
["CherryPick 본부에 있을 법한 것", "여러분, CherryPick 본부에는 어떤 게 있을 것 같나요?"],
|
||||||
['타는 쓰레기', '이 중에서 어느 게 타는 쓰레기일까요?'],
|
["타는 쓰레기", "이 중에서 어느 게 타는 쓰레기일까요?"],
|
||||||
['좋아하는 삼각김밥 맛', '여러분이 좋아하는 삼각김밥 맛은 무엇인가요?']
|
["좋아하는 삼각김밥 맛", "여러분이 좋아하는 삼각김밥 맛은 무엇인가요?"],
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class Amumal(ModuleInterface):
|
class Amumal(ModuleInterface):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -75,7 +76,9 @@ class Amumal(ModuleInterface):
|
||||||
await self._poll_end(generated_title[0], sent_note)
|
await self._poll_end(generated_title[0], sent_note)
|
||||||
|
|
||||||
async def _poll_end(self, title, p_note: 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")
|
kjosa = self.manager.require("K-Josa").get_func("process_josa")
|
||||||
|
|
||||||
mostVotedChoice = None
|
mostVotedChoice = None
|
||||||
|
@ -86,8 +89,10 @@ class Amumal(ModuleInterface):
|
||||||
if p_choice.votes > mostVotedChoice.votes:
|
if p_choice.votes > mostVotedChoice.votes:
|
||||||
mostVotedChoice = p_choice
|
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:
|
if mostVotedChoice.votes == 0:
|
||||||
await self.manager.bot.client.note.action.send(
|
await self.manager.bot.client.note.action.send(
|
||||||
content="아무도 투표하지 않았어요... :meow_melt_cry:",
|
content="아무도 투표하지 않았어요... :meow_melt_cry:",
|
||||||
|
@ -104,4 +109,7 @@ class Amumal(ModuleInterface):
|
||||||
content=f"결과는 {mostVotedChoice.votes}표의 {p_content}어요.",
|
content=f"결과는 {mostVotedChoice.votes}표의 {p_content}어요.",
|
||||||
renote_id=p_note.id,
|
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))
|
||||||
|
)
|
||||||
|
|
69
modules/CherryCheck.py
Normal file
69
modules/CherryCheck.py
Normal file
|
@ -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})")
|
|
@ -23,7 +23,7 @@ class MinyaDB(ModuleInterface):
|
||||||
|
|
||||||
def _get_module_db(self, module_name: str, key: str):
|
def _get_module_db(self, module_name: str, key: str):
|
||||||
db = PupDB(f"./minyadb/{module_name}.db")
|
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):
|
def _set_module_db(self, module_name: str, key: str, data):
|
||||||
db = PupDB(f"./minyadb/{module_name}.db")
|
db = PupDB(f"./minyadb/{module_name}.db")
|
||||||
|
|
Loading…
Reference in a new issue