diff --git a/src/api/__init__.py b/src/api/__init__.py new file mode 100644 index 000000000..359eff96e --- /dev/null +++ b/src/api/__init__.py @@ -0,0 +1 @@ +# This file makes src/api a Python package. \ No newline at end of file diff --git a/src/api/message_router.py b/src/api/message_router.py new file mode 100644 index 000000000..687f48f1e --- /dev/null +++ b/src/api/message_router.py @@ -0,0 +1,48 @@ +import time +from typing import Literal + +from fastapi import APIRouter, HTTPException, Query + +from src.config.config import global_config +from src.plugin_system.apis import message_api + +router = APIRouter() + +@router.get("/messages/recent") +async def get_message_stats( + days: int = Query(1, ge=1, description="指定查询过去多少天的数据"), + message_type: Literal["all", "sent", "received"] = Query("all", description="筛选消息类型: 'sent' (BOT发送的), 'received' (BOT接收的), or 'all' (全部)") +): + """ + 获取BOT在指定天数内的消息统计数据。 + """ + try: + end_time = time.time() + start_time = end_time - (days * 24 * 3600) + + messages = await message_api.get_messages_by_time(start_time, end_time) + + sent_count = 0 + received_count = 0 + bot_qq = str(global_config.bot.qq_account) + + for msg in messages: + if msg.get("user_id") == bot_qq: + sent_count += 1 + else: + received_count += 1 + if message_type == "sent": + return {"days": days, "message_type": message_type, "count": sent_count} + elif message_type == "received": + return {"days": days, "message_type": message_type, "count": received_count} + else: + return { + "days": days, + "message_type": message_type, + "sent_count": sent_count, + "received_count": received_count, + "total_count": len(messages) + } + + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) diff --git a/src/chat/express/expression_learner.py b/src/chat/express/expression_learner.py index f9e0e68af..517204351 100644 --- a/src/chat/express/expression_learner.py +++ b/src/chat/express/expression_learner.py @@ -511,11 +511,11 @@ class ExpressionLearnerManager: os.path.join(base_dir, "learnt_grammar"), ] - for directory in directories_to_create: - try: + try: + for directory in directories_to_create: os.makedirs(directory, exist_ok=True) - logger.debug(f"确保目录存在: {directory}") - except Exception as e: + logger.debug(f"确保目录存在: {directory}") + except Exception as e: logger.error(f"创建目录失败 {directory}: {e}") @staticmethod diff --git a/src/main.py b/src/main.py index 68d8e0801..8236f7472 100644 --- a/src/main.py +++ b/src/main.py @@ -245,6 +245,16 @@ MoFox_Bot(第三方修改版) # start_api_server() # logger.info("API服务器启动成功") + # 注册API路由 + try: + from src.api.message_router import router as message_router + self.server.register_router(message_router, prefix="/api") + logger.info("API路由注册成功") + except ImportError as e: + logger.error(f"导入API路由失败: {e}") + except Exception as e: + logger.error(f"注册API路由时发生错误: {e}") + # 加载所有actions,包括默认的和插件的 plugin_manager.load_all_plugins() diff --git a/src/plugins/built_in/proactive_thinker/_manifest.json b/src/plugins/built_in/proactive_thinker/_manifest.json index 0ad67e293..30f2a138e 100644 --- a/src/plugins/built_in/proactive_thinker/_manifest.json +++ b/src/plugins/built_in/proactive_thinker/_manifest.json @@ -12,7 +12,7 @@ "host_application": { "min_version": "0.10.0" }, - "keywords": ["emoji", "reaction", "like", "表情", "回应", "点赞"], + "keywords": ["主动思考","自己发消息"], "categories": ["Chat", "Integration"], "default_locale": "zh-CN", diff --git a/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py b/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py index 8af6bbc35..78d2d6462 100644 --- a/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py +++ b/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py @@ -292,7 +292,7 @@ class ProactiveThinkerExecutor: - **简单问候作为备选**: 如果上下文中没有合适的话题,可以生成一个简单、真诚的日常问候(例如“在忙吗?”,“下午好呀~”)。 - **避免抽象**: 避免创造过于复杂、抽象或需要对方思考很久才能明白的话题。目标是轻松、自然地开启对话。 - **避免过于频繁**: 如果你最近(尤其是在最近的几次决策中)已经主动发起过对话,请倾向于选择“不回复”,除非有非常重要和紧急的事情。 - +- **避免打扰**: 如果你最近(尤其是在最近的几次决策中)已经主动发起过对话,请倾向于选择“不回复”,除非有非常重要和紧急的事情。 --- 示例1 (基于上下文):