nonebot_plugin_novelai/outofdate/explicit_api.py

55 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from ..config import config, nickname
from ..utils.save import save_img
from io import BytesIO
import base64
import aiohttp
import asyncio
from nonebot.adapters.onebot.v11 import MessageSegment
from nonebot.log import logger
async def check_safe_method(fifo, img_bytes, message):
if config.novelai_h:
for i in img_bytes:
await save_img(fifo, i)
message += MessageSegment.image(i)
else:
nsfw_count = 0
for i in img_bytes:
try:
label = await check_safe(i)
except RuntimeError as e:
logger.error(f"NSFWAPI调用失败错误代码为{e.args}")
label = "unknown"
if label != "explicit":
message += MessageSegment.image(i)
else:
nsfw_count += 1
await save_img(fifo, i, label)
if nsfw_count > 0:
message += f"\n{nsfw_count}张图片太涩了,{nickname}已经帮你吃掉了哦"
return message
async def check_safe(img_bytes: BytesIO):
# 检查图片是否安全
start = "data:image/jpeg;base64,"
image = img_bytes.getvalue()
image = str(base64.b64encode(image), "utf-8")
str0 = start + image
# 重试三次
for i in range(3):
async with aiohttp.ClientSession() as session:
# 调用API
async with session.post('https://hf.space/embed/mayhug/rainchan-image-porn-detection/api/predict/',
json={"data": [str0]}) as resp:
if resp.status == 200:
jsonresult = await resp.json()
break
else:
await asyncio.sleep(2)
error = resp.status
else:
raise RuntimeError(error)
return jsonresult["data"][0]["label"]