diff --git a/src/api/message_router.py b/src/api/message_router.py index 687f48f1e..919dacf4b 100644 --- a/src/api/message_router.py +++ b/src/api/message_router.py @@ -46,3 +46,55 @@ async def get_message_stats( except Exception as e: raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/messages/stats_by_chat") +async def get_message_stats_by_chat( + days: int = Query(1, ge=1, description="指定查询过去多少天的数据"), + group_by_user: bool = Query(False, description="是否按用户进行分组统计"), + filter_bot: bool = Query(False, description="是否过滤BOT自身的消息") +): + """ + 获取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) + bot_qq = str(global_config.bot.qq_account) + + if filter_bot: + messages = [msg for msg in messages if msg.get("user_id") != bot_qq] + + stats = {} + + for msg in messages: + chat_id = msg.get("chat_id", "unknown") + user_id = msg.get("user_id") + + if chat_id not in stats: + stats[chat_id] = { + "total_stats": {"sent": 0, "received": 0, "total": 0}, + "user_stats": {} + } + + stats[chat_id]["total_stats"]["total"] += 1 + if user_id == bot_qq: + stats[chat_id]["total_stats"]["sent"] += 1 + else: + stats[chat_id]["total_stats"]["received"] += 1 + + if group_by_user: + if user_id not in stats[chat_id]["user_stats"]: + stats[chat_id]["user_stats"][user_id] = 0 + + stats[chat_id]["user_stats"][user_id] += 1 + + if not group_by_user: + # 如果不按用户分组,则只返回总统计信息 + return {chat_id: data["total_stats"] for chat_id, data in stats.items()} + + return stats + + except Exception as e: + raise HTTPException(status_code=500, detail=str(e))