ica-plugins/plugins/hypvote.py

76 lines
2.2 KiB
Python
Raw Normal View History

2024-08-09 13:23:13 +08:00
import time
2024-08-08 23:14:00 +08:00
import re
from typing import TYPE_CHECKING, TypeVar
if TYPE_CHECKING:
from ica_typing import IcaNewMessage, IcaClient
else:
IcaNewMessage = TypeVar("NewMessage")
IcaClient = TypeVar("IcaClient")
2024-08-09 13:23:13 +08:00
EMPTY_VOTE = {i: [] for i in range(0, 24)}
VOTE = {}
2024-08-08 23:14:00 +08:00
2024-08-09 13:23:13 +08:00
def fmt_vote(room_id) -> str:
global VOTE
if room_id not in VOTE:
VOTE[room_id] = EMPTY_VOTE.copy()
return "|".join(
f"{x}{VOTE[room_id][x] if VOTE[room_id][x] else ""}" for x in VOTE[room_id]
)
2024-08-08 23:14:00 +08:00
2024-08-09 13:23:13 +08:00
def hypvote(msg: IcaNewMessage, client: IcaClient):
global VOTE
matchs = re.match("/hyp (.+)", msg.content + " ")
if matchs:
arg = matchs.group(1).split(" ")
else:
return
if msg.room_id not in VOTE:
VOTE[msg.room_id] = EMPTY_VOTE.copy()
2024-08-08 23:14:00 +08:00
if arg[0] == "vote":
2024-08-09 13:23:13 +08:00
for x in arg[1:]:
if x.isdigit() and 0 <= int(x) < 24:
if msg.sender_id in VOTE[msg.room_id][int(x) % 24]:
continue
VOTE[msg.room_id][int(x) % 24].append(msg.sender_id)
elif arg[0] == "unvote":
for x in arg[1:]:
if x.isdigit() and 0 <= int(x) < 24:
if msg.sender_id in VOTE[int(x) % 24]:
VOTE[msg.room_id][int(x) % 24].remove(msg.sender_id)
elif arg[0] == "clear":
VOTE[msg.room_id] = EMPTY_VOTE.copy()
elif arg == [] or arg[0] == "ls":
res = fmt_vote(msg.room_id)
reply = msg.reply_with(res)
client.send_message(reply)
elif arg[0] == "help":
reply = msg.reply_with("""NAME
2024-08-08 23:14:00 +08:00
/hyp - 计划时间高效开黑
SYNOPSIS
/hyp [command] [args]
OPTIONS
vote <space seperated hour>
vote for time you want to play
unvote <space seperated hour>
unvote for time you want to play
clear
clear the vote (OP only)
ls
list voted time, equivalent to empty
help
show this help
AUTHOR
dongdigua
2024-08-09 13:23:13 +08:00
shenjack(bugfixs)
2024-08-08 23:14:00 +08:00
""")
2024-08-09 13:23:13 +08:00
client.send_message(reply)
def on_ica_message(msg: IcaNewMessage, client: IcaClient) -> None:
if (not (msg.is_from_self or msg.is_reply)) and msg.content.startswith("/hyp"):
hypvote(msg, client)