socket-bot/ica-rs/plugins/namerena.py

128 lines
3.8 KiB
Python
Raw Normal View History

2024-06-22 19:10:53 +08:00
import io
import sys
2024-05-05 22:17:51 +08:00
import time
import traceback
import subprocess
2024-05-05 22:21:13 +08:00
from pathlib import Path
2024-06-10 16:46:07 +08:00
from typing import TYPE_CHECKING, TypeVar
2024-05-05 22:17:51 +08:00
2024-06-22 19:10:53 +08:00
if str(Path(__file__).parent.absolute()) not in sys.path:
sys.path.append(str(Path(__file__).parent.absolute()))
import name_utils
2024-06-10 16:46:07 +08:00
if TYPE_CHECKING:
2024-06-22 19:36:13 +08:00
from ica_typing import (
IcaNewMessage,
IcaClient,
ConfigData,
ReciveMessage,
TailchatReciveMessage,
)
2024-06-10 16:46:07 +08:00
CONFIG_DATA: ConfigData
else:
CONFIG_DATA = None # type: ignore
IcaNewMessage = TypeVar("NewMessage")
IcaClient = TypeVar("IcaClient")
2024-06-22 19:10:53 +08:00
ReciveMessage = TypeVar("ReciveMessage")
TailchatReciveMessage = TypeVar("TailchatReciveMessage")
2024-05-05 22:17:51 +08:00
2024-06-22 19:10:53 +08:00
_version_ = "0.5.0"
2024-05-05 22:27:41 +08:00
2024-06-22 19:10:53 +08:00
EVAL_PREFIX = "/namerena"
CONVERT_PREFIX = "/namer-peek"
2024-06-22 19:36:13 +08:00
2024-06-22 19:10:53 +08:00
def convert_name(msg: ReciveMessage, client) -> None:
# 也是多行
if msg.content.find("\n") == -1:
client.send_message(
msg.reply_with(
f"请使用 {CONVERT_PREFIX} 命令,然后换行输入名字,例如:\n{CONVERT_PREFIX}\n张三\n李四\n王五\n"
)
)
2024-05-05 22:17:51 +08:00
return
2024-06-22 19:10:53 +08:00
# 去掉 prefix
names = msg.content[len(CONVERT_PREFIX) :]
# 去掉第一个 \n
names = names[names.find("\n") + 1 :]
cache = io.StringIO()
raw_players = [x for x in names.split("\n") if x != ""]
players = [name_utils.Player() for _ in raw_players]
for i, player in enumerate(players):
if not player.load(raw_players[i]):
cache.write(f"{i+1} {raw_players[i]} 无法解析\n")
raw_players[i] = ""
for i, player in enumerate(players):
if raw_players[i] == "":
continue
cache.write(player.display())
cache.write("\n")
reply = msg.reply_with(f"{cache.getvalue()}版本:{_version_}")
client.send_message(reply)
def eval_fight(msg: ReciveMessage, client) -> None:
2024-05-05 22:17:51 +08:00
if msg.content.find("\n") == -1:
2024-05-05 22:27:41 +08:00
client.send_message(
msg.reply_with(
2024-06-22 19:10:53 +08:00
f"请使用 {EVAL_PREFIX} 命令,然后换行输入名字,例如:\n{EVAL_PREFIX}\n张三\n李四\n王五\n"
2024-05-05 22:27:41 +08:00
)
)
2024-05-05 22:17:51 +08:00
return
2024-06-22 19:10:53 +08:00
# 去掉 prefix
names = msg.content[len(EVAL_PREFIX) :]
2024-05-05 22:34:09 +08:00
# 去掉第一个 \n
names = names[names.find("\n") + 1 :]
2024-05-05 22:17:51 +08:00
start_time = time.time()
# 开始 try
try:
# 内容写入到 ./md5/input.txt
2024-05-05 22:21:13 +08:00
# 路径是插件文件的相对路径
root_path = Path(__file__).parent
with open(root_path / "md5" / "input.txt", "w") as f:
2024-05-05 22:17:51 +08:00
f.write(names)
# 执行 node md5.js
2024-05-09 22:54:23 +08:00
runner_path = root_path / "md5" / "md5-api.js"
# input_path = root_path / "md5" / "input.txt"
2024-05-05 22:27:41 +08:00
result = subprocess.run(
2024-05-09 22:54:23 +08:00
["node", runner_path.absolute()],
2024-05-05 22:27:41 +08:00
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
2024-05-05 22:17:51 +08:00
# 获取结果
2024-05-05 22:27:07 +08:00
out_result = result.stdout.decode("utf-8")
err_result = result.stderr.decode("utf-8")
2024-05-05 22:17:51 +08:00
# 发送结果
end_time = time.time()
2024-05-05 22:27:41 +08:00
reply = msg.reply_with(
2024-05-10 23:03:44 +08:00
f"{out_result}{err_result}外部耗时:{end_time - start_time:.2f}s\n版本:{_version_}"
2024-05-05 22:27:41 +08:00
)
2024-05-05 22:17:51 +08:00
client.send_message(reply)
except Exception as e:
# 发送错误
reply = msg.reply_with(f"发生错误:{e}\n{traceback.format_exc()}")
2024-05-05 22:27:41 +08:00
client.send_message(reply)
2024-06-05 12:51:19 +08:00
2024-06-22 19:36:13 +08:00
2024-06-22 19:10:53 +08:00
def dispatch_msg(msg: ReciveMessage, client) -> None:
if msg.is_reply or msg.is_from_self:
return
if msg.content.startswith(EVAL_PREFIX):
eval_fight(msg, client)
elif msg.content.startswith(CONVERT_PREFIX):
convert_name(msg, client)
def on_ica_message(msg: IcaNewMessage, client: IcaClient) -> None:
2024-06-22 19:36:13 +08:00
dispatch_msg(msg, client) # type: ignore
2024-06-22 19:10:53 +08:00
2024-06-05 12:51:19 +08:00
2024-06-22 19:10:53 +08:00
def on_tailchat_message(msg: TailchatReciveMessage, client) -> None:
2024-06-22 19:36:13 +08:00
dispatch_msg(msg, client) # type: ignore