2022-08-22 09:49:33 +08:00
|
|
|
|
import imagehash
|
|
|
|
|
|
from PIL import Image
|
|
|
|
|
|
from io import BytesIO
|
2022-10-22 18:12:55 +08:00
|
|
|
|
from services.log import logger
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
2022-08-22 10:14:59 +08:00
|
|
|
|
from nonebot.typing import T_State
|
2022-12-11 00:10:07 +08:00
|
|
|
|
from nonebot.adapters.onebot.v11 import MessageEvent, Bot
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
2022-08-21 13:37:03 +08:00
|
|
|
|
from utils.utils import get_message_text, get_message_img, get_message_at
|
|
|
|
|
|
from ._model import WordBank
|
|
|
|
|
|
from utils.http_utils import AsyncHttpx
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-12-11 00:10:07 +08:00
|
|
|
|
async def check(bot: Bot, event: MessageEvent, state: T_State) -> bool:
|
2022-08-21 13:37:03 +08:00
|
|
|
|
text = get_message_text(event.message)
|
|
|
|
|
|
img = get_message_img(event.message)
|
|
|
|
|
|
at = get_message_at(event.message)
|
|
|
|
|
|
problem = text
|
|
|
|
|
|
if not text 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))))
|
2022-10-22 18:12:55 +08:00
|
|
|
|
except Exception as e:
|
|
|
|
|
|
logger.warning(f"word_bank rule 获取图片失败 {type(e)}:{e}")
|
2022-08-21 13:37:03 +08:00
|
|
|
|
if 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 seg.type == 'text':
|
|
|
|
|
|
temp += seg.data["text"]
|
2022-08-21 13:37:03 +08:00
|
|
|
|
problem = temp
|
2022-12-11 00:10:07 +08:00
|
|
|
|
if event.to_me and bot.config.nickname:
|
|
|
|
|
|
if str(event.original_message).startswith("[CQ:at"):
|
|
|
|
|
|
problem = f"[at:{bot.self_id}]" + problem
|
|
|
|
|
|
else:
|
|
|
|
|
|
if problem and bot.config.nickname:
|
|
|
|
|
|
nickname = [nk for nk in bot.config.nickname if str(event.original_message).startswith(nk)]
|
|
|
|
|
|
problem = nickname[0] + problem if nickname else problem
|
2022-08-22 10:14:59 +08:00
|
|
|
|
if problem and (await WordBank.check(event, problem) is not None):
|
|
|
|
|
|
state["problem"] = problem
|
|
|
|
|
|
return True
|
2021-11-23 21:44:59 +08:00
|
|
|
|
return False
|