diff --git a/plugins/hypvote.py b/plugins/hypvote.py new file mode 100644 index 0000000..73fbbe6 --- /dev/null +++ b/plugins/hypvote.py @@ -0,0 +1,75 @@ +import time +import re +from typing import TYPE_CHECKING, TypeVar + +if TYPE_CHECKING: + from ica_typing import IcaNewMessage, IcaClient +else: + IcaNewMessage = TypeVar("NewMessage") + IcaClient = TypeVar("IcaClient") + +EMPTY_VOTE = {i: [] for i in range(0, 24)} +VOTE = {} + + +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] + ) + + +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() + if arg[0] == "vote": + 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 + /hyp - 计划时间,高效开黑 +SYNOPSIS + /hyp [command] [args] +OPTIONS + vote + vote for time you want to play + unvote + 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 + shenjack(bugfixs) +""") + 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)