From 37116d9fbf15e6caa7dd9a8b51b6c914ee8ee496 Mon Sep 17 00:00:00 2001 From: lunzhipenxil Date: Wed, 17 Nov 2021 20:32:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81QQ=E9=A2=91=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OlivOS/API.py | 55 +++++++++++++++++++++++++++++++-------- OlivOS/libEXEModelAPI.py | 6 +++-- OlivOS/metadataAPI.py | 3 ++- OlivOS/multiLoginUIAPI.py | 4 +-- OlivOS/onebotSDK.py | 40 ++++++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 16 deletions(-) diff --git a/OlivOS/API.py b/OlivOS/API.py index 54084319..eec0d7db 100644 --- a/OlivOS/API.py +++ b/OlivOS/API.py @@ -149,7 +149,11 @@ def do_init_log(self): ['message', self.data.message] ]) elif self.plugin_info['func_type'] == 'group_message': + tmp_host_id = '-' + if self.data.extend['host_group_id'] != None: + tmp_host_id = str(self.data.extend['host_group_id']) tmp_globalMetaTableTemp_patch = OlivOS.metadataAPI.getPairMapping([ + ['host_id', tmp_host_id], ['group_id', self.data.group_id], ['nickname', self.data.sender['nickname']], ['user_id', self.data.user_id], @@ -498,7 +502,14 @@ def __reply(self, message, flag_log = True): elif checkByListOrEqual( self.plugin_info['func_type'], [ - 'group_message', + 'group_message' + ] + ): + self.__send('group', self.data.group_id, tmp_message, host_id = self.data.extend['host_group_id'], flag_log = False) + flag_type = 'group' + elif checkByListOrEqual( + self.plugin_info['func_type'], + [ 'group_file_upload', 'group_admin', 'group_member_decrease', @@ -509,7 +520,6 @@ def __reply(self, message, flag_log = True): 'group_honor', 'group_add_request', 'group_invite_request' - ] ): self.__send('group', self.data.group_id, tmp_message, flag_log = False) @@ -539,6 +549,19 @@ def __reply(self, message, flag_log = True): ('reply', 'callback') ]) elif flag_type == 'group': + if checkByListOrEqual( + self.plugin_info['func_type'], + [ + 'group_message' + ] + ): + if self.data.extend['host_group_id'] != None: + self.log_func(2, 'Host(' + str(self.data.extend['host_group_id']) + ') Group(' + str(self.data.group_id) + '): ' + tmp_message_log, [ + (self.platform['platform'], 'default'), + (self.plugin_info['name'], 'default'), + ('reply', 'callback') + ]) + return self.log_func(2, 'Group(' + str(self.data.group_id) + '): ' + tmp_message_log, [ (self.platform['platform'], 'default'), (self.plugin_info['name'], 'default'), @@ -552,7 +575,7 @@ def reply(self, message, flag_log = True, remote = False): self.__reply(message, flag_log = True) - def __send(self, send_type, target_id, message, flag_log = True): + def __send(self, send_type, target_id, message, host_id = None, flag_log = True): flag_type = send_type tmp_message = None tmp_message_obj = None @@ -564,7 +587,10 @@ def __send(self, send_type, target_id, message, flag_log = True): if flag_type == 'private': OlivOS.onebotSDK.event_action.send_private_msg(self, target_id, tmp_message) elif flag_type == 'group': - OlivOS.onebotSDK.event_action.send_group_msg(self, target_id, tmp_message) + if host_id != None: + OlivOS.onebotSDK.event_action.send_guild_channel_msg(self, host_id, target_id, tmp_message) + else: + OlivOS.onebotSDK.event_action.send_group_msg(self, target_id, tmp_message) elif self.platform['sdk'] == 'telegram_poll': OlivOS.telegramSDK.event_action.send_msg(self, target_id, tmp_message) elif self.platform['sdk'] == 'fanbook_poll': @@ -596,17 +622,24 @@ def __send(self, send_type, target_id, message, flag_log = True): ('send', 'callback') ]) elif flag_type == 'group': - self.log_func(2, 'Group(' + str(target_id) + '): ' + tmp_message_log, [ - (self.platform['platform'], 'default'), - (self.plugin_info['name'], 'default'), - ('send', 'callback') - ]) + if host_id != None: + self.log_func(2, 'Host(' + str(host_id) + ') Group(' + str(target_id) + '): ' + tmp_message_log, [ + (self.platform['platform'], 'default'), + (self.plugin_info['name'], 'default'), + ('send', 'callback') + ]) + else: + self.log_func(2, 'Group(' + str(target_id) + '): ' + tmp_message_log, [ + (self.platform['platform'], 'default'), + (self.plugin_info['name'], 'default'), + ('send', 'callback') + ]) - def send(self, send_type, target_id, message, flag_log = True, remote = False): + def send(self, send_type, target_id, message, host_id = None, flag_log = True, remote = False): if remote: pass else: - self.__send(send_type, target_id, message, flag_log = True) + self.__send(send_type, target_id, message, host_id = host_id, flag_log = True) @callbackLogger('delete_msg') def __delete_msg(self, message_id, flag_log = True): diff --git a/OlivOS/libEXEModelAPI.py b/OlivOS/libEXEModelAPI.py index 788bd0f5..619289a2 100644 --- a/OlivOS/libEXEModelAPI.py +++ b/OlivOS/libEXEModelAPI.py @@ -38,7 +38,8 @@ def __init__(self, Proc_name, scan_interval = 0.001, dead_interval = 1, rx_queue self.Proc_config['target_proc'] = target_proc def run(self): - while True: + flag_run = True + while flag_run: releaseDir('./lib') if not os.path.exists('./lib/go-cqhttp.exe'): self.log(3, 'OlivOS libEXEModel server [' + self.Proc_name + '] can`t found target lib') @@ -64,10 +65,11 @@ def run(self): if self.Proc_data['bot_info_dict'].platform['model'] == 'gocqhttp' or self.Proc_data['bot_info_dict'].platform['model'] == 'gocqhttp_show': self.log(2, 'OlivOS libEXEModel server [' + self.Proc_name + '] will run under visiable mode') subprocess.call( - "start /wait ..\\..\\..\\lib\\go-cqhttp.exe faststart", + "start cmd /K ..\\..\\..\\lib\\go-cqhttp.exe faststart", shell = True, cwd = '.\\conf\\gocqhttp\\' + self.Proc_data['bot_info_dict'].hash ) + flag_run = False class goTypeConfig(object): diff --git a/OlivOS/metadataAPI.py b/OlivOS/metadataAPI.py index 37f5d4b5..0f66ac1c 100644 --- a/OlivOS/metadataAPI.py +++ b/OlivOS/metadataAPI.py @@ -48,6 +48,7 @@ def getPairMapping(pair_list = []): 'message_id': 'N/A', 'user_id': 'N/A', 'group_id': 'N/A', + 'host_id': 'N/A', 'operator_id': 'N/A', 'target_id': 'N/A', 'name': 'N/A', @@ -61,7 +62,7 @@ def getPairMapping(pair_list = []): globalMetaTable = { 'event_private_message_log': 'User[{nickname}]({user_id}) : {message}', - 'event_group_message_log': 'Group({group_id}) User[{nickname}]({user_id}) : {message}', + 'event_group_message_log': 'Host({host_id}) Group({group_id}) User[{nickname}]({user_id}) : {message}', 'event_group_file_upload_log': 'Group({group_id}) User({user_id}) : {name}', 'event_group_admin_log': 'Group({group_id}) User({user_id}) Action({action})', 'event_group_member_decrease_log': 'Group({group_id}) User({user_id}) <- Operator({operator_id}) Action({action})', diff --git a/OlivOS/multiLoginUIAPI.py b/OlivOS/multiLoginUIAPI.py index 5874f4f3..1a87c56e 100644 --- a/OlivOS/multiLoginUIAPI.py +++ b/OlivOS/multiLoginUIAPI.py @@ -258,8 +258,8 @@ def __init__(self, action, Account_data, hash_key = None, edit_commit_callback = self.UIData['edit_root_Combobox_dict']['platform_sdk_model_list']['qq'] = {} self.UIData['edit_root_Combobox_dict']['platform_sdk_model_list']['qq']['onebot'] = [ 'default', - 'gocqhttp', - 'gocqhttp_hide', + #'gocqhttp', + #'gocqhttp_hide', 'gocqhttp_show' ] self.UIData['edit_root_Combobox_dict']['platform_sdk_model_list']['telegram'] = {} diff --git a/OlivOS/onebotSDK.py b/OlivOS/onebotSDK.py index 7aca9cb9..3162595f 100644 --- a/OlivOS/onebotSDK.py +++ b/OlivOS/onebotSDK.py @@ -162,6 +162,19 @@ def get_Event_from_SDK(target_event): target_event.data.raw_message_sdk = OlivOS.messageAPI.Message_templet('old_string', target_event.sdk_event.json['raw_message']) target_event.data.font = target_event.sdk_event.json['font'] target_event.data.sender.update(target_event.sdk_event.json['sender']) + elif target_event.sdk_event.json['message_type'] == 'guild': + if target_event.sdk_event.json['sub_type'] == 'channel': + target_event.active = True + target_event.plugin_info['func_type'] = 'group_message' + target_event.data = target_event.group_message(target_event.sdk_event.json['channel_id'], target_event.sdk_event.json['user_id'], target_event.sdk_event.json['message'], target_event.sdk_event.json['sub_type']) + target_event.data.message_sdk = OlivOS.messageAPI.Message_templet('old_string', target_event.sdk_event.json['message']) + target_event.data.message_id = target_event.sdk_event.json['message_id'] + target_event.data.raw_message = target_event.sdk_event.json['message'] + target_event.data.raw_message_sdk = OlivOS.messageAPI.Message_templet('old_string', target_event.sdk_event.json['message']) + target_event.data.font = None + target_event.data.sender.update(target_event.sdk_event.json['sender']) + if 'guild_id' in target_event.sdk_event.json != None: + target_event.data.extend['host_group_id'] = target_event.sdk_event.json['guild_id'] elif target_event.base_info['type'] == 'notice': if target_event.sdk_event.json['notice_type'] == 'group_upload': target_event.active = True @@ -608,6 +621,16 @@ def get_version_info(target_event): res_data['data']['os'] = init_api_do_mapping_for_dict(raw_obj, ['runtime_os'], str) return res_data + #以下为 go-cqhttp v1.0.0-beta8-fix1 引入的试验性接口 + + def send_guild_channel_msg(target_event, guild_id, channel_id, message): + this_msg = api.send_guild_channel_msg(get_SDK_bot_info_from_Event(target_event)) + this_msg.data.guild_id = guild_id + this_msg.data.channel_id = channel_id + this_msg.data.message = message + this_msg.do_api() + + def init_api_json(raw_str): res_data = None tmp_obj = None @@ -1196,3 +1219,20 @@ def __init__(self, bot_info=None): class data_T(object): def __init__(self): self.default = None + + + #以下为 go-cqhttp v1.0.0-beta8-fix1 引入的试验性接口 + + class send_guild_channel_msg(api_templet): + def __init__(self, bot_info=None): + api_templet.__init__(self) + self.bot_info = bot_info + self.data = self.data_T() + self.node_ext = 'send_guild_channel_msg' + self.res = None + + class data_T(object): + def __init__(self): + self.guild_id = -1 + self.channel_id = -1 + self.message = ''