hypvote.py: bugfixs by shenjack

This commit is contained in:
dongdigua 2024-08-09 13:23:13 +08:00
parent a2ba0d9726
commit d79b811e5e
Signed by: dongdigua
GPG Key ID: DB55889E730F5B41

View File

@ -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)