mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-07 04:40:00 +08:00
update 0.0.6.5
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user