mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-19 18:47:41 +08:00
Merge pull request #1194 from Raven95676/tools
feat: StarTools添加数据目录获取接口
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
import inspect
|
||||
from typing import Union, Awaitable, List, Optional, ClassVar
|
||||
from astrbot.core.message.components import BaseMessageComponent
|
||||
from astrbot.core.message.message_event_result import MessageChain
|
||||
from astrbot.api.platform import MessageMember, AstrBotMessage
|
||||
from astrbot.core.platform.astr_message_event import MessageSesion
|
||||
from astrbot.core.star.context import Context
|
||||
from astrbot.core.star.star import star_map
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class StarTools:
|
||||
@@ -142,3 +145,48 @@ class StarTools:
|
||||
name (str): 工具名称
|
||||
"""
|
||||
cls._context.unregister_llm_tool(name)
|
||||
|
||||
@classmethod
|
||||
def get_data_dir(cls, plugin_name: Optional[str]) -> Path:
|
||||
"""
|
||||
返回插件数据目录的绝对路径。
|
||||
|
||||
此方法会在 data/plugin_data 目录下为插件创建一个专属的数据目录。如果未提供插件名称,
|
||||
会自动从调用栈中获取插件信息。
|
||||
|
||||
Args:
|
||||
plugin_name: 可选的插件名称。如果为None,将自动检测调用者的插件名称。
|
||||
|
||||
Returns:
|
||||
Path (Path): 插件数据目录的绝对路径,位于 data/plugin_data/{plugin_name}。
|
||||
|
||||
Raises:
|
||||
RuntimeError: 当出现以下情况时抛出:
|
||||
- 无法获取调用者模块信息
|
||||
- 无法获取模块的元数据信息
|
||||
- 创建目录失败(权限不足或其他IO错误)
|
||||
"""
|
||||
if not plugin_name:
|
||||
frame = inspect.currentframe().f_back
|
||||
module = inspect.getmodule(frame)
|
||||
|
||||
if not module:
|
||||
raise RuntimeError("无法获取调用者模块信息")
|
||||
|
||||
metadata = star_map.get(module.__name__, None)
|
||||
|
||||
if not metadata:
|
||||
raise RuntimeError(f"无法获取模块 {module.__name__} 的元数据信息")
|
||||
|
||||
plugin_name = metadata.name
|
||||
|
||||
data_dir = Path("data/plugin_data") / plugin_name
|
||||
|
||||
try:
|
||||
data_dir.mkdir(parents=True, exist_ok=True)
|
||||
except OSError as e:
|
||||
if isinstance(e, PermissionError):
|
||||
raise RuntimeError(f"无法创建目录 {data_dir}:权限不足") from e
|
||||
raise RuntimeError(f"无法创建目录 {data_dir}:{e!s}") from e
|
||||
|
||||
return data_dir.resolve()
|
||||
|
||||
Reference in New Issue
Block a user