mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-03 10:40:02 +08:00
Bugfix/fix aliyun (#2036)
* 🐛 修复数据库超时问题 * 🔧 移除帮助图片清理功能. * ✨ 更新插件商店功能,允许在添加插件时指定源类型为 None。优化插件 ID 查找逻辑,增强代码可读性。新增 zhenxun/ui 模块导入。 * 🔧 优化数据访问和数据库上下文逻辑,移除不必要的全局变量和日志信息,调整日志级别为调试,提升代码可读性和性能。 * ✨ 增强插件商店功能,支持在下载文件时指定稀疏检出路径和目标目录。优化二进制文件处理逻辑,提升文件下载的准确性和效率。 * ✨ 增强阿里云和GitHub的文件管理功能,新增Git不可用异常处理,优化稀疏检出逻辑,提升代码可读性和稳定性。 * ✨ 增强插件下载功能,新增对下载结果的异常处理,确保在Git不可用时抛出相应异常信息。优化错误提示,提升用户体验。 * ✨ 增强插件商店功能,优化添加插件时的提示信息,明确区分插件模块和名称。新增 Windows 下删除只读文件的处理逻辑,提升插件管理的稳定性和用户体验。 * ✨ 优化文件内容获取逻辑,新增对非二进制文件的UTF-8解码处理,提升文件读取的稳定性和准确性。
This commit is contained in:
+58
-17
@@ -1,9 +1,12 @@
|
||||
from collections.abc import Callable
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
import os
|
||||
from pathlib import Path
|
||||
import stat
|
||||
import time
|
||||
from typing import ClassVar
|
||||
from types import TracebackType
|
||||
from typing import Any, ClassVar
|
||||
|
||||
import httpx
|
||||
from nonebot_plugin_uninfo import Uninfo
|
||||
@@ -65,22 +68,39 @@ class ResourceDirManager:
|
||||
|
||||
|
||||
def is_binary_file(file_path: str) -> bool:
|
||||
"""判断是否为二进制文件"""
|
||||
binary_extensions = {
|
||||
".jpg",
|
||||
".jpeg",
|
||||
".png",
|
||||
".gif",
|
||||
".bmp",
|
||||
".ico",
|
||||
".pdf",
|
||||
".zip",
|
||||
".rar",
|
||||
".7z",
|
||||
".exe",
|
||||
".dll",
|
||||
}
|
||||
return any(file_path.lower().endswith(ext) for ext in binary_extensions)
|
||||
"""判断是否为二进制文件
|
||||
|
||||
参数:
|
||||
file_path: 文件路径
|
||||
|
||||
返回:
|
||||
bool: 是否为二进制文件
|
||||
"""
|
||||
# fmt: off
|
||||
# 精简但包含图片和字体的二进制文件扩展名集合
|
||||
BINARY_EXTENSIONS = frozenset({
|
||||
# 图片文件
|
||||
"jpg", "jpeg", "png", "gif", "bmp", "ico", "webp", "tiff", "tif", "svg",
|
||||
# 字体文件
|
||||
"ttf", "otf", "woff", "woff2", "eot",
|
||||
# 压缩文件
|
||||
"zip", "rar", "7z", "tar", "gz", "bz2", "xz",
|
||||
# 可执行文件和库
|
||||
"exe", "dll", "so", "dylib",
|
||||
# 文档文件
|
||||
"pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx",
|
||||
# 多媒体文件
|
||||
"mp3", "mp4", "avi", "mov", "wmv", "flv",
|
||||
# 其他常见二进制文件
|
||||
"bin", "dat", "db", "class", "pyc"
|
||||
})
|
||||
|
||||
# 使用os.path.splitext高效提取扩展名
|
||||
_, ext = os.path.splitext(file_path)
|
||||
# 去除点号并转换为小写
|
||||
ext_clean = ext.lstrip(".").lower()
|
||||
|
||||
return ext_clean in BINARY_EXTENSIONS
|
||||
|
||||
|
||||
def cn2py(word: str) -> str:
|
||||
@@ -224,3 +244,24 @@ def is_number(text: str) -> bool:
|
||||
return True
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
|
||||
def win_on_rm_error(
|
||||
func: Callable[[str], Any],
|
||||
path: str,
|
||||
_exc_info: tuple[type[BaseException], BaseException, TracebackType],
|
||||
) -> None:
|
||||
"""Windows下删除只读文件/目录时的回调。
|
||||
|
||||
去除只读属性后重试删除,避免 WinError 5。
|
||||
"""
|
||||
try:
|
||||
os.chmod(path, stat.S_IWRITE)
|
||||
except Exception:
|
||||
# 即使去除权限失败也继续尝试
|
||||
pass
|
||||
try:
|
||||
func(path)
|
||||
except Exception:
|
||||
# 仍失败则记录调试日志并忽略,交由上层继续处理
|
||||
logger.debug(f"删除失败重试仍失败: {path}")
|
||||
|
||||
Reference in New Issue
Block a user