refactor🎨: 优化图库

This commit is contained in:
HibiKier
2023-08-18 00:42:10 +08:00
parent 48b720b00a
commit 38abb74c4c
6 changed files with 38 additions and 25 deletions
+5 -1
View File
@@ -64,7 +64,7 @@
* 通过Config配置项将所有插件配置统计保存至config.yaml,利于统一用户修改 * 通过Config配置项将所有插件配置统计保存至config.yaml,利于统一用户修改
* 方便增删插件,原生nonebot2 matcher,不需要额外修改,仅仅通过简单的配置属性就可以生成`帮助图片`和`帮助信息` * 方便增删插件,原生nonebot2 matcher,不需要额外修改,仅仅通过简单的配置属性就可以生成`帮助图片`和`帮助信息`
* 提供了cd,阻塞,每日次数等限制,仅仅通过简单的属性就可以生成一个限制,例如:`__plugin_cd_limit__` * 提供了cd,阻塞,每日次数等限制,仅仅通过简单的属性就可以生成一个限制,例如:`__plugin_cd_limit__`
* __..... 更多详细请通过`传送门`查看文档!__ * **..... 更多详细请通过`传送门`查看文档!**
## 功能列表 ## 功能列表
@@ -331,6 +331,10 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能
## 更新 ## 更新
### 2023/8/7
* 添加 本地图库插件 防吞图特性 [@pull/1468](https://github.com/HibiKier/zhenxun_bot/pull/1468)
### 2023/5/28 ### 2023/5/28
* 修复群聊数据无法初始化 * 修复群聊数据无法初始化
+2 -2
View File
@@ -51,8 +51,8 @@ cx = on_message(priority=9999, block=False, rule=lambda: False)
# 早上好 # 早上好
@scheduler.scheduled_job( @scheduler.scheduled_job(
"cron", "cron",
hour=20, hour=6,
minute=44, minute=1,
) )
async def _(): async def _():
img = image(IMAGE_PATH / "zhenxun" / "zao.jpg") img = image(IMAGE_PATH / "zhenxun" / "zao.jpg")
+1 -1
View File
@@ -2,7 +2,7 @@ import time
from typing import Any, Tuple from typing import Any, Tuple
from nonebot import on_regex from nonebot import on_regex
from nonebot.adapters.onebot.v11 import Bot, MessageEvent from nonebot.adapters.onebot.v11 import MessageEvent
from nonebot.params import RegexGroup from nonebot.params import RegexGroup
from configs.config import Config from configs.config import Config
+18 -12
View File
@@ -1,18 +1,21 @@
import os import os
import random import random
from typing import List
from nonebot import on_message, on_regex from nonebot import on_message, on_regex
from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent from nonebot.adapters.onebot.v11 import Message, MessageEvent
from nonebot.params import CommandArg
from configs.config import Config from configs.config import Config
from configs.path_config import IMAGE_PATH from configs.path_config import IMAGE_PATH
from services.log import logger from services.log import logger
from utils.depends import GetConfig
from utils.manager import withdraw_message_manager from utils.manager import withdraw_message_manager
from utils.message_builder import image from utils.message_builder import image
from utils.utils import FreqLimiter, cn2py, get_message_text, is_number from utils.utils import FreqLimiter, cn2py, get_message_text, is_number
from .rule import rule
from .anti import pix_random_change_file from .anti import pix_random_change_file
from .rule import rule
__zx_plugin_name__ = "本地图库" __zx_plugin_name__ = "本地图库"
__plugin_usage__ = f""" __plugin_usage__ = f"""
@@ -51,9 +54,11 @@ _path = IMAGE_PATH / "image_management"
@send_img.handle() @send_img.handle()
async def _(event: MessageEvent): async def _(
image_dir_list = Config.get_config("image_management", "IMAGE_DIR_LIST") or [] event: MessageEvent,
msg = get_message_text(event.json()).split() image_dir_list: List[str] = GetConfig("image_management", "IMAGE_DIR_LIST", []),
):
msg = get_message_text(event.message).split()
gallery = msg[0] gallery = msg[0]
if gallery not in image_dir_list: if gallery not in image_dir_list:
return return
@@ -67,17 +72,15 @@ async def _(event: MessageEvent):
else: else:
path.mkdir(parents=True, exist_ok=True) path.mkdir(parents=True, exist_ok=True)
length = len(os.listdir(path)) length = len(os.listdir(path))
if length == 0: if not length:
logger.warning(f"图库 {cn2py(gallery)} 为空,调用取消!") logger.warning(f"图库 {cn2py(gallery)} 为空,调用取消!")
await send_img.finish("该图库中没有图片噢") await send_img.finish("该图库中没有图片噢...")
index = img_id if img_id else str(random.randint(0, length - 1)) index = img_id if img_id else str(random.randint(0, length - 1))
if not is_number(index): if not is_number(index):
return return
if int(index) > length - 1 or int(index) < 0: if int(index) > length - 1 or int(index) < 0:
await send_img.finish(f"超过当前上下限!({length - 1})") await send_img.finish(f"超过当前图库的上下限了哦!({length - 1})")
abs_path = os.path.join(os.getcwd(), path / f"{index}.jpg") result = image(pix_random_change_file(path / f"{index}.jpg"))
pix_random_change_file(abs_path)
result = image(path / f"{index}.jpg")
if result: if result:
logger.info( logger.info(
f"发送{cn2py(gallery)}:" + str(path / f"{index}.jpg"), f"发送{cn2py(gallery)}:" + str(path / f"{index}.jpg"),
@@ -97,7 +100,7 @@ async def _(event: MessageEvent):
) )
else: else:
logger.info( logger.info(
f"发送 {cn2py(gallery)} 失败", f"发送 {cn2py(gallery)} 不存在",
"发送图片", "发送图片",
event.user_id, event.user_id,
getattr(event, "group_id", None), getattr(event, "group_id", None),
@@ -109,6 +112,9 @@ async def _(event: MessageEvent):
async def _(event: MessageEvent): async def _(event: MessageEvent):
if _flmt.check(event.user_id): if _flmt.check(event.user_id):
_flmt.start_cd(event.user_id) _flmt.start_cd(event.user_id)
path = IMAGE_PATH / "pa"
if not path.exists() or not os.listdir(IMAGE_PATH / "pa"):
await pa_reg.finish("该图库中没有图片噢...")
await pa_reg.finish( await pa_reg.finish(
image(IMAGE_PATH / "pa" / random.choice(os.listdir(IMAGE_PATH / "pa"))) image(IMAGE_PATH / "pa" / random.choice(os.listdir(IMAGE_PATH / "pa")))
) )
+10 -7
View File
@@ -1,6 +1,8 @@
import cv2
import random import random
import warnings import warnings
from pathlib import Path
import cv2
import numpy as np import numpy as np
from PIL import Image from PIL import Image
@@ -8,16 +10,17 @@ from PIL import Image
def pix_random_change(img): def pix_random_change(img):
# Image转cv2 # Image转cv2
img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR) img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
img[0, 0, 0] = random.randint(0, 0xfffffff) img[0, 0, 0] = random.randint(0, 0xFFFFFFF)
# cv2转Image # cv2转Image
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
return img return img
def pix_random_change_file(path: str): def pix_random_change_file(path: Path):
# 注意:cv2.imread()不支持路径中文 # 注意:cv2.imread()不支持路径中文
str_path = str(path.absolute())
warnings.filterwarnings("ignore", category=Warning) warnings.filterwarnings("ignore", category=Warning)
img = cv2.imread(path) img = cv2.imread(str_path)
img[0, 0, 0] = random.randint(0, 0xfffffff) img[0, 0, 0] = random.randint(0, 0xFFFFFFF)
cv2.imwrite(path, img) cv2.imwrite(str_path, img)
return str_path
+2 -2
View File
@@ -1,4 +1,4 @@
from typing import Callable, List, Optional, Tuple, Union from typing import Any, Callable, List, Optional, Tuple, Union
from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent
from nonebot.internal.matcher import Matcher from nonebot.internal.matcher import Matcher
@@ -87,7 +87,7 @@ def CostGold(gold: int):
def GetConfig( def GetConfig(
module: Optional[str] = None, module: Optional[str] = None,
config: str = "", config: str = "",
default_value: Optional[str] = None, default_value: Any = None,
prompt: Optional[str] = None, prompt: Optional[str] = None,
): ):
""" """