From 2d442c22b08d00f86aef32db77cb799581a90ffc Mon Sep 17 00:00:00 2001 From: H Vs Date: Fri, 7 Mar 2025 11:45:48 +0800 Subject: [PATCH] =?UTF-8?q?=E9=82=80=E8=AF=B7=E5=A5=BD=E5=8F=8B=E5=85=A5?= =?UTF-8?q?=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/messages_resource.py | 38 ++++++++++++++++++++++++++++++++-- wechat/gewe_chat.py | 18 +++++++++++++++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/resources/messages_resource.py b/resources/messages_resource.py index 607e7cc..2fcbef3 100644 --- a/resources/messages_resource.py +++ b/resources/messages_resource.py @@ -635,17 +635,23 @@ def handle_xml(token_id,app_id, wxid,msg_data,from_wxid, to_wxid): type_value = root.find(".//appmsg/type").text handlers = { 57: handle_xml_reference, + 5: handle_xml_invite_group } handler = handlers.get(type_value) if handler: return handler(token_id,app_id, wxid,msg_data,from_wxid, to_wxid) - elif "邀请你加入了群聊" in msg_content_xml: # 邀请加入群聊 - logger.warning(f"xml消息 {type_value} 邀请你加入了群聊.todo") + # elif "邀请你加入了群聊" in msg_content_xml: # 邀请加入群聊 + # logger.warning(f"xml消息 {type_value} 邀请你加入了群聊.todo") else: print(f"xml消息 {type_value} 未解析") + + + + def handle_xml_reference(token_id,app_id, wxid,msg_data,from_wxid, to_wxid): ''' + 引用消息 判断此类消息的逻辑:$.Data.MsgType=49 并且 解析$.Data.Content.string中的xml msg.appmsg.type=57 ''' callback_to_user=from_wxid @@ -675,6 +681,34 @@ def handle_xml_reference(token_id,app_id, wxid,msg_data,from_wxid, to_wxid): gewe_chat.wxchat.save_session_messages_to_cache(hash_key, {"role": "assistant", "content": reply_content}) gewe_chat.wxchat.post_text(token_id,app_id,callback_to_user,reply_content) + +def handle_xml_invite_group(token_id,app_id, wxid,msg_data,from_wxid, to_wxid): + ''' + 群聊邀请 + 判断此类消息的逻辑:$.Data.MsgType=49 + 并且 解析$.Data.Content.string中的xml msg.appmsg.title=邀请你加入群聊(根据手机设置的系统语言title会有调整,不同语言关键字不同) + ''' + logger.info(f'{wxid} 群聊邀请') + msg_content_xml=msg_data["Content"]["string"] + root = ET.fromstring(msg_content_xml) + title_value = root.find(".//appmsg/title").text + + if '邀请你加入群聊' in title_value: + invite_url = root.find('.//url').text + ret,msg,data=gewe_chat.wxchat.agree_join_room(token_id,app_id,invite_url) + if ret==200: + logger.info(f'群聊邀请,同意加入群聊 {msg} {data}') + chatroom_id=data.get('ChatRoomId') + ret,msg,data=gewe_chat.wxchat.save_contract_list(token_id,app_id,chatroom_id,3) + logger.info(f'群聊邀请,保存到通讯录 chatroom_id {chatroom_id} {msg}') + gewe_chat.wxchat.update_group_info_to_cache(token_id,app_id,wxid,chatroom_id) + gewe_chat.wxchat.update_group_members_to_cache(token_id,app_id,wxid,chatroom_id) + else: + logger.warning(f'群聊邀请,同意加入群聊失败 {msg} {data}') + + + + def handle_add_friend_notice(token_id,app_id, wxid,msg_data,from_wxid, to_wxid): ''' 好友添加请求通知 diff --git a/wechat/gewe_chat.py b/wechat/gewe_chat.py index 708abb5..e56dde0 100644 --- a/wechat/gewe_chat.py +++ b/wechat/gewe_chat.py @@ -596,9 +596,25 @@ class GeWeChatCom: } response = requests.post(url=api_url, headers=headers, data=json.dumps(data)) response_object = response.json() - #print(response_object) return response_object.get('ret',None),response_object.get('msg',None),response_object.get('data',None) + def agree_join_room(self,token_id,app_id,url): + ''' + 同意入群 + ''' + api_url = f"{self.base_url}/v2/api/group/agreeJoinRoom" + headers = { + 'X-GEWE-TOKEN': token_id, + 'Content-Type': 'application/json' + } + data = { + "appId": app_id, + "url": url, + } + response = requests.post(url=api_url, headers=headers, data=json.dumps(data)) + response_object = response.json() + return response_object.get('ret',None),response_object.get('msg',None),response_object.get('data',None) + ############################### 朋友圈模块 ################################### # 在新设备登录后的1-3天内,您将无法使用朋友圈发布、点赞、评论等功能。在此期间,如果尝试进行这些操作,您将收到来自微信团队的提醒。请注意遵守相关规定。