From a45b95d5d42059adaa39bbed1cf029da6c6589b1 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Tue, 5 Apr 2022 22:15:47 +0800 Subject: [PATCH 1/3] update search_type --- plugins/word_bank/_data_source.py | 4 +-- plugins/word_bank/model.py | 50 ++++++++++++++++++------------- plugins/word_bank/word_hanlde.py | 22 +++++++++----- 3 files changed, 45 insertions(+), 31 deletions(-) diff --git a/plugins/word_bank/_data_source.py b/plugins/word_bank/_data_source.py index bf3a8aa7..b9af26e7 100644 --- a/plugins/word_bank/_data_source.py +++ b/plugins/word_bank/_data_source.py @@ -28,13 +28,13 @@ class WordBankBuilder: """ self._data["answer"] = answer - async def save(self): + async def save(self,search_type): user_id = self._data["user_id"] group_id = self._data["group_id"] problem = self._data["problem"] answer = self._data["answer"] placeholder = self._data.get("placeholder") - await WordBank.add_problem_answer(user_id, group_id, problem, answer, placeholder) + return await WordBank.add_problem_answer(user_id, group_id, search_type,problem, answer, placeholder) async def update(self, index): user_id = self._data["user_id"] diff --git a/plugins/word_bank/model.py b/plugins/word_bank/model.py index 1b5726a7..1a8dbc32 100644 --- a/plugins/word_bank/model.py +++ b/plugins/word_bank/model.py @@ -25,6 +25,7 @@ class WordBank(db.Model): cls, user_id: int, group_id: Optional[int], + search_type: [int], problem: str, answer: str, format_: Optional[List[Tuple[int, Union[int, str]]]], @@ -33,6 +34,7 @@ class WordBank(db.Model): 添加或新增一个问答 :param user_id: 用户id :param group_id: 群号 + :search_type: 问题类型, :param problem: 问题 :param answer: 回答 :param format_: 格式化数据 @@ -43,7 +45,7 @@ class WordBank(db.Model): for x, y in format_: _str += f"{x}<_s>{y}" return await cls._problem_answer_handle( - user_id, group_id, problem, "add", answer=answer, format_=_str + user_id, group_id, problem, "add", search_type=search_type, answer=answer, format_=_str ) @classmethod @@ -159,22 +161,23 @@ class WordBank(db.Model): if problem: FUZZY = Config.get_config("word_bank", "WORD_BANK_FUZZY") KEY = Config.get_config("word_bank", "WORD_BANK_KEY") + q = await cls.query.where( + (cls.group_id == group_id) & (cls.problem == problem) + ).gino.all() if KEY and FUZZY: q_fuzzy = await cls.query.where( - (cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all() - q_key = await cls.query.where(cls.group_id == group_id).gino.all() + (cls.group_id == group_id) & (cls.search_type == 2) & ( + cls.problem.contains(f'{problem}'))).gino.all() + q_key = await cls.query.where((cls.group_id == group_id) & (cls.search_type == 1)).gino.all() q_key = [x for x in q_key if str(x.problem) in (problem)] - q = q_fuzzy + q_key + q += q_fuzzy + q_key elif FUZZY: q = await cls.query.where( - (cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all() + (cls.group_id == group_id) & (cls.search_type == 2) & ( + cls.problem.contains(f'{problem}'))).gino.all() elif KEY: - q = await cls.query.where(cls.group_id == group_id).gino.all() + q = await cls.query.where((cls.group_id == group_id) & (cls.search_type == 1)).gino.all() q = [x for x in q if str(x.problem) in (problem)] - else: - q = await cls.query.where( - (cls.group_id == group_id) & (cls.problem == problem) - ).gino.all() else: return None @@ -188,6 +191,7 @@ class WordBank(db.Model): problem: str, type_: str, *, + search_type: [int] = 0, answer: Optional[str] = None, index: Optional[int] = None, format_: Optional[str] = None, @@ -213,17 +217,21 @@ class WordBank(db.Model): else: q = cls.query.where((cls.user_qq == user_id) & (cls.problem == problem)) if type_ == "add": - q = await q.where(cls.answer == answer).gino.all() - if not q or ".jpg" in format_: - await cls.create( - user_qq=user_id, - group_id=group_id, - problem=problem, - answer=answer, - format=format_, - create_time=datetime.now().replace(microsecond=0), - update_time=datetime.now().replace(microsecond=0), - ) + q = await q.where((cls.answer == answer) & (cls.search_type == search_type)).gino.all() + try: + if not q or ".jpg" in format_: + await cls.create( + user_qq=user_id, + group_id=group_id, + search_type=search_type, + problem=problem, + answer=answer, + format=format_, + create_time=datetime.now().replace(microsecond=0), + update_time=datetime.now().replace(microsecond=0), + ) + except: + return False return True elif type_ == "delete": q = await q.with_for_update().gino.all() diff --git a/plugins/word_bank/word_hanlde.py b/plugins/word_bank/word_hanlde.py index b6502d29..1fc2d76e 100644 --- a/plugins/word_bank/word_hanlde.py +++ b/plugins/word_bank/word_hanlde.py @@ -19,7 +19,6 @@ from nonebot import on_command import random import os import re -from configs.config import NICKNAME, Config __zx_plugin_name__ = "词库问答 [Admin]" __plugin_usage__ = """ @@ -27,7 +26,7 @@ usage: 对指定问题的随机回答,对相同问题可以设置多个不同回答 删除词条后每个词条的id可能会变化,请查看后再删除 指令: - 添加词条问...答...:添加问答词条,可重复添加相同问题的不同回答 + 添加词条 ?[模糊/关键字]...答...:添加问答词条,可重复添加相同问题的不同回答 删除词条 [问题/下标] ?[下标]:删除指定词条指定或全部回答 修改词条 [问题/下标] ?[下标/新回答] [新回答]:修改指定词条指定回答默认修改为第一条 查看词条 ?[问题/下标]:查看全部词条或对应词条回答 @@ -44,12 +43,12 @@ usage: """.strip() __plugin_des__ = "自定义词条内容随机回复" __plugin_cmd__ = [ - "添加词条问...答..", + "添加词条 ?[模糊/关键字]问...答..", "删除词条 [问题/下标] ?[下标]", "修改词条 [问题/下标] ?[下标/新回答] [新回答]", "查看词条 ?[问题/下标]", ] -__plugin_version__ = 0.1 +__plugin_version__ = 0.2 __plugin_author__ = "HibiKier" __plugin_settings__ = { "admin_level": Config.get_config("word_bank", "WORD_BANK_LEVEL [LEVEL]"), @@ -71,7 +70,7 @@ show_word = on_command("显示词条", aliases={"查看词条"}, priority=5, blo @add_word.handle() async def _(bot: Bot, event: GroupMessageEvent, state: T_State, arg: Message = CommandArg()): msg = str(arg) - r = re.search(r"^问(.+)\s?答([\s\S]*)", msg) + r = re.search(r"问(.+)\s?答([\s\S]*)", msg) if not r: await add_word.finish("未检测到词条问题...") problem = r.group(1).strip() @@ -87,10 +86,17 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State, arg: Message = C break else: _problem = problem + search_type = 0 + if re.search("^关键字(.*)", msg): + search_type = 1 + elif re.search("^模糊(.*)", msg): + search_type = 2 _builder = await get__builder(event, _problem, answer, idx) - await _builder.save() - logger.info(f"已保存词条 问:{problem} 答:{msg}") - await add_word.send(f"已保存词条:{problem}") + if await _builder.save(search_type): + logger.info(f"已保存词条 问:{problem} 答:{msg}") + await add_word.send(f"已保存词条:{problem}") + else: + await delete_word.send("保存失败,可能是回答重复") @delete_word.handle() From 6319c7fce147de8f1b7aa1ccb92041040f8932c7 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Tue, 5 Apr 2022 22:38:43 +0800 Subject: [PATCH 2/3] fix --- plugins/word_bank/word_hanlde.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/word_bank/word_hanlde.py b/plugins/word_bank/word_hanlde.py index 1fc2d76e..71df8455 100644 --- a/plugins/word_bank/word_hanlde.py +++ b/plugins/word_bank/word_hanlde.py @@ -4,7 +4,6 @@ from services.log import logger from configs.path_config import DATA_PATH from utils.http_utils import AsyncHttpx from ._data_source import WordBankBuilder -from configs.config import Config from utils.message_builder import image from utils.image_utils import text2image from .message_handle import get_one_answer @@ -19,6 +18,7 @@ from nonebot import on_command import random import os import re +from configs.config import NICKNAME, Config __zx_plugin_name__ = "词库问答 [Admin]" __plugin_usage__ = """ From a77e85b62de6dd0c0e90023cbeaf641bb7069935 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Wed, 6 Apr 2022 13:17:08 +0800 Subject: [PATCH 3/3] fix bug --- plugins/word_bank/model.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/word_bank/model.py b/plugins/word_bank/model.py index 1a8dbc32..2f7fd357 100644 --- a/plugins/word_bank/model.py +++ b/plugins/word_bank/model.py @@ -172,12 +172,14 @@ class WordBank(db.Model): q_key = [x for x in q_key if str(x.problem) in (problem)] q += q_fuzzy + q_key elif FUZZY: - q = await cls.query.where( + q_fuzzy = await cls.query.where( (cls.group_id == group_id) & (cls.search_type == 2) & ( cls.problem.contains(f'{problem}'))).gino.all() + q += q_fuzzy elif KEY: - q = await cls.query.where((cls.group_id == group_id) & (cls.search_type == 1)).gino.all() - q = [x for x in q if str(x.problem) in (problem)] + q_key = await cls.query.where((cls.group_id == group_id) & (cls.search_type == 1)).gino.all() + q_key = [x for x in q_key if str(x.problem) in (problem)] + q += q_key else: return None