mirror of
https://github.com/FuQuan233/nonebot-plugin-llmchat.git
synced 2026-05-13 12:02:50 +00:00
✨ 添加定时任务创建与提醒能力
This commit is contained in:
parent
3def80b047
commit
b8cf6ea152
4 changed files with 754 additions and 4 deletions
|
|
@ -12,6 +12,7 @@ from nonebot import logger
|
|||
|
||||
from .config import MCPServerConfig, transportType
|
||||
from .onebottools import OneBotTools
|
||||
from .scheduler import SchedulerManager
|
||||
|
||||
|
||||
class MCPClient:
|
||||
|
|
@ -39,6 +40,8 @@ class MCPClient:
|
|||
self._cache_initialized = False
|
||||
# 初始化OneBot工具
|
||||
self.onebot_tools = OneBotTools()
|
||||
# 初始化定时任务管理器
|
||||
self.scheduler_manager = SchedulerManager.get_instance()
|
||||
self._initialized = True
|
||||
logger.debug("MCPClient单例初始化成功")
|
||||
|
||||
|
|
@ -114,7 +117,7 @@ class MCPClient:
|
|||
)
|
||||
read, write, session_callback = transport
|
||||
case _:
|
||||
raise ValueError("Unknown transport type")
|
||||
raise ValueError("Server config must have either url or command")
|
||||
|
||||
self.session = await self.exit_stack.enter_async_context(ClientSession(read, write))
|
||||
await self.session.initialize()
|
||||
|
|
@ -164,10 +167,20 @@ class MCPClient:
|
|||
if is_group:
|
||||
# 群聊场景,包含OneBot工具和MCP工具
|
||||
available_tools.extend(self.onebot_tools.get_available_tools())
|
||||
# 添加定时任务工具(群聊和私聊都可用)
|
||||
available_tools.extend(self.scheduler_manager.get_available_tools())
|
||||
logger.debug(f"获取可用工具列表,共{len(available_tools)}个工具")
|
||||
return available_tools
|
||||
|
||||
async def call_tool(self, tool_name: str, tool_args: dict, group_id: int | None = None, bot_id: str | None = None):
|
||||
async def call_tool(
|
||||
self,
|
||||
tool_name: str,
|
||||
tool_args: dict,
|
||||
group_id: int | None = None,
|
||||
bot_id: str | None = None,
|
||||
user_id: int | None = None,
|
||||
is_group: bool = True
|
||||
):
|
||||
"""按需连接调用工具,调用后立即断开"""
|
||||
# 检查是否是OneBot内置工具
|
||||
if tool_name.startswith("ob__"):
|
||||
|
|
@ -176,6 +189,16 @@ class MCPClient:
|
|||
logger.info(f"调用OneBot工具[{tool_name}]")
|
||||
return await self.onebot_tools.call_tool(tool_name, tool_args, group_id, bot_id)
|
||||
|
||||
# 检查是否是定时任务工具
|
||||
if tool_name.startswith("scheduler__"):
|
||||
context_id = group_id if is_group else user_id
|
||||
if context_id is None or user_id is None:
|
||||
return "定时任务工具需要提供context_id和user_id参数"
|
||||
logger.info(f"调用定时任务工具[{tool_name}]")
|
||||
return await self.scheduler_manager.call_tool(
|
||||
tool_name, tool_args, context_id, is_group, user_id
|
||||
)
|
||||
|
||||
# 检查是否是MCP工具
|
||||
if tool_name.startswith("mcp__"):
|
||||
# MCP工具处理:mcp__server_name__tool_name
|
||||
|
|
@ -205,6 +228,10 @@ class MCPClient:
|
|||
if tool_name.startswith("ob__"):
|
||||
return self.onebot_tools.get_friendly_name(tool_name)
|
||||
|
||||
# 检查是否是定时任务工具
|
||||
if tool_name.startswith("scheduler__"):
|
||||
return self.scheduler_manager.get_friendly_name(tool_name)
|
||||
|
||||
# 检查是否是MCP工具
|
||||
if tool_name.startswith("mcp__"):
|
||||
# MCP工具处理:mcp__server_name__tool_name
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue