forked from capedayo/minya_hotomoe
115 lines
6.1 KiB
Python
115 lines
6.1 KiB
Python
from asyncio import sleep
|
|
from mipa import Note
|
|
from module_interface import ModuleInterface
|
|
from mipa.ext import tasks
|
|
from mipac import ICreatePoll, MiPoll
|
|
import random
|
|
|
|
polls = [
|
|
["신기해 보이는 것들", "여러분, 어떤 게 가장 신기할 것 같나요?"],
|
|
["맛있을 것 같은 거", "여러분은 어떤 게 가장 맛있을 것 같아요?"],
|
|
["무거울 것 같은 것", "이 중에서 어느 게 가장 무거울 것 같나요?"],
|
|
["갖고 싶은 거", "여러분, 이 중에서 어느 게 가장 갖고 싶으세요?"],
|
|
["무인도에 가져가고 싶은 것", "여러분은 무인도에 한 가지를 가져갈 수 있다면 어떤 걸 가져가고 싶으세요?"],
|
|
["집에 장식하고 싶은 것", "여러분은 집에 어떤 장식을 다시나요?"],
|
|
["사업 아이템", "여러분은 어떤 게 가장 잘 팔릴 것 같아요?"],
|
|
["내렸으면 하는 것들", "여러분, 다음 중에서 어떤 게 하늘에서 내렸으면 좋겠어요?"],
|
|
["폰으로 하고 싶은 것", "여러분은 어떤 걸 핸드폰으로 갖고 싶어요?"],
|
|
["상품화하고 싶은 것", "여러분들은 상품화 하면 어떤 거 할래요?"],
|
|
["발굴될 만한 것", "여러분은 유적에서 발굴될 것 같은 것은 무엇이라고 생각하시나요?"],
|
|
["향기가 좋을 것 같은 것", "여러분들은 어떤 게 가장 좋은 향기가 난다고 생각하시나요?"],
|
|
["뭔가 비쌀 것 같은 것", "여러분은 어떤 게 가장 고가에 거래될 꺼라고 생각하시나요?"],
|
|
["지구 궤도상에 있을 법한 것", "여러분은 어떤 게 지구 궤도를 떠다닐 것 같다고 생각하세요?"],
|
|
["선물하고 싶은 것", "여러분은 저에게 어떤 선물을 주고 싶으신가요?"],
|
|
["선물 받고 싶은 것", "여러분은 어떤 걸 선물로 받고 싶으세요?"],
|
|
["제가 갖고 있을 것 같은 것", "여러분은 제가 어떤 걸 갖고 있을 것 같나요?"],
|
|
["유행할 법한 것", "여러분, 어떤 게 유행할 것 같아요?"],
|
|
["아침밥", "여러분은 아침밥으로 어떤 걸 드시고 싶으신가요?"],
|
|
["점심밥", "여러분, 점심은 뭐로 드시고 싶으세요?"],
|
|
["저녁밥", "여러분은 저녁에 어떤 걸 먹고 싶어요?"],
|
|
["몸에 좋은 것", "여러분은 어떤 게 몸에 좋을 것 같아요?"],
|
|
["후세에 물려주고 싶은 것", "여러분은 어떤 걸 후세에 물려주고 싶으세요?"],
|
|
["악기가 될 만한 것", "이 중에서 어떤 걸 악기로 쓸 수 있을까요?"],
|
|
["부대찌게에 넣을 만한 것", "여러분, 이 중에서 부대찌게에 넣을 만한 건 어떤 게 있을까요?"],
|
|
["후리카케 대용으로 쓰고 싶은 것", "여러분은 어떤 걸 밥에 뿌리고 싶으세요?"],
|
|
["자주 보는 것", "여러분, 어떤 걸 자주 보시나요"],
|
|
["길가에 떨어져 있을 만한 것", "길가에서 주울 수 있는 건 어떤 게 있을까요?"],
|
|
["미술관에 있을법한 것", "여러분은 이 중에서 어떤 게 미술관에 있을 것 같아요?"],
|
|
["교실에 있을 것 같은 것", "여러분은 어떤 게 교실에 있을 법한 것 같나요?"],
|
|
["이모지가 되었으면 하는 것", "이모지가 되었으면 하는 걸 골라주세요!"],
|
|
["Misskey 본부에 있을 법한 것", "여러분, Misskey 본부에는 어떤 게 있을 것 같나요?"],
|
|
["타는 쓰레기", "이 중에서 어느 게 타는 쓰레기일까요?"],
|
|
["좋아하는 삼각김밥 맛", "여러분이 좋아하는 삼각김밥 맛은 무엇인가요?"],
|
|
]
|
|
|
|
|
|
class Amumal(ModuleInterface):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.name = "Amumal_Poll"
|
|
self.regex_pattern = None
|
|
|
|
print("[Amumal_Poll] Random Poll module, Amumal_Poll V1 loaded.")
|
|
|
|
def module_ready(self):
|
|
print("[Amumal_Poll] Module Ready.")
|
|
self.amumal_task.start()
|
|
|
|
@tasks.loop(seconds=(60.0 * 60))
|
|
async def amumal_task(self):
|
|
gen_aitem = self.manager.require("Ai-tem").get_func("generate")
|
|
if random.choice([True, False, False, False, False]):
|
|
generated_title = random.choice(polls)
|
|
|
|
gen_poll = MiPoll(
|
|
ICreatePoll(
|
|
expired_after=1000 * 60 * 60,
|
|
choices=[gen_aitem(), gen_aitem(), gen_aitem(), gen_aitem()],
|
|
)
|
|
)
|
|
|
|
sent_note = await self.manager.bot.client.note.action.send(
|
|
content=generated_title[1], visibility="home", poll=gen_poll
|
|
)
|
|
print("[Amumal_Poll] Poll started")
|
|
await sleep(60 * 60)
|
|
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
|
|
kjosa = self.manager.require("K-Josa").get_func("process_josa")
|
|
|
|
mostVotedChoice = None
|
|
for p_choice in p_choices:
|
|
if mostVotedChoice == None:
|
|
mostVotedChoice = p_choice
|
|
continue
|
|
if p_choice.votes > mostVotedChoice.votes:
|
|
mostVotedChoice = p_choice
|
|
|
|
mostVotedChoices = list(
|
|
filter(lambda x: x.votes == mostVotedChoice.votes, p_choices)
|
|
)
|
|
|
|
if mostVotedChoice.votes == 0:
|
|
await self.manager.bot.client.note.action.send(
|
|
content="아무도 투표하지 않았어요... :ablobcatcry:",
|
|
visibility="home",
|
|
renote_id=p_note.id,
|
|
)
|
|
elif len(mostVotedChoices) == 1:
|
|
p_content = mostVotedChoice.text
|
|
else:
|
|
p_content = " 그리고 ".join((i.text for i in mostVotedChoices))
|
|
p_content = kjosa(p_content, "이었", "였")
|
|
await self.manager.bot.client.note.action.send(
|
|
cw=f"{title} 설문조사 결과 발표에요!",
|
|
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))
|
|
)
|