使用check构造的problem而不在message_handle中重新构造

This commit is contained in:
Cinte 2022-08-22 10:14:59 +08:00
parent 27e97214bd
commit 7ae883d921
2 changed files with 9 additions and 38 deletions

View File

@ -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

View File

@ -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}"
)
)