2021-11-23 21:44:59 +08:00
|
|
|
from utils.message_builder import image, at
|
2022-02-19 18:20:19 +08:00
|
|
|
from ._rule import check
|
2021-11-23 21:44:59 +08:00
|
|
|
from .model import WordBank
|
|
|
|
|
from configs.path_config import DATA_PATH
|
2022-02-19 18:20:19 +08:00
|
|
|
from nonebot.adapters.onebot.v11 import GroupMessageEvent
|
2022-05-14 15:47:33 +08:00
|
|
|
from utils.utils import get_message_at, get_message_img
|
2021-11-23 21:44:59 +08:00
|
|
|
from nonebot import on_message
|
2022-04-03 20:05:18 +08:00
|
|
|
from models.group_member_info import GroupInfoUser
|
2022-05-14 15:47:33 +08:00
|
|
|
from utils.utils import get_message_img_file, is_number
|
|
|
|
|
import re
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
__zx_plugin_name__ = "词库问答回复操作 [Hidden]"
|
|
|
|
|
|
2022-02-19 18:20:19 +08:00
|
|
|
data_dir = DATA_PATH / "word_bank"
|
2021-11-23 21:44:59 +08:00
|
|
|
data_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
2022-04-03 20:05:18 +08:00
|
|
|
message_handle = on_message(priority=6, block=True, rule=check)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@message_handle.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
async def _(event: GroupMessageEvent):
|
2022-05-14 15:47:33 +08:00
|
|
|
msg = event.raw_message
|
|
|
|
|
list_img = get_message_img_file(event.json())
|
|
|
|
|
if list_img:
|
|
|
|
|
for img_file in list_img:
|
2022-06-16 00:43:32 +08:00
|
|
|
strinfo = re.compile(f"{img_file},.*?]")
|
2022-05-14 15:47:33 +08:00
|
|
|
msg = strinfo.sub(f'{img_file}]', msg)
|
2021-12-01 14:03:34 +08:00
|
|
|
q = await WordBank.check(
|
2022-05-14 15:47:33 +08:00
|
|
|
event.group_id, msg, event.is_tome()
|
2021-12-01 14:03:34 +08:00
|
|
|
)
|
2022-04-03 20:05:18 +08:00
|
|
|
await message_handle.send(await get_one_answer(event, q.format, q.answer))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 处理单条回答
|
|
|
|
|
async def get_one_answer(event, format, _answer, all=1):
|
|
|
|
|
path = data_dir / f"{event.group_id}"
|
2021-12-01 14:03:34 +08:00
|
|
|
placeholder_list = (
|
|
|
|
|
[
|
|
|
|
|
(x.split("<_s>")[0], x.split("<_s>")[1])
|
2022-04-03 20:05:18 +08:00
|
|
|
for x in format.split("<format>")[:-1]
|
2021-12-01 14:03:34 +08:00
|
|
|
]
|
2022-04-03 20:05:18 +08:00
|
|
|
if format
|
2021-12-01 14:03:34 +08:00
|
|
|
else []
|
|
|
|
|
)
|
2021-11-23 21:44:59 +08:00
|
|
|
answer = ""
|
2022-04-03 20:05:18 +08:00
|
|
|
_a = _answer
|
2021-11-23 21:44:59 +08:00
|
|
|
if not placeholder_list:
|
|
|
|
|
answer = _a
|
2022-04-03 20:05:18 +08:00
|
|
|
return answer
|
2021-11-23 21:44:59 +08:00
|
|
|
else:
|
|
|
|
|
for idx, placeholder in placeholder_list:
|
|
|
|
|
if placeholder.endswith("jpg"):
|
2021-12-01 14:03:34 +08:00
|
|
|
answer += _a[: _a.find(f"[__placeholder_{idx}]")] + image(
|
|
|
|
|
path / placeholder
|
|
|
|
|
)
|
2021-11-23 21:44:59 +08:00
|
|
|
else:
|
2022-04-03 20:05:18 +08:00
|
|
|
if all == 1:
|
|
|
|
|
answer += _a[: _a.find(f"[__placeholder_{idx}]")] + at(placeholder)
|
|
|
|
|
else:
|
|
|
|
|
q = await GroupInfoUser.get_member_info(
|
|
|
|
|
int(placeholder), event.group_id)
|
|
|
|
|
answer += _a[: _a.find(f"[__placeholder_{idx}]")] + "@" + q.user_name
|
|
|
|
|
_a = _a[_a.find(f"[__placeholder_{idx}]") + len(f"[__placeholder_{idx}]"):]
|
|
|
|
|
return answer + _a
|
2022-05-14 15:47:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# 处理单条问题
|
|
|
|
|
async def get_one_problem(event, problem):
|
|
|
|
|
strinfo = re.compile(f",subType=\d")
|
|
|
|
|
problem = strinfo.sub('', problem)
|
|
|
|
|
_problem = problem
|
|
|
|
|
_p = problem
|
|
|
|
|
problem = ''
|
|
|
|
|
for img in get_message_img(event.json()):
|
|
|
|
|
_x = img.split("?")[0]
|
|
|
|
|
r = re.search(rf"\[CQ:image,file=(.*),url={_x}.*?]", _p)
|
|
|
|
|
if r:
|
|
|
|
|
_problem = _problem.replace(
|
|
|
|
|
rf",url={img}",
|
|
|
|
|
f"",
|
|
|
|
|
)
|
|
|
|
|
problem += _p[: _p.find(f"[CQ:image,file={r.group(1)},url={img}]")] + image(img)
|
|
|
|
|
_p = _p[
|
|
|
|
|
_p.find(f"[CQ:image,file={r.group(1)},url={img}]") + len(f"[CQ:image,file={r.group(1)},url={img}]"):]
|
|
|
|
|
for at_ in get_message_at(event.json()):
|
|
|
|
|
r = re.search(rf"\[CQ:at,qq={at_}]", problem)
|
|
|
|
|
if r:
|
|
|
|
|
q = await GroupInfoUser.get_member_info(
|
|
|
|
|
int(at_), event.group_id)
|
|
|
|
|
problem += _p[: _p.find(f"[CQ:at,qq={at_}]")] + "@" + q.user_name
|
|
|
|
|
_p = _p[_p.find(f"[CQ:at,qq={at_}]") + len(f"[CQ:at,qq={at_}]"):]
|
|
|
|
|
return _problem, problem + _p
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 显示单条数据库问题
|
|
|
|
|
async def get_one_image_problem(event, problem):
|
|
|
|
|
path = data_dir / f"{event.group_id}" / "problem"
|
|
|
|
|
placeholder_list = []
|
|
|
|
|
idx = 0
|
|
|
|
|
img_list = re.findall(rf"\[CQ:image,file=(.*?)]", problem)
|
|
|
|
|
at_list = re.findall(rf"\[CQ:at,qq=(.*?)]", problem)
|
|
|
|
|
if img_list:
|
|
|
|
|
for img in img_list:
|
|
|
|
|
problem = problem.replace(f'[CQ:image,file={img}]', f'[__placeholder_{idx}]', 1)
|
|
|
|
|
placeholder_list.append([idx, img])
|
|
|
|
|
idx += 1
|
|
|
|
|
if at_list:
|
|
|
|
|
for ats in at_list:
|
|
|
|
|
problem = problem.replace(f'[CQ:at,qq={ats}]', f'[__placeholder_{idx}]', 1)
|
|
|
|
|
placeholder_list.append([idx, ats])
|
|
|
|
|
idx += 1
|
|
|
|
|
_p = problem
|
|
|
|
|
problem = ''
|
|
|
|
|
if not placeholder_list:
|
|
|
|
|
problem = _p
|
|
|
|
|
return problem
|
|
|
|
|
else:
|
|
|
|
|
for idx, placeholder in placeholder_list:
|
|
|
|
|
if is_number(placeholder):
|
|
|
|
|
q = await GroupInfoUser.get_member_info(
|
|
|
|
|
int(placeholder), event.group_id)
|
|
|
|
|
problem += _p[: _p.find(f"[__placeholder_{idx}]")] + "@" + q.user_name
|
|
|
|
|
else:
|
|
|
|
|
problem += _p[: _p.find(f"[__placeholder_{idx}]")] + image(
|
|
|
|
|
path / f"{placeholder}.jpg"
|
|
|
|
|
)
|
|
|
|
|
_p = _p[_p.find(f"[__placeholder_{idx}]") + len(f"[__placeholder_{idx}]"):]
|
|
|
|
|
|
|
|
|
|
return problem + _p
|