2022-08-22 09:49:33 +08:00
|
|
|
import imagehash
|
|
|
|
|
from PIL import Image
|
|
|
|
|
from io import BytesIO
|
|
|
|
|
from httpx import TimeoutException
|
2022-08-21 13:37:03 +08:00
|
|
|
|
|
|
|
|
from services import logger
|
2022-02-19 18:20:19 +08:00
|
|
|
from ._rule import check
|
2022-08-21 13:37:03 +08:00
|
|
|
from ._model import WordBank
|
2022-08-22 09:49:33 +08:00
|
|
|
from configs.path_config import DATA_PATH
|
2022-08-21 13:37:03 +08:00
|
|
|
from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent
|
|
|
|
|
from utils.utils import get_message_img, get_message_text, get_message_at
|
2021-11-23 21:44:59 +08:00
|
|
|
from nonebot import on_message
|
2022-08-21 13:37:03 +08:00
|
|
|
from utils.http_utils import AsyncHttpx
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
__zx_plugin_name__ = "词库问答回复操作 [Hidden]"
|
|
|
|
|
|
2022-02-19 18:20:19 +08:00
|
|
|
data_dir = DATA_PATH / "word_bank"
|
2021-11-23 21:44:59 +08:00
|
|
|
data_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
2022-04-03 20:05:18 +08:00
|
|
|
message_handle = on_message(priority=6, block=True, rule=check)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@message_handle.handle()
|
2022-08-21 13:37:03 +08:00
|
|
|
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:
|
2022-08-22 09:49:33 +08:00
|
|
|
try:
|
|
|
|
|
r = await AsyncHttpx.get(img[0])
|
|
|
|
|
problem = str(imagehash.average_hash(Image.open(BytesIO(r.content))))
|
|
|
|
|
except TimeoutException:
|
|
|
|
|
logger.error(f"下载 {img[0]} 下载超时..")
|
2022-08-21 13:37:03 +08:00
|
|
|
elif at:
|
|
|
|
|
temp = ''
|
|
|
|
|
for seg in event.message:
|
|
|
|
|
if seg.type == 'at':
|
|
|
|
|
temp += f"[at:{seg.data['qq']}]"
|
2022-08-21 21:58:31 +08:00
|
|
|
elif isinstance(seg, str):
|
2022-08-21 13:37:03 +08:00
|
|
|
temp += seg
|
2022-08-21 21:58:31 +08:00
|
|
|
elif seg.type == 'text':
|
|
|
|
|
temp += seg.data["text"]
|
2022-08-21 13:37:03 +08:00
|
|
|
problem = temp
|
|
|
|
|
elif text:
|
|
|
|
|
problem = text
|
|
|
|
|
if 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}"
|
2022-05-14 15:47:33 +08:00
|
|
|
)
|
|
|
|
|
|
2022-06-19 17:24:50 +08:00
|
|
|
|
|
|
|
|
|