diff --git a/nonebot_plugin_marshoai/plugins/builtin_tools/__init__.py b/nonebot_plugin_marshoai/plugins/builtin_tools/__init__.py index 57a5fba6..7c072af8 100644 --- a/nonebot_plugin_marshoai/plugins/builtin_tools/__init__.py +++ b/nonebot_plugin_marshoai/plugins/builtin_tools/__init__.py @@ -1,12 +1,12 @@ from nonebot_plugin_marshoai.plugin import PluginMetadata +from .chat import * from .file_io import * from .manager import * from .network import * __marsho_meta__ = PluginMetadata( name="内置增强组件", - version="0.0.1", description="内置工具插件", author="MarshoTeam of LiteyukiStudio", ) diff --git a/nonebot_plugin_marshoai/plugins/builtin_tools/chat.py b/nonebot_plugin_marshoai/plugins/builtin_tools/chat.py new file mode 100644 index 00000000..7927c3e6 --- /dev/null +++ b/nonebot_plugin_marshoai/plugins/builtin_tools/chat.py @@ -0,0 +1,74 @@ +from nonebot.adapters.onebot.v11 import ( + Bot, + GroupMessageEvent, + MessageEvent, + PrivateMessageEvent, +) +from nonebot.exception import FinishedException +from nonebot.permission import SUPERUSER + +from nonebot_plugin_marshoai.plugin import String, on_function_call + + +@on_function_call(description="获取当前会话信息,比如群聊或用户的身份信息").permission( + SUPERUSER +) +async def get_session_info(bot: Bot, event: MessageEvent) -> str: + """获取当前会话信息,比如群聊或用户的身份信息 + + Args: + bot (Bot): Bot对象 + + Returns: + str: 会话信息 + """ + if isinstance(event, PrivateMessageEvent): + return f"当前会话为私聊,用户ID: {event.user_id}" + elif isinstance(event, GroupMessageEvent): + return f"当前会话为群聊,群组ID: {event.group_id}, 用户ID: {event.user_id}" + else: + return "未知会话类型" + + +@on_function_call(description="发送消息到指定用户").params( + user=String(description="用户ID"), message=String(description="消息内容") +).permission(SUPERUSER) +async def send_message(user: str, message: str, bot: Bot) -> str: + """发送消息到指定用户,实验性功能,仅限onebotv11适配器 + + Args: + user (str): 用户ID + message (str): 消息内容 + + Returns: + str: 发送结果 + """ + try: + await bot.send_private_msg(user_id=int(user), message=message) + return "发送成功" + except FinishedException as e: + return "发送完成" + except Exception as e: + return "发送失败: " + str(e) + + +@on_function_call(description="发送消息到指定群组").params( + group=String(description="群组ID"), message=String(description="消息内容") +).permission(SUPERUSER) +async def send_group_message(group: str, message: str, bot: Bot) -> str: + """发送消息到指定群组,实验性功能,仅限onebotv11适配器 + + Args: + group (str): 群组ID + message (str): 消息内容 + + Returns: + str: 发送结果 + """ + try: + await bot.send_group_msg(group_id=int(group), message=message) + return "发送成功" + except FinishedException as e: + return "发送完成" + except Exception as e: + return "发送失败: " + str(e) diff --git a/nonebot_plugin_marshoai/plugins/builtin_tools/file_io.py b/nonebot_plugin_marshoai/plugins/builtin_tools/file_io.py index 4ee2c748..b7957e67 100644 --- a/nonebot_plugin_marshoai/plugins/builtin_tools/file_io.py +++ b/nonebot_plugin_marshoai/plugins/builtin_tools/file_io.py @@ -21,3 +21,24 @@ async def read_file(fp: str) -> str: return await f.read() except Exception as e: return "读取出错: " + str(e) + + +@on_function_call(description="写入内容到设备上本地文件").params( + fp=String(description="文件路径"), content=String(description="写入内容") +).permission(SUPERUSER) +async def write_file(fp: str, content: str) -> str: + """写入内容到设备上本地文件 + + Args: + fp (str): 文件路径 + content (str): 写入内容 + + Returns: + str: 写入结果 + """ + try: + async with aiofiles.open(fp, "w", encoding="utf-8") as f: + await f.write(content) + return "写入成功" + except Exception as e: + return "写入出错: " + str(e)