update 0.0.6.5

This commit is contained in:
HibiKi
2021-12-01 14:03:34 +08:00
parent 8c4b515093
commit 2a1a2ee8c5
42 changed files with 515 additions and 254 deletions
+17 -9
View File
@@ -19,17 +19,23 @@ data_dir = Path(DATA_PATH) / "word_bank"
data_dir.mkdir(parents=True, exist_ok=True)
message_handle = on_message(priority=7, block=True, rule=check)
message_handle = on_message(priority=5, block=True, rule=check)
@message_handle.handle()
async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
path = data_dir / f"{event.group_id}"
q = await WordBank.check(event.group_id, get_message_text(event.json()))
placeholder_list = [
(x.split("<_s>")[0], x.split("<_s>")[1])
for x in q.format.split("<format>")[:-1]
] if q.format else []
q = await WordBank.check(
event.group_id, get_message_text(event.json()), event.is_tome()
)
placeholder_list = (
[
(x.split("<_s>")[0], x.split("<_s>")[1])
for x in q.format.split("<format>")[:-1]
]
if q.format
else []
)
answer = ""
_a = q.answer
if not placeholder_list:
@@ -37,8 +43,10 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
else:
for idx, placeholder in placeholder_list:
if placeholder.endswith("jpg"):
answer += _a[:_a.find(f"[__placeholder_{idx}]")] + image(path / placeholder)
answer += _a[: _a.find(f"[__placeholder_{idx}]")] + image(
path / placeholder
)
else:
answer += _a[:_a.find(f"[__placeholder_{idx}]")] + at(placeholder)
_a = _a[_a.find(f"[__placeholder_{idx}]") + len(f"[__placeholder_{idx}]"):]
answer += _a[: _a.find(f"[__placeholder_{idx}]")] + at(placeholder)
_a = _a[_a.find(f"[__placeholder_{idx}]") + len(f"[__placeholder_{idx}]") :]
await message_handle.send(answer)
+27 -5
View File
@@ -3,6 +3,7 @@ from typing import Optional, List, Union, Tuple
from datetime import datetime
from pathlib import Path
from configs.path_config import DATA_PATH
import re
import random
@@ -97,18 +98,39 @@ class WordBank(db.Model):
q = await cls.query.where(cls.group_id == group_id).gino.all()
q = [x.problem for x in q]
q.sort()
return list(set(q))
_tmp = []
for problem in q:
if "[_to_me" in problem:
r = re.search(r"\[_to_me\|(.*?)](.*)", problem)
if r:
bot_name = r.group(1)
problem = problem.replace(f"[_to_me|{bot_name}]", bot_name)
_tmp.append(problem)
return list(set(_tmp))
@classmethod
async def check(cls, group_id: int, problem: str) -> Optional["WordBank"]:
async def check(cls, group_id: int, problem: str, is_tome: bool = False) -> Optional["WordBank"]:
"""
检测词条并随机返回
:param group_id: 群号
:param problem: 问题
:param is_tome:是否at真寻
"""
q = await cls.query.where(
(cls.group_id == group_id) & (cls.problem == problem)
).gino.all()
if is_tome:
q = await cls.query.where(
(cls.group_id == group_id)
).gino.all()
q = [x for x in q if "[_to_me" in x.problem]
if q:
for x in q:
r = re.search(r"\[_to_me\|(.*?)](.*)", x.problem)
if r and r.group(2) == problem:
return x
return None
else:
q = await cls.query.where(
(cls.group_id == group_id) & (cls.problem == problem)
).gino.all()
return random.choice(q) if q else None
@classmethod
+1 -1
View File
@@ -7,6 +7,6 @@ from .model import WordBank
async def check(bot: Bot, event: Event, state: T_State) -> bool:
if isinstance(event, GroupMessageEvent):
return bool(
await WordBank.check(event.group_id, get_message_text(event.json()))
await WordBank.check(event.group_id, get_message_text(event.json()), event.is_tome())
)
return False
+7 -1
View File
@@ -67,7 +67,13 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
if not answer:
await add_word.finish("未检测到词条回答...")
idx = 0
_builder = WordBankBuilder(event.user_id, event.group_id, problem)
for n in bot.config.nickname:
if problem.startswith(n):
_problem = f"[_to_me|{n}]" + problem[len(n):]
break
else:
_problem = problem
_builder = WordBankBuilder(event.user_id, event.group_id, _problem)
for at_ in get_message_at(event.json()):
r = re.search(rf"\[CQ:at,qq={at_}]", answer)
if r: