diff --git a/plugins/word_bank/_rule.py b/plugins/word_bank/_rule.py index f55971bd..54498d6f 100644 --- a/plugins/word_bank/_rule.py +++ b/plugins/word_bank/_rule.py @@ -3,6 +3,7 @@ from PIL import Image from io import BytesIO from httpx import TimeoutException +from nonebot.typing import T_State from nonebot.adapters.onebot.v11 import MessageEvent from utils.utils import get_message_text, get_message_img, get_message_at @@ -10,7 +11,7 @@ from ._model import WordBank from utils.http_utils import AsyncHttpx -async def check(event: MessageEvent) -> bool: +async def check(event: MessageEvent, state: T_State) -> bool: text = get_message_text(event.message) img = get_message_img(event.message) at = get_message_at(event.message) @@ -31,6 +32,7 @@ async def check(event: MessageEvent) -> bool: elif seg.type == 'text': temp += seg.data["text"] problem = temp - if problem: - return await WordBank.check(event, problem) is not None + if problem and (await WordBank.check(event, problem) is not None): + state["problem"] = problem + return True return False diff --git a/plugins/word_bank/message_handle.py b/plugins/word_bank/message_handle.py index da28bf2d..5dc5b14a 100644 --- a/plugins/word_bank/message_handle.py +++ b/plugins/word_bank/message_handle.py @@ -1,16 +1,10 @@ -import imagehash -from PIL import Image -from io import BytesIO -from httpx import TimeoutException - from services import logger from ._rule import check from ._model import WordBank from configs.path_config import DATA_PATH from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent -from utils.utils import get_message_img, get_message_text, get_message_at from nonebot import on_message -from utils.http_utils import AsyncHttpx +from nonebot.typing import T_State __zx_plugin_name__ = "词库问答回复操作 [Hidden]" @@ -21,37 +15,12 @@ message_handle = on_message(priority=6, block=True, rule=check) @message_handle.handle() -async def _(event: MessageEvent): - text = get_message_text(event.message) - img = get_message_img(event.message) - at = get_message_at(event.message) - problem = None - if not text and img and len(img) == 1: - try: - r = await AsyncHttpx.get(img[0]) - problem = str(imagehash.average_hash(Image.open(BytesIO(r.content)))) - except TimeoutException: - logger.error(f"下载 {img[0]} 下载超时..") - elif at: - temp = '' - for seg in event.message: - if seg.type == 'at': - temp += f"[at:{seg.data['qq']}]" - elif isinstance(seg, str): - temp += seg - elif seg.type == 'text': - temp += seg.data["text"] - problem = temp - elif text: - problem = text - if problem: +async def _(event: MessageEvent, state: T_State): + if problem := state.get("problem"): if msg := await WordBank.get_answer(event, problem): await message_handle.send(msg) logger.info( f"(USER {event.user_id}, GROUP " f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'})" f" 触发词条 {problem}" - ) - - - + ) \ No newline at end of file