From 1741ea7d26df7d43f17cc07f1f5d11025fe1f181 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Fri, 1 Apr 2022 23:54:40 +0800 Subject: [PATCH 1/3] Update Modify the entry --- plugins/word_bank/_data_source.py | 20 ++-- plugins/word_bank/model.py | 96 +++++++++++---- plugins/word_bank/word_hanlde.py | 188 +++++++++++++++++++----------- 3 files changed, 205 insertions(+), 99 deletions(-) diff --git a/plugins/word_bank/_data_source.py b/plugins/word_bank/_data_source.py index fd9bcbc5..bf3a8aa7 100644 --- a/plugins/word_bank/_data_source.py +++ b/plugins/word_bank/_data_source.py @@ -5,7 +5,6 @@ from typing import Union class WordBankBuilder: def __init__(self, user_id: int, group_id: int, problem: str): - self._data = { "user_id": user_id, "group_id": group_id, @@ -37,16 +36,13 @@ class WordBankBuilder: placeholder = self._data.get("placeholder") await WordBank.add_problem_answer(user_id, group_id, problem, answer, placeholder) + async def update(self, index): + 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") + return await WordBank.update_problem_answer(user_id, group_id, problem, answer, index, placeholder) + def __str__(self): return str(self._data) - - - - - - - - - - - diff --git a/plugins/word_bank/model.py b/plugins/word_bank/model.py index 8b96128e..91e8a5f3 100644 --- a/plugins/word_bank/model.py +++ b/plugins/word_bank/model.py @@ -21,12 +21,12 @@ class WordBank(db.Model): @classmethod async def add_problem_answer( - cls, - user_id: int, - group_id: Optional[int], - problem: str, - answer: str, - format_: Optional[List[Tuple[int, Union[int, str]]]], + cls, + user_id: int, + group_id: Optional[int], + problem: str, + answer: str, + format_: Optional[List[Tuple[int, Union[int, str]]]], ) -> bool: """ 添加或新增一个问答 @@ -47,7 +47,7 @@ class WordBank(db.Model): @classmethod async def delete_problem_answer( - cls, user_id: int, group_id: Optional[int], problem: str, index: Optional[int] + cls, user_id: int, group_id: Optional[int], problem: str, index: Optional[int] ) -> str: """ 删除某问题一个或全部回答 @@ -60,9 +60,35 @@ class WordBank(db.Model): user_id, group_id, problem, "delete", index=index ) + @classmethod + async def update_problem_answer( + cls, + user_id: int, + group_id: Optional[int], + problem: str, + answer: str, + index: Optional[int], + format_: Optional[List[Tuple[int, Union[int, str]]]], + ) -> str: + """ + 修改某问题一个或全部回答 + :param user_id: 用户id + :param group_id: 群号 + :param problem: 问题 + :param index: 回答下标 + """ + _str = None + if format_: + _str = "" + for x, y in format_: + _str += f"{x}<_s>{y}" + return await cls._problem_answer_handle( + user_id, group_id, problem, "update", answer=answer,index=index, format_=_str + ) + @classmethod async def get_problem_answer( - cls, user_id: int, group_id: Optional[int], problem: str + cls, user_id: int, group_id: Optional[int], problem: str ) -> List[str]: """ 获取问题的所有回答 @@ -135,15 +161,15 @@ class WordBank(db.Model): @classmethod async def _problem_answer_handle( - cls, - user_id: int, - group_id: Optional[int], - problem: str, - type_: str, - *, - answer: Optional[str] = None, - index: Optional[int] = None, - format_: Optional[str] = None, + cls, + user_id: int, + group_id: Optional[int], + problem: str, + type_: str, + *, + answer: Optional[str] = None, + index: Optional[int] = None, + format_: Optional[str] = None, ) -> Union[List[Union[str, Tuple[str, str]]], bool, str]: """ 添加或新增一个问答 @@ -174,8 +200,8 @@ class WordBank(db.Model): problem=problem, answer=answer, format=format_, - create_time=datetime.now().date(), - update_time=datetime.now().date(), + create_time=datetime.now().replace(microsecond=0), + update_time=datetime.now().replace(microsecond=0), ) return True elif type_ == "delete": @@ -204,9 +230,39 @@ class WordBank(db.Model): & (cls.group_id == group_id) ).gino.status() return answer + elif type_ == "update": + new_format =format_ + new_answer = answer + q = await q.with_for_update().gino.all() + if q: + path = DATA_PATH / "word_bank" / f"{group_id}" + if index is not None: + _q = [x.problem for x in q] + _q.sort() + prob = _q[index] + index = [x.problem for x in q].index(prob) + q = [q[index]] + else: + q = [q[0]] + for x in q: + format_ = x.format + if format_: + for sp in format_.split("")[:-1]: + _, image_name = sp.split("<_s>") + if image_name.endswith("jpg"): + _path = path / image_name + if _path.exists(): + _path.unlink() + await cls.update.values(answer=new_answer, + format=new_format, + update_time=datetime.now().replace(microsecond=0), ).where( + (cls.problem == problem) + & (cls.answer == x.answer) + & (cls.group_id == group_id) + ).gino.status() + return True elif type_ == "get": q = await q.gino.all() if q: return [(x.answer, x.format.split("")[:-1]) for x in q] return False - diff --git a/plugins/word_bank/word_hanlde.py b/plugins/word_bank/word_hanlde.py index 22d12708..f37e422f 100644 --- a/plugins/word_bank/word_hanlde.py +++ b/plugins/word_bank/word_hanlde.py @@ -27,11 +27,15 @@ usage: 指令: 添加词条问...答...:添加问答词条,可重复添加相同问题的不同回答 删除词条 [问题/下标] ?[下标]:删除指定词条指定或全部回答 + 修改词条 [问题/下标] ?[下标/新回答] [新回答]:修改指定词条指定回答默认修改为第一条 查看词条 ?[问题/下标]:查看全部词条或对应词条回答 示例:添加词条问谁是萝莉答是我 示例:删除词条 谁是萝莉 示例:删除词条 谁是萝莉 0 示例:删除词条 id:0 + 示例:修改词条 谁是萝莉 是你 + 示例:修改词条 谁是萝莉 0 是你 + 示例:修改词条 id:0 是你 示例:查看词条 示例:查看词条 谁是萝莉 示例:查看词条 id:0 @@ -40,23 +44,25 @@ __plugin_des__ = "自定义词条内容随机回复" __plugin_cmd__ = [ "添加词条问...答..", "删除词条 [问题/下标] ?[下标]", + "修改词条 [问题/下标] ?[下标/新回答] [新回答]", "查看词条 ?[问题/下标]", ] __plugin_version__ = 0.1 __plugin_author__ = "HibiKier" __plugin_settings__ = { "admin_level": Config.get_config("word_bank", "WORD_BANK_LEVEL"), - "cmd": ["词库问答", "添加词条", "删除词条", "查看词条"], + "cmd": ["词库问答", "添加词条", "删除词条", "修改词条", "查看词条"], } data_dir = DATA_PATH / "word_bank" data_dir.mkdir(parents=True, exist_ok=True) - add_word = on_command("添加词条", priority=5, block=True) delete_word = on_command("删除词条", priority=5, block=True) +update_word = on_command("修改词条", priority=5, block=True) + show_word = on_command("显示词条", aliases={"查看词条"}, priority=5, block=True) @@ -75,10 +81,121 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State, arg: Message = C idx = 0 for n in bot.config.nickname: if n and problem.startswith(n): - _problem = f"[_to_me|{n}]" + problem[len(n) :] + _problem = f"[_to_me|{n}]" + problem[len(n):] break else: _problem = problem + _builder = await get__builder(event, _problem, answer, idx) + await _builder.save() + logger.info(f"已保存词条 问:{problem} 答:{msg}") + await add_word.send(f"已保存词条:{problem}") + + +@delete_word.handle() +async def _(event: GroupMessageEvent, arg: Message = CommandArg()): + msg = arg.extract_plain_text().strip() + if not msg: + await delete_word.finish("此命令之后需要跟随指定词条,通过“显示词条“查看") + index = None + _sp_msg = msg.split() + if len(_sp_msg) > 1: + if is_number(_sp_msg[-1]): + index = int(_sp_msg[-1]) + msg = " ".join(_sp_msg[:-1]) + problem = msg + if problem.startswith("id:"): + x = problem.split(":")[-1] + if not is_number(x) or int(x) < 0: + await delete_word.finish("id必须为数字且符合规范!") + p = await WordBank.get_group_all_problem(event.group_id) + if p: + problem = p[int(x)] + try: + if answer := await WordBank.delete_problem_answer( + event.user_id, event.group_id, problem, index + ): + await delete_word.send(f"删除词条成功:{problem}\n回答:\n{answer}") + logger.info( + f"(USER {event.user_id}, GROUP " + f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'})" + f" 删除词条: {problem}" + ) + else: + await delete_word.send(f"删除词条:{problem} 失败,可能该词条不存在") + except IndexError: + await delete_word.send("指定下标错误...请通过查看词条来确定..") + + +@update_word.handle() +async def _(bot: Bot, event: GroupMessageEvent, arg: Message = CommandArg()): + msg = str(arg) + if not msg: + await update_word.finish("此命令之后需要跟随指定词条,通过“显示词条“查看") + index = None + new_answer = None + problem = None + _sp_msg = msg.split() + len_msg = len(_sp_msg) + if 1 < len_msg: + problem = "".join(_sp_msg[0]) + if len_msg == 3: + if is_number(_sp_msg[1]): + index = int(_sp_msg[1]) + new_answer = "".join(_sp_msg[2:]) + else: + new_answer = "".join(_sp_msg[1:]) + else: + await update_word.finish("此命令之后需要跟随修改内容") + idx = 0 + for n in bot.config.nickname: + if n and problem.startswith(n): + _problem = f"[_to_me|{n}]" + problem[len(n):] + break + else: + _problem = problem + _builder = await get__builder(event, _problem, new_answer, idx) + + try: + if await _builder.update(index): + await update_word.send(f"修改词条成功:{problem}") + logger.info( + f"(USER {event.user_id}, GROUP " + f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'})" + f" 修改词条: {problem}" + ) + else: + await update_word.send(f"修改词条:{problem} 失败,可能该词条不存在") + except IndexError: + await update_word.send("指定下标错误...请通过查看词条来确定..") + + +@show_word.handle() +async def _(event: GroupMessageEvent, arg: Message = CommandArg()): + msg = arg.extract_plain_text().strip() + if not msg: + _problem_list = await WordBank.get_group_all_problem(event.group_id) + if not _problem_list: + await show_word.finish("该群未收录任何词条..") + _problem_list = [f"\t{i}. {x}" for i, x in enumerate(_problem_list)] + await show_word.send( + image( + b64=(await text2image( + "该群已收录的词条:\n\n" + "\n".join(_problem_list), + padding=10, + color="#f9f6f2", + )).pic2bs4() + ) + ) + else: + _answer_list = await WordBank.get_group_all_answer(event.group_id, msg) + if not _answer_list: + await show_word.send("未收录该词条...") + else: + _answer_list = [f"{i}. {x}" for i, x in enumerate(_answer_list)] + await show_word.send(f"词条 {msg} 回答:\n" + "\n".join(_answer_list)) + + +async def get__builder(event, _problem, answer, idx): (data_dir / f"{event.group_id}").mkdir(exist_ok=True, parents=True) _builder = WordBankBuilder(event.user_id, event.group_id, _problem) for at_ in get_message_at(event.json()): @@ -108,67 +225,4 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State, arg: Message = C _builder.set_placeholder(idx, f"__placeholder_{rand}_{idx}.jpg") idx += 1 _builder.set_answer(answer) - await _builder.save() - logger.info(f"已保存词条 问:{problem} 答:{msg}") - await add_word.send(f"已保存词条:{problem}") - - -@delete_word.handle() -async def _(event: GroupMessageEvent, arg: Message = CommandArg()): - msg = arg.extract_plain_text().strip() - if not msg: - await delete_word.finish("此命令之后需要跟随指定词条,通过“显示词条“查看") - index = None - _sp_msg = msg.split() - if len(_sp_msg) > 1: - if is_number(_sp_msg[-1]): - index = int(_sp_msg[-1]) - msg = " ".join(_sp_msg[:-1]) - problem = msg - if problem.startswith("id:"): - x = problem.split(":")[-1] - if not is_number(x) or int(x) < 0: - await delete_word.finish("id必须为数字且符合规范!") - p = await WordBank.get_group_all_problem(event.group_id) - if p: - problem = p[int(x)] - try: - if answer := await WordBank.delete_problem_answer( - event.user_id, event.group_id, problem, index - ): - await delete_word.send(f"删除词条成功:{problem}\n回答:\n{answer}") - logger.info( - f"(USER {event.user_id}, GROUP " - f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'})" - f" 删除词条: {problem}" - ) - else: - await delete_word.send(f"删除词条:{problem} 失败,可能该词条不存在") - except IndexError: - await delete_word.send("指定下标错误...请通过查看词条来确定..") - - -@show_word.handle() -async def _(event: GroupMessageEvent, arg: Message = CommandArg()): - msg = arg.extract_plain_text().strip() - if not msg: - _problem_list = await WordBank.get_group_all_problem(event.group_id) - if not _problem_list: - await show_word.finish("该群未收录任何词条..") - _problem_list = [f"\t{i}. {x}" for i, x in enumerate(_problem_list)] - await show_word.send( - image( - b64=(await text2image( - "该群已收录的词条:\n\n" + "\n".join(_problem_list), - padding=10, - color="#f9f6f2", - )).pic2bs4() - ) - ) - else: - _answer_list = await WordBank.get_group_all_answer(event.group_id, msg) - if not _answer_list: - await show_word.send("未收录该词条...") - else: - _answer_list = [f"{i}. {x}" for i, x in enumerate(_answer_list)] - await show_word.send(f"词条 {msg} 回答:\n" + "\n".join(_answer_list)) + return _builder From b2b7560d056a1ed856f90fc4789734e156166899 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Sun, 3 Apr 2022 20:05:18 +0800 Subject: [PATCH 2/3] Update word_bank_plus --- plugins/word_bank/__init__.py | 24 +++++++-- plugins/word_bank/message_handle.py | 31 +++++++----- plugins/word_bank/model.py | 46 ++++++++++++------ plugins/word_bank/word_hanlde.py | 75 ++++++++++++++++++++++++----- 4 files changed, 135 insertions(+), 41 deletions(-) diff --git a/plugins/word_bank/__init__.py b/plugins/word_bank/__init__.py index 38fd6cdc..3e8535db 100644 --- a/plugins/word_bank/__init__.py +++ b/plugins/word_bank/__init__.py @@ -1,7 +1,6 @@ from configs.config import Config import nonebot - Config.add_plugin_config( "word_bank", "WORD_BANK_LEVEL [LEVEL]", @@ -11,6 +10,25 @@ Config.add_plugin_config( default_value=5 ) - +Config.add_plugin_config( + "word_bank", + "WORD_BANK_FUZZY", + False, + help_="模糊匹配", + default_value=False +) +Config.add_plugin_config( + "word_bank", + "WORD_BANK_KEY", + True, + help_="关键字匹配", + default_value=True +) +Config.add_plugin_config( + "word_bank", + "WORD_BANK_MIX", + 25, + help_="查看词条时图片内最多显示条数", + default_value=25 +) nonebot.load_plugins("plugins/word_bank") - diff --git a/plugins/word_bank/message_handle.py b/plugins/word_bank/message_handle.py index 30000959..c401b651 100644 --- a/plugins/word_bank/message_handle.py +++ b/plugins/word_bank/message_handle.py @@ -5,36 +5,40 @@ from configs.path_config import DATA_PATH from nonebot.adapters.onebot.v11 import GroupMessageEvent from utils.utils import get_message_text from nonebot import on_message - +from models.group_member_info import GroupInfoUser __zx_plugin_name__ = "词库问答回复操作 [Hidden]" - data_dir = DATA_PATH / "word_bank" data_dir.mkdir(parents=True, exist_ok=True) - -message_handle = on_message(priority=5, block=True, rule=check) +message_handle = on_message(priority=6, block=True, rule=check) @message_handle.handle() async def _(event: GroupMessageEvent): - path = data_dir / f"{event.group_id}" q = await WordBank.check( event.group_id, get_message_text(event.json()), event.is_tome() ) + 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}" placeholder_list = ( [ (x.split("<_s>")[0], x.split("<_s>")[1]) - for x in q.format.split("")[:-1] + for x in format.split("")[:-1] ] - if q.format + if format else [] ) answer = "" - _a = q.answer + _a = _answer if not placeholder_list: answer = _a + return answer else: for idx, placeholder in placeholder_list: if placeholder.endswith("jpg"): @@ -42,6 +46,11 @@ async def _(event: GroupMessageEvent): path / placeholder ) else: - 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) + 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 diff --git a/plugins/word_bank/model.py b/plugins/word_bank/model.py index 91e8a5f3..1b5726a7 100644 --- a/plugins/word_bank/model.py +++ b/plugins/word_bank/model.py @@ -5,6 +5,7 @@ from pathlib import Path from configs.path_config import DATA_PATH import re import random +from configs.config import Config class WordBank(db.Model): @@ -83,7 +84,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, "update", answer=answer,index=index, format_=_str + user_id, group_id, problem, "update", answer=answer, index=index, format_=_str ) @classmethod @@ -113,7 +114,8 @@ class WordBank(db.Model): q = await cls.query.where( (cls.group_id == group_id) & (cls.problem == problem) ).gino.all() - return [x.answer for x in q] if q else None + + return [(x.answer, x.format) for x in q] if q else None @classmethod async def get_group_all_problem(cls, group_id: int) -> List[str]: @@ -154,9 +156,28 @@ class WordBank(db.Model): return x return None else: - q = await cls.query.where( - (cls.group_id == group_id) & (cls.problem == problem) - ).gino.all() + if problem: + FUZZY = Config.get_config("word_bank", "WORD_BANK_FUZZY") + KEY = Config.get_config("word_bank", "WORD_BANK_KEY") + 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() + 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( + (cls.group_id == group_id) & (cls.problem.contains(f'{problem}'))).gino.all() + elif KEY: + q = await cls.query.where(cls.group_id == group_id).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 + return random.choice(q) if q else None @classmethod @@ -209,10 +230,6 @@ class WordBank(db.Model): if q: path = DATA_PATH / "word_bank" / f"{group_id}" if index is not None: - _q = [x.problem for x in q] - _q.sort() - prob = _q[index] - index = [x.problem for x in q].index(prob) q = [q[index]] answer = "\n".join([x.answer for x in q]) for x in q: @@ -225,22 +242,19 @@ class WordBank(db.Model): if _path.exists(): _path.unlink() await cls.delete.where( - (cls.problem == problem) + (cls.update_time == x.update_time) + & (cls.problem == problem) & (cls.answer == x.answer) & (cls.group_id == group_id) ).gino.status() return answer elif type_ == "update": - new_format =format_ + new_format = format_ new_answer = answer q = await q.with_for_update().gino.all() if q: path = DATA_PATH / "word_bank" / f"{group_id}" if index is not None: - _q = [x.problem for x in q] - _q.sort() - prob = _q[index] - index = [x.problem for x in q].index(prob) q = [q[index]] else: q = [q[0]] @@ -259,6 +273,8 @@ class WordBank(db.Model): (cls.problem == problem) & (cls.answer == x.answer) & (cls.group_id == group_id) + & (cls.group_id == group_id) + & (cls.update_time == x.update_time) ).gino.status() return True elif type_ == "get": diff --git a/plugins/word_bank/word_hanlde.py b/plugins/word_bank/word_hanlde.py index f37e422f..20a5b3d0 100644 --- a/plugins/word_bank/word_hanlde.py +++ b/plugins/word_bank/word_hanlde.py @@ -7,6 +7,7 @@ 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 from .model import WordBank from nonebot.adapters.onebot.v11 import ( Bot, @@ -18,6 +19,7 @@ from nonebot import on_command import random import os import re +from configs.config import NICKNAME, Config __zx_plugin_name__ = "词库问答 [Admin]" __plugin_usage__ = """ @@ -50,7 +52,7 @@ __plugin_cmd__ = [ __plugin_version__ = 0.1 __plugin_author__ = "HibiKier" __plugin_settings__ = { - "admin_level": Config.get_config("word_bank", "WORD_BANK_LEVEL"), + "admin_level": Config.get_config("word_bank", "WORD_BANK_LEVEL [LEVEL]"), "cmd": ["词库问答", "添加词条", "删除词条", "修改词条", "查看词条"], } @@ -170,29 +172,78 @@ async def _(bot: Bot, event: GroupMessageEvent, arg: Message = CommandArg()): @show_word.handle() -async def _(event: GroupMessageEvent, arg: Message = CommandArg()): +async def _(bot: Bot, event: GroupMessageEvent, arg: Message = CommandArg()): msg = arg.extract_plain_text().strip() if not msg: _problem_list = await WordBank.get_group_all_problem(event.group_id) if not _problem_list: await show_word.finish("该群未收录任何词条..") _problem_list = [f"\t{i}. {x}" for i, x in enumerate(_problem_list)] - await show_word.send( - image( - b64=(await text2image( - "该群已收录的词条:\n\n" + "\n".join(_problem_list), - padding=10, - color="#f9f6f2", - )).pic2bs4() + long_problem_list = len(_problem_list) + max_line = 25 + if long_problem_list > max_line: + pic_list = [] + mes_list = [] + img_nu = long_problem_list // max_line + one_msg = "该群已收录的词条:" + await show_word.send(one_msg) + for i in range(img_nu + 1): + if _problem_list: + one_img = image( + b64=(await text2image("\n".join(_problem_list[:max_line]), + padding=10, + color="#f9f6f2", + )).pic2bs4() + ) + if img_nu > 2: + pic_list.append(one_img) + else: + await show_word.send(one_img) + del _problem_list[:max_line] + if pic_list: + for img in pic_list: + data = { + "type": "node", + "data": {"name": f"{NICKNAME}", "uin": f"{bot.self_id}", "content": img}, + } + mes_list.append(data) + await bot.send_group_forward_msg(group_id=event.group_id, messages=mes_list) + else: + await show_word.send( + image( + b64=(await text2image( + "该群已收录的词条:\n\n" + "\n".join(_problem_list), + padding=10, + color="#f9f6f2", + )).pic2bs4() + ) ) - ) else: _answer_list = await WordBank.get_group_all_answer(event.group_id, msg) if not _answer_list: await show_word.send("未收录该词条...") + else: - _answer_list = [f"{i}. {x}" for i, x in enumerate(_answer_list)] - await show_word.send(f"词条 {msg} 回答:\n" + "\n".join(_answer_list)) + + # 解析图片和@ + _answer_img_nu_list = [await get_one_answer(event, format, answer, 0) for answer, format in _answer_list] + word_nu = len(_answer_img_nu_list) + img_nu = 0 + answer = f"词条 {msg} 回答:" + for i, x, in enumerate(_answer_img_nu_list): + r = re.findall(rf"\[CQ:image,file=", str(x)) + if r: + img_nu += len(r) + answer += "\n" + f"{i}." + x + if (img_nu > 2 and word_nu > 5) or word_nu > 10 or img_nu > 4: + data = { + "type": "node", + "data": {"name": f"{NICKNAME}", "uin": f"{bot.self_id}", "content": answer}, + } + await bot.send_group_forward_msg(group_id=event.group_id, messages=data) + else: + await show_word.send(answer) + # await show_word.send(f"词条 {msg} 回答:\n" + "\n".join(_answer_list)) async def get__builder(event, _problem, answer, idx): From f99abb2f982d789180caeae83e3f380b39ee35b4 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Sun, 3 Apr 2022 20:11:00 +0800 Subject: [PATCH 3/3] fix config --- 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 20a5b3d0..b6502d29 100644 --- a/plugins/word_bank/word_hanlde.py +++ b/plugins/word_bank/word_hanlde.py @@ -180,7 +180,7 @@ async def _(bot: Bot, event: GroupMessageEvent, arg: Message = CommandArg()): await show_word.finish("该群未收录任何词条..") _problem_list = [f"\t{i}. {x}" for i, x in enumerate(_problem_list)] long_problem_list = len(_problem_list) - max_line = 25 + max_line = Config.get_config("word_bank", "WORD_BANK_MIX") if long_problem_list > max_line: pic_list = [] mes_list = []