From c907b1518c204dda3dd673fe57bc72935d6c2591 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Sun, 30 Mar 2025 12:08:07 +0800 Subject: [PATCH] update --- app/api/endpoints/wecom.py | 182 +++++++++++++++++++++++++++++++++---- app/core/wecomclient.py | 19 +++- jobs.sqlite | Bin 24576 -> 24576 bytes 3 files changed, 178 insertions(+), 23 deletions(-) diff --git a/app/api/endpoints/wecom.py b/app/api/endpoints/wecom.py index b0bd205..814ca74 100644 --- a/app/api/endpoints/wecom.py +++ b/app/api/endpoints/wecom.py @@ -18,6 +18,7 @@ from sqlalchemy.orm import Session from app.core.response import error_response, success_response, ResponseModel from pydantic import BaseModel from app.models.wecom_external_chat import WecomExternalChatDB, WecomExternalChatInfo, WecomExternalChatMemberDB, WecomExternalChatMemberInfo +from datetime import datetime router = APIRouter() @@ -133,26 +134,80 @@ async def wechat_corp_callback( update_detail = msg_root.find('UpdateDetail').text join_user_id = None - if update_detail == 'add_member' and msg_root.find('JoinScene') is not None: + quit_user_ids = [] + + # 处理成员加入事件 + if update_detail == 'add_member': logger.info(f"有新成员加入群聊") - # 获取加入的成员ID - join_user_id_elem = msg_root.find('JoinUserID') - if join_user_id_elem is not None: - join_user_id = join_user_id_elem.text + join_scene_elem = msg_root.find('JoinScene') + join_scene = int(join_scene_elem.text) if join_scene_elem is not None else 0 + logger.info(f"加入场景: {join_scene}") + + # 获取加入成员列表 + mem_change_list = msg_root.find('MemChangeList') + if mem_change_list is not None: + for item in mem_change_list.findall('Item'): + join_user_id = item.text + if join_user_id: + logger.info(f"从MemChangeList中获取到新加入成员: {join_user_id}") + # 处理群聊变更事件 - 添加单个成员 + await wecom_client.handle_chat_change_event( + chat_id=chat_id, + change_type=change_type, + update_detail=update_detail, + join_user_id=join_user_id + ) + logger.info(f"发送欢迎消息到群聊:{chat_id}") + await wecom_client.send_welcome_message(chat_id) + + # 兼容旧格式,如果找不到MemChangeList,尝试JoinUserID + elif msg_root.find('JoinUserID') is not None: + join_user_id = msg_root.find('JoinUserID').text + if join_user_id: + logger.info(f"从JoinUserID中获取到新加入成员: {join_user_id}") + # 处理群聊变更事件 - 添加单个成员 + await wecom_client.handle_chat_change_event( + chat_id=chat_id, + change_type=change_type, + update_detail=update_detail, + join_user_id=join_user_id + ) + logger.info(f"发送欢迎消息到群聊:{chat_id}") + await wecom_client.send_welcome_message(chat_id) + + # 处理成员离开事件 + elif update_detail == 'del_member': + logger.info(f"有成员离开群聊") + quit_scene_elem = msg_root.find('QuitScene') + quit_scene = int(quit_scene_elem.text) if quit_scene_elem is not None else 0 + + # 获取离开成员列表 + mem_change_list = msg_root.find('MemChangeList') + if mem_change_list is not None: + for item in mem_change_list.findall('Item'): + quit_user_id = item.text + if quit_user_id: + quit_user_ids.append(quit_user_id) + # 处理成员离开 + await wecom_client.handle_chat_change_event( + chat_id=chat_id, + change_type=change_type, + update_detail=update_detail, + join_user_id=quit_user_id # 复用这个参数名来表示离开的用户ID + ) + + logger.info(f"离开场景: {quit_scene}, 离开成员: {quit_user_ids}") - logger.info(f"chat_id: {chat_id}, change_type: {change_type}, update_detail: {update_detail}, join_user_id: {join_user_id}") + logger.info(f"chat_id: {chat_id}, change_type: {change_type}, update_detail: {update_detail}, join_user_id: {join_user_id}, quit_user_ids: {quit_user_ids}") - # 处理群聊变更事件 - await wecom_client.handle_chat_change_event( - chat_id=chat_id, - change_type=change_type, - update_detail=update_detail, - join_user_id=join_user_id - ) - - if update_detail == 'add_member' and join_user_id: - logger.info(f"发送欢迎消息到群聊:{chat_id}") - await wecom_client.send_welcome_message(chat_id) + # 处理其他群聊变更事件(不是add_member和del_member) + if update_detail != 'add_member' and update_detail != 'del_member': + # 其他群聊变更事件 + await wecom_client.handle_chat_change_event( + chat_id=chat_id, + change_type=change_type, + update_detail=update_detail + ) return Response(content="success", media_type="text/plain") @@ -307,6 +362,23 @@ async def chat_dashboard( text-decoration: none; } .btn:hover { background-color: #286090; } + .stats { + background-color: #f5f5f5; + border: 1px solid #ddd; + border-radius: 4px; + padding: 15px; + margin-bottom: 20px; + } + .stat-item { + display: inline-block; + margin-right: 30px; + font-size: 16px; + } + .stat-number { + font-size: 24px; + font-weight: bold; + color: #337ab7; + }