From 3bb9aaf637408c8ad4bc07b30fbb588a6e67e3f4 Mon Sep 17 00:00:00 2001 From: LambdaYH Date: Sun, 21 Aug 2022 23:21:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=AD=A3=E5=88=99=E8=AF=8D?= =?UTF-8?q?=E6=9D=A1=E5=89=8D=E5=85=88=E6=A3=80=E6=9F=A5=E6=AD=A3=E5=88=99?= =?UTF-8?q?=E6=9C=89=E6=95=88=E6=80=A7=20&=20=E6=AD=A3=E5=88=99=E8=AF=8D?= =?UTF-8?q?=E6=9D=A1=E5=85=88=E8=BF=9B=E8=A1=8C=E8=BD=AC=E4=B9=89=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E7=84=B6=E7=AC=A6=E5=8F=B7=E9=83=BD=E4=B9=B1=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/word_bank/word_handle.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugins/word_bank/word_handle.py b/plugins/word_bank/word_handle.py index e35ac3dd..7762ce3b 100644 --- a/plugins/word_bank/word_handle.py +++ b/plugins/word_bank/word_handle.py @@ -1,3 +1,4 @@ +import re from typing import Tuple, Any, Optional from nonebot.internal.params import Arg, ArgStr @@ -5,11 +6,12 @@ from nonebot.typing import T_State from utils.utils import get_message_at, is_number, get_message_img from nonebot.params import CommandArg, RegexGroup, Command +from nonebot.exception import FinishedException from services.log import logger from configs.path_config import DATA_PATH from utils.message_builder import custom_forward_msg from ._model import WordBank -from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, Message, MessageEvent, PrivateMessageEvent +from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, Message, MessageEvent, PrivateMessageEvent, unescape from nonebot import on_command, on_regex from configs.config import Config from ._data_source import delete_word, update_word, show_word @@ -126,7 +128,7 @@ async def _( temp += f"[at:{g.data['qq']}]" problem = temp break - index = len((word_scope or "") + "添加词条" + (word_type or "") + problem) + 1 + index = len((word_scope or "") + "添加词条" + (word_type or "") + unescape(problem)) + 1 event.message[0] = event.message[0].data["text"][index + 1 :].strip() state["word_scope"] = word_scope state["word_type"] = word_type @@ -144,6 +146,12 @@ async def _( problem_image: Message = Arg("problem_image"), ): try: + if word_type == "正则": + try: + problem = unescape(problem) + re.compile(problem) + except re.error: + await add_word.finish(f"添加词条失败,正则表达式 {problem} 非法!") await WordBank.add_problem_answer( event.user_id, event.group_id if isinstance(event, GroupMessageEvent) and (not word_scope or word_scope == '1') else 0, @@ -153,6 +161,8 @@ async def _( answer, ) except Exception as e: + if isinstance(e, FinishedException): + await add_word.finish() logger.error( f"(USER {event.user_id}, GROUP " f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'})"