diff --git a/main.py b/main.py index c7acd1a..a322a83 100644 --- a/main.py +++ b/main.py @@ -20,8 +20,6 @@ class MyPlugin(Star): # 注册指令的装饰器 @filter.on_llm_request() async def content_inject(self, event: AstrMessageEvent,req : ProviderRequest): - """这是一个 hello world 指令""" # 这是 handler 的描述,将会被解析方便用户了解插件内容。建议填写。 - # logger.info("系统提示词:"+req.system_prompt) req.extra_user_content_parts.append(TextPart( text=( "-----wt使用----" diff --git a/service/timer.py b/service/timer.py index 0414c92..9f830de 100644 --- a/service/timer.py +++ b/service/timer.py @@ -5,24 +5,26 @@ from astrbot.core.message.message_event_result import MessageChain,Plain from ..tool.pattern import Pattern from astrbot.api.star import Star import asyncio +import json class TimerService: def __init__(self,star:Star) -> None: self.star = star + self.tasks:list[TimerTask] = [] pass # 解析模板并进行定时 def parse(self,event:AstrMessageEvent): res = event.get_result() if not res: - logger.info("[wait_msg]:解析失败:没拿到消息链") + logger.warning("[wait_msg]:解析失败:没拿到消息链") return Second:int|None = None logger.info("[wait_msg]:开始解析模板") for index,i in enumerate(res.chain) : - logger.info(f"获得消息链类型:{i.type}内容:{i}") + logger.info(f"获得消息链类型:{i.type}") if not isinstance(i,Plain) or not i.type == "Plain": continue dump = Pattern(i.text) @@ -39,8 +41,59 @@ class TimerService: # 定时: def timer(self,event:AstrMessageEvent,Sec:int): - asyncio.create_task(self.timer_task()) + logger.info(f"进行一个{Sec}秒的对{event.get_sender_id()}({event.get_sender_name()})的等") + task = asyncio.create_task(self.timer_task(event,Sec)) + self.tasks.append(TimerTask(event=event,task=task)) + + # 等待,唤醒任务本体 + async def timer_task(self,event:AstrMessageEvent,second:int): + await asyncio.sleep(second) + await self.response_time(event) + + # 调用llm + async def response_time(self,event:AstrMessageEvent): + try: + umo = event.unified_msg_origin + conv_mnger = self.star.context.conversation_manager + provider =await self.star.context.get_current_chat_provider_id(umo) + conv_id = await conv_mnger.get_curr_conversation_id(umo) + if conv_id is None: + logger.error(f"conversation_id获取失败!!umo:{umo}") + return False + conversation = await conv_mnger.get_conversation(umo,conv_id) + if conversation is None : + conversation = [] + try: + history_list = json.loads(conversation.history) + except: + logger.warning("上下文获取失败,使用空上下文喵") + history_list = [] + + except: + logger.error("消息管理失败!") + return False + # logger.debug(f"获取上下文:{conversation}") + try: + req = await self.star.context.llm_generate( + chat_provider_id=provider, + prompt="<你等待的时间内对方没有回复>", + contexts=history_list, + tools=None + + ) + except: + logger.error("llm返回失败了喵...QAQ") + return + logger.debug(f"llm结果:{req.completion_text }") + + # 保存至历史消息 + + #发送至平台 + await event.send(MessageChain().message(req.completion_text)) + +class TimerTask: + def __init__(self,event:AstrMessageEvent,task:asyncio.Task) -> None: + self.event = event + self.task = task + pass - async def timer_task(self): - await asyncio.sleep(1) - logger.warning("awa现在过去一秒了哦") \ No newline at end of file diff --git a/tool/pattern.py b/tool/pattern.py index 6e6526a..25768ff 100644 --- a/tool/pattern.py +++ b/tool/pattern.py @@ -48,7 +48,7 @@ class Pattern: #消除不完整/非法模板 o_str= o_str.replace("","") o_str=o_str.replace("","") - logger.info(f"过滤后消息:{o_str}") + logger.debug(f"过滤后消息:{o_str}") return { "content":o_str,