From a2ba0d972628958560a7de8be6103fb464082fff Mon Sep 17 00:00:00 2001 From: dongdigua Date: Thu, 8 Aug 2024 23:14:00 +0800 Subject: [PATCH 1/2] WIP: hypvote.py --- plugins/hypvote.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 plugins/hypvote.py diff --git a/plugins/hypvote.py b/plugins/hypvote.py new file mode 100644 index 0000000..27e7fb5 --- /dev/null +++ b/plugins/hypvote.py @@ -0,0 +1,48 @@ +import io +import re +from typing import TYPE_CHECKING, TypeVar + +if TYPE_CHECKING: + from ica_typing import IcaNewMessage, IcaClient +else: + IcaNewMessage = TypeVar("NewMessage") + IcaClient = TypeVar("IcaClient") + + +def on_ica_message(msg: IcaNewMessage, client: IcaClient) -> None: + if (not (msg.is_from_self or msg.is_reply)) and (msg.content.startswith("/hyp") or "any hyp" in msg.content): + hypvote(msg) + + +vote = dict([(i, []) for i in range(0,24)] + +def hypvote(msg): + arg = re.match("/hyp(.+)", msg.content + " ").group(1) + if arg[0] == "vote": + map(lambda x: vote[int(x) % 24] += msg.sender, arg[1:]) + else if arg[0] == "unvote": + map(lambda x: vote[int(x) % 24].remove(msg.sender), arg[1:]) + else if arg[0] == "clear": + vote = dict([(i, []) for i in range(0,24)] + else if arg == [] or arg[0] == "ls" or "any hyp"in msg.content: + res = "\n".join([f"{x}\t{vote[x]}" for x in vote]) + msg.reply_with(res) + else if arg[0] == "help": + 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 +""") From d79b811e5e650d628ea4cc00e4da9ba86b9407b7 Mon Sep 17 00:00:00 2001 From: dongdigua Date: Fri, 9 Aug 2024 13:23:13 +0800 Subject: [PATCH 2/2] hypvote.py: bugfixs by shenjack --- plugins/hypvote.py | 63 +++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/plugins/hypvote.py b/plugins/hypvote.py index 27e7fb5..73fbbe6 100644 --- a/plugins/hypvote.py +++ b/plugins/hypvote.py @@ -1,4 +1,4 @@ -import io +import time import re from typing import TYPE_CHECKING, TypeVar @@ -8,27 +8,47 @@ else: IcaNewMessage = TypeVar("NewMessage") IcaClient = TypeVar("IcaClient") - -def on_ica_message(msg: IcaNewMessage, client: IcaClient) -> None: - if (not (msg.is_from_self or msg.is_reply)) and (msg.content.startswith("/hyp") or "any hyp" in msg.content): - hypvote(msg) +EMPTY_VOTE = {i: [] for i in range(0, 24)} +VOTE = {} -vote = dict([(i, []) for i in range(0,24)] +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): - arg = re.match("/hyp(.+)", msg.content + " ").group(1) + +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": - map(lambda x: vote[int(x) % 24] += msg.sender, arg[1:]) - else if arg[0] == "unvote": - map(lambda x: vote[int(x) % 24].remove(msg.sender), arg[1:]) - else if arg[0] == "clear": - vote = dict([(i, []) for i in range(0,24)] - else if arg == [] or arg[0] == "ls" or "any hyp"in msg.content: - res = "\n".join([f"{x}\t{vote[x]}" for x in vote]) - msg.reply_with(res) - else if arg[0] == "help": - msg.reply_with("""NAME + 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] @@ -45,4 +65,11 @@ OPTIONS 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)