From 97acb901af1ff26046617c69d2a00b809de5db3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=91=E8=B4=A8?= Date: Wed, 15 May 2024 11:53:46 +0800 Subject: [PATCH] =?UTF-8?q?OPQ=EF=BC=9A=E5=B0=9D=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=BE=A4=E9=82=80=E8=AF=B7=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OlivOS/adapter/OPQBot/OPQBotSDK.py | 110 +++++++++++++++++++++----- OlivOS/adapter/onebotV11/onebotSDK.py | 8 +- OlivOS/core/core/API.py | 2 + 3 files changed, 99 insertions(+), 21 deletions(-) diff --git a/OlivOS/adapter/OPQBot/OPQBotSDK.py b/OlivOS/adapter/OPQBot/OPQBotSDK.py index a8455eb7..11df06f4 100644 --- a/OlivOS/adapter/OPQBot/OPQBotSDK.py +++ b/OlivOS/adapter/OPQBot/OPQBotSDK.py @@ -32,6 +32,8 @@ gUinfoReg = {} +gMsgSeqToGroupCodeReg = {} + class bot_info_T(object): def __init__(self, id=-1): self.id = id @@ -188,6 +190,26 @@ def get_Event_from_SDK(target_event): target_event.data.sender['sex'] = 'unknown' target_event.data.sender['age'] = 0 target_event.data.host_id = None + elif target_event.sdk_event.payload.EventName == 'ON_EVENT_GROUP_INVITE': + if type(target_event.sdk_event.payload.EventData) is dict \ + and 'MsgHead' in target_event.sdk_event.payload.EventData \ + and type(target_event.sdk_event.payload.EventData['MsgHead']) is dict \ + and 'FromUin' in target_event.sdk_event.payload.EventData['MsgHead'] \ + and type(target_event.sdk_event.payload.EventData['MsgHead']['FromUin']) is int \ + and 'Event' in target_event.sdk_event.payload.EventData \ + and type(target_event.sdk_event.payload.EventData['Event']) is dict \ + and 'Invitee' in target_event.sdk_event.payload.EventData['Event'] \ + and type(target_event.sdk_event.payload.EventData['Event']['Invitee']) in [str, int] \ + and 'Invitor' in target_event.sdk_event.payload.EventData['Event'] \ + and type(target_event.sdk_event.payload.EventData['Event']['Invitor']) in [str, int]: + target_event.active = True + target_event.plugin_info['func_type'] = 'group_member_increase' + target_event.data = target_event.group_member_increase( + str(target_event.sdk_event.payload.EventData['MsgHead']['FromUin']), + str(target_event.sdk_event.payload.EventData['Event']['Invitor']), + str(target_event.sdk_event.payload.EventData['Event']['Invitee']) + ) + target_event.data.action = 'approve' elif False and target_event.sdk_event.payload.EventName == 'ON_EVENT_FRIEND_NEW_MSG': if type(target_event.sdk_event.payload.EventData) is dict \ and 'ReqUid' in target_event.sdk_event.payload.EventData \ @@ -210,32 +232,31 @@ def get_Event_from_SDK(target_event): target_event.sdk_event.payload.EventData['MsgAdditional'] ) target_event.data.flag = str(target_event.sdk_event.payload.EventData['ReqUid']) - elif False and target_event.sdk_event.payload.EventName == 'ON_EVENT_GROUP_SYSTEM_MSG_NOTIFY': + elif target_event.sdk_event.payload.EventName == 'ON_EVENT_GROUP_SYSTEM_MSG_NOTIFY': if type(target_event.sdk_event.payload.EventData) is dict \ + and 'MsgType' in target_event.sdk_event.payload.EventData \ + and type(target_event.sdk_event.payload.EventData['MsgType']) is int \ and 'GroupCode' in target_event.sdk_event.payload.EventData \ and type(target_event.sdk_event.payload.EventData['GroupCode']) is int \ - and 'ReqUid' in target_event.sdk_event.payload.EventData \ - and type(target_event.sdk_event.payload.EventData['ReqUid']) is str \ + and 'MsgSeq' in target_event.sdk_event.payload.EventData \ + and type(target_event.sdk_event.payload.EventData['MsgSeq']) is int \ and 'Status' in target_event.sdk_event.payload.EventData \ and type(target_event.sdk_event.payload.EventData['Status']) is int \ - and target_event.sdk_event.payload.EventData['Status'] in [1, 2] \ and 'MsgAdditional' in target_event.sdk_event.payload.EventData \ - and type(target_event.sdk_event.payload.EventData['MsgAdditional']) is str: - target_event.active = True - target_event.plugin_info['func_type'] = 'friend_add_request' - uin = str(target_event.sdk_event.payload.EventData['ReqUid']) - if OlivOS.pluginAPI.gProc is not None: - uin = event_action.getUinfo( - target_event = target_event, - Uid = target_event.sdk_event.payload.EventData['ReqUid'], - control_queue = OlivOS.pluginAPI.gProc.Proc_info.control_queue + and type(target_event.sdk_event.payload.EventData['MsgAdditional']) is str \ + and 'ActorUid' in target_event.sdk_event.payload.EventData \ + and type(target_event.sdk_event.payload.EventData['ActorUid']) in [str, int]: + if target_event.sdk_event.payload.EventData['MsgType'] == 2 \ + and target_event.sdk_event.payload.EventData['Status'] == 1: + target_event.active = True + target_event.plugin_info['func_type'] = 'group_invite_request' + target_event.data = target_event.group_invite_request( + str(target_event.sdk_event.payload.EventData['GroupCode']), + str(target_event.sdk_event.payload.EventData['ActorUid']), + target_event.sdk_event.payload.EventData['MsgAdditional'] ) - target_event.data = target_event.group_add_request( - str(target_event.sdk_event.payload.EventData['GroupCode']), - str(uin), - target_event.sdk_event.payload.EventData['MsgAdditional'] - ) - target_event.data.flag = str(target_event.sdk_event.payload.EventData['ReqUid']) + target_event.data.flag = str(target_event.sdk_event.payload.EventData['MsgSeq']) + gMsgSeqToGroupCodeReg[target_event.data.flag] = target_event.sdk_event.payload.EventData['GroupCode'] ''' @@ -427,6 +448,23 @@ def __init__(self, UidQuery:'list[str]', CurrentQQ:'int|str'): } } + class SystemMsgAction_Group(payload_template): + def __init__(self, MsgSeq:int, MsgType:int, GroupCode:int, OpCode:int, CurrentQQ:'int|str'): + payload_template.__init__(self) + self.CgiCmd = "SystemMsgAction.Group" + self.CurrentQQ = str(CurrentQQ) + self.data = { + "ReqId": self.ReqId, + "BotUin": str(self.CurrentQQ), + "CgiCmd": self.CgiCmd, + "CgiRequest": { + "MsgSeq": MsgSeq, + "MsgType": MsgType, + "GroupCode": GroupCode, + "OpCode": OpCode + } + } + # 支持OlivOS API调用的方法实现 class event_action(object): @@ -657,6 +695,40 @@ def set_group_leave(target_event, group_id, control_queue): control_queue ) + def set_group_add_request(target_event, flag:str, sub_type:str, approve:bool, control_queue): + if target_event.bot_info != None: + plugin_event_bot_hash = OlivOS.API.getBotHash( + bot_id=target_event.base_info['self_id'], + platform_sdk=target_event.platform['sdk'], + platform_platform=target_event.platform['platform'], + platform_model=target_event.platform['model'] + ) + sub_type_int = None + OpCode_int = None + GroupCode_this = None + if sub_type == 'invite': + sub_type_int = 1 + GroupCode_this = gMsgSeqToGroupCodeReg.get(str(flag), None) + if approve is True: + OpCode_int = 1 + else: + OpCode_int = 2 + elif sub_type == 'add': + pass + if sub_type_int is not None: + send_ws_event( + plugin_event_bot_hash, + PAYLOAD.SystemMsgAction_Group( + MsgSeq = int(flag), + MsgType = sub_type_int, + GroupCode = GroupCode_this, + OpCode = OpCode_int, + CurrentQQ = target_event.base_info['self_id'] + ).dump(), + control_queue + ) + + def get_group_list(target_event:OlivOS.API.Event, control_queue): res_data = OlivOS.contentAPI.api_result_data_template.get_group_list() if target_event.bot_info != None: diff --git a/OlivOS/adapter/onebotV11/onebotSDK.py b/OlivOS/adapter/onebotV11/onebotSDK.py index f5ede9df..03f29cb0 100644 --- a/OlivOS/adapter/onebotV11/onebotSDK.py +++ b/OlivOS/adapter/onebotV11/onebotSDK.py @@ -61,7 +61,11 @@ def send_onebot_post_json(self): return None else: try: - json_str_tmp = json.dumps(obj=self.obj.__dict__, ensure_ascii=False) + # clear_dict = {k: v for k, v in self.obj.__dict__.items() if v != -1} + clear_dict = self.obj.__dict__ + if clear_dict.get('message_type')=='private': + clear_dict.pop('group_id','No "group_id"') + json_str_tmp = json.dumps(obj=clear_dict, ensure_ascii=False) tmp_host = self.bot_info.host if tmp_host.startswith('http://') or tmp_host.startswith('https://'): pass @@ -343,7 +347,7 @@ def get_Event_from_SDK(target_event): target_event.plugin_info['func_type'] = 'group_member_increase' target_event.data = target_event.group_member_increase( str(target_event.sdk_event.json['group_id']), - str(target_event.sdk_event.json['operator_id']), + str(target_event.sdk_event.json.get('operator_id', '-1')), str(target_event.sdk_event.json['user_id']) ) if target_event.sdk_event.json['sub_type'] == 'approve': diff --git a/OlivOS/core/core/API.py b/OlivOS/core/core/API.py index 8635e8e7..39c8cff4 100644 --- a/OlivOS/core/core/API.py +++ b/OlivOS/core/core/API.py @@ -1244,6 +1244,8 @@ def __set_group_add_request(self, flag, sub_type, approve, reason, flag_log=True OlivOS.onebotV12SDK.event_action.set_group_add_request(self, flag, sub_type, approve, reason) elif self.platform['model'] in OlivOS.flaskServerAPI.gCheckList: OlivOS.onebotSDK.event_action.set_group_add_request(self, flag, sub_type, approve, reason) + elif self.platform['model'] in OlivOS.OPQBotLinkServerAPI.gCheckList: + OlivOS.OPQBotSDK.event_action.set_group_add_request(self, flag, sub_type, approve, self.plugin_info['control_queue']) elif self.platform['sdk'] == 'telegram_poll': pass