Skip to content

Commit

Permalink
0.11.33,优化内置AstralQsign的使用体验
Browse files Browse the repository at this point in the history
Co-Authored-By: 仑质 <benzenpenxil@foxmail.com>
  • Loading branch information
MetaLe0 and lunzhiPenxil committed Jun 4, 2024
1 parent 8c2fabe commit e9565ae
Show file tree
Hide file tree
Showing 6 changed files with 177 additions and 84 deletions.
2 changes: 2 additions & 0 deletions OlivOS/core/L10N/L10NDataAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
'libEXEModelAPI_0004': 'OlivOS libEXEModel failed: {0}\n{1}',
'libEXEModelAPI_0005': 'OlivOS libEXEModel server [{0}] is running',
'libEXEModelAPI_0006': 'OlivOS libEXEModel server [{0}] exited',
'libEXEModelAPI_0007': 'OlivOS libEXEModel server [{0}] will run in {1}s...',
'libNapCatEXEModelAPI_0001': 'OlivOS libNapCatEXEModel server [{0}] can`t found target lib',
'libNapCatEXEModelAPI_0002': 'OlivOS libNapCatEXEModel server [{0}] will run under visiable mode',
'libNapCatEXEModelAPI_0003': 'OlivOS libNapCatEXEModel server [{0}] will retry in 10s...',
Expand Down Expand Up @@ -200,6 +201,7 @@
'libEXEModelAPI_0004': 'OlivOS GoCq进程托管服务组件 错误: {0}\n{1}',
'libEXEModelAPI_0005': 'OlivOS GoCq进程托管服务组件 [{0}] 正在运作',
'libEXEModelAPI_0006': 'OlivOS GoCq进程托管服务组件 [{0}] 已经存在',
'libEXEModelAPI_0007': 'OlivOS GoCq进程托管服务组件 [{0}] 将在{1}秒内启动...',
'libNapCatEXEModelAPI_0001': 'OlivOS NapCat进程托管服务组件 [{0}] 无法找到库文件',
'libNapCatEXEModelAPI_0002': 'OlivOS NapCat进程托管服务组件 [{0}] 将在前台模式下运行',
'libNapCatEXEModelAPI_0003': 'OlivOS NapCat进程托管服务组件 [{0}] 将在10秒后重试...',
Expand Down
1 change: 0 additions & 1 deletion OlivOS/core/boot/bootAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -831,7 +831,6 @@ def start(self):
flag_fliter = rx_packet_data.key['target']['fliter']
for tmp_Proc_name in basic_conf_models:
basic_conf_models_this = basic_conf_models[tmp_Proc_name]

if flag_target_all or basic_conf_models_this['type'] == rx_packet_data.key['target']['type']:
model_name = basic_conf_models_this['name']
if 'hash' in rx_packet_data.key['target']:
Expand Down
4 changes: 2 additions & 2 deletions OlivOS/core/info/infoAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
import OlivOS


OlivOS_Version = '0.11.32'
OlivOS_SVN = 152
OlivOS_Version = '0.11.33'
OlivOS_SVN = 153

# Compatible <= Plugin[compatible_svn] : Compatible
# OldCompatible <= Plugin[compatible_svn] < Compatible : OldCompatible Warn
Expand Down
67 changes: 49 additions & 18 deletions OlivOS/libBooter/libAstralQsignEXEModelAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,17 @@ def startAstralQsignLibExeModel(
filePathUpdate='./lib/astral-qsign.zip.tmp',
filePathFORCESKIP='./lib/FORCESKIP'
)
for bot_info_key in plugin_bot_info_dict:
if plugin_bot_info_dict[bot_info_key].platform['model'] in gCheckList:
tmp_Proc_name = basic_conf_models_this['name']
Proc_dict[tmp_Proc_name] = OlivOS.libAstralQsignEXEModelAPI.server(
Proc_name=tmp_Proc_name,
tx_queue=multiprocessing_dict[basic_conf_models_this['tx_queue']],
control_queue=multiprocessing_dict[basic_conf_models_this['control_queue']],
logger_proc=Proc_dict[basic_conf_models_this['logger_proc']],
server_data=basic_conf_models_this['server'],
debug_mode=False
)
Proc_Proc_dict[tmp_Proc_name] = Proc_dict[tmp_Proc_name].start_unity(tmp_proc_mode)
tmp_Proc_name = basic_conf_models_this['name']
Proc_dict[tmp_Proc_name] = OlivOS.libAstralQsignEXEModelAPI.server(
Proc_name=tmp_Proc_name,
tx_queue=multiprocessing_dict[basic_conf_models_this['tx_queue']],
control_queue=multiprocessing_dict[basic_conf_models_this['control_queue']],
logger_proc=Proc_dict[basic_conf_models_this['logger_proc']],
server_data=basic_conf_models_this['server'],
bot_info_dict=plugin_bot_info_dict,
debug_mode=False
)
Proc_Proc_dict[tmp_Proc_name] = Proc_dict[tmp_Proc_name].start_unity(tmp_proc_mode)

class server(OlivOS.API.Proc_templet):
def __init__(
Expand All @@ -80,6 +79,7 @@ def __init__(
control_queue=None,
logger_proc=None,
server_data=None,
bot_info_dict=None,
debug_mode=False
):
OlivOS.API.Proc_templet.__init__(
Expand All @@ -94,16 +94,20 @@ def __init__(
logger_proc=logger_proc
)
self.Proc_config['debug_mode'] = debug_mode
self.Proc_data['bot_info_dict'] = {}
if type(bot_info_dict) is dict:
self.Proc_data['bot_info_dict'] = bot_info_dict
self.server_data=server_data
self.flag_run = True

def run(self):
while self.flag_run:
self.sendLog(
self.sendLogSim(
2, 'OlivOS libAstralQsignEXEModel server [{0}] will run under visiable mode',
[self.Proc_name]
)
time.sleep(2)
self.setGoCqhttpModelEnableSendAll()
releaseDir("./conf")
releaseDir("./conf/astral-qsign")
unzip('./lib/astral-qsign.zip', "./conf/astral-qsign")
Expand All @@ -126,17 +130,17 @@ def run(self):
self.Proc_data['model_Proc'] = model_Proc
self.get_model_stdout(model_Proc)
# model_Proc.communicate(timeout = None)
self.log(3, OlivOS.L10NAPI.getTrans(
'OlivOS libAstralQsignEXEModel server [{0}] will retry in 10s...',
[self.Proc_name], modelName
))
self.sendLogSim(
3, 'OlivOS libAstralQsignEXEModel server [{0}] will retry in 10s...',
[self.Proc_name]
)
self.Proc_data['model_Proc'] = None
time.sleep(8)

def get_model_stdout(self, model_Proc: subprocess.Popen):
for line in iter(model_Proc.stdout.readline, b''):
try:
log_data = ('%s' % line.decode('utf-8', errors='replace')).rstrip('\n').rstrip('\r')
log_data = ('%s' % line.decode('gbk', errors='replace')).rstrip('\n').rstrip('\r')
self.log(2, log_data, [('AstralQsign', 'default')])
except Exception as e:
self.log(4, OlivOS.L10NAPI.getTrans('OlivOS libAstralQsignEXEModel failed: %s\n%s' % [
Expand All @@ -160,6 +164,18 @@ def send_log_event(self, data):
}
)

def setGoCqhttpModelEnableSend(self, hash):
self.sendControlEventSend('send', {
'target': {
'type': 'gocqhttp_lib_exe_model',
'hash': hash
},
'data': {
'action': 'skipDelay'
}
}
)

def sendControlEventSend(self, action, data):
if self.Proc_info.control_queue is not None:
self.Proc_info.control_queue.put(
Expand All @@ -170,6 +186,11 @@ def sendControlEventSend(self, action, data):
block=False
)

def setGoCqhttpModelEnableSendAll(self):
for bot_info_key in self.Proc_data['bot_info_dict']:
if self.Proc_data['bot_info_dict'][bot_info_key].platform['model'] in gCheckList:
self.setGoCqhttpModelEnableSend(self.Proc_data['bot_info_dict'][bot_info_key].hash)

def sendLog(self, log_level:int, log_message:str, log_message_list:list):
self.log(
log_level,
Expand All @@ -181,6 +202,16 @@ def sendLog(self, log_level:int, log_message:str, log_message_list:list):
[('AstralQsign', 'default')]
)

def sendLogSim(self, log_level:int, log_message:str, log_message_list:list):
self.log(
log_level,
OlivOS.L10NAPI.getTrans(
log_message,
log_message_list,
modelName
),
[]
)


def isBotActive(plugin_bot_info_dict:dict):
Expand Down
39 changes: 34 additions & 5 deletions OlivOS/libBooter/libEXEModelAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
'gocqhttp_show_old'
]

gProtocalEXECheckList = [
'AstralQsign'
]

gProtocalInfo = {
'android_pad': {
'AstralQsign': '''{
Expand Down Expand Up @@ -531,10 +535,15 @@ def run(self):
tmp.write('{}')
releaseDir('./conf/gocqhttp/' + self.Proc_data['bot_info_dict'].hash)
goTypeConfig(self.Proc_data['bot_info_dict'], self.Proc_config['target_proc'], self.Proc_config['sub_target_proc']).setConfig()
if False and (self.Proc_data['bot_info_dict'].platform['model'] in [
'gocqhttp',
'gocqhttp_hide'
]):
if 'qsign-server-protocal' in self.Proc_data['bot_info_dict'].extends \
and type(self.Proc_data['bot_info_dict'].extends['qsign-server-protocal']) is str \
and self.Proc_data['bot_info_dict'].extends['qsign-server-protocal'] in gProtocalEXECheckList:
self.log(2, OlivOS.L10NAPI.getTrans(
'OlivOS libEXEModel server [{0}] will run in {1}s...',
[self.Proc_name, str(8)], modelName
))
self.check_protocalEXE(8, 0.25)
if False and (self.Proc_data['bot_info_dict'].platform['model'] in ['gocqhttp', 'gocqhttp_hide']):
model_Proc = subprocess.Popen(
'..\\..\\..\\lib\\go-cqhttp.exe faststart',
cwd='.\\conf\\gocqhttp\\' + self.Proc_data['bot_info_dict'].hash,
Expand Down Expand Up @@ -720,6 +729,25 @@ def send_QRCode_event(self, path: str):
}
)

def check_protocalEXE(self, delayS:int, interval:int):
flag_skip = False
for i in range(int(delayS / interval)):
if self.Proc_info.rx_queue.empty():
time.sleep(interval)
else:
try:
rx_packet_data = self.Proc_info.rx_queue.get(block=False)
if type(rx_packet_data.key) is dict \
and 'data' in rx_packet_data.key \
and 'action' in rx_packet_data.key['data'] \
and 'skipDelay' == rx_packet_data.key['data']['action']:
flag_skip = True
break
except:
rx_packet_data = None
if flag_skip:
time.sleep(2)

def send_log_event(self, data):
self.sendControlEventSend('send', {
'target': {
Expand Down Expand Up @@ -754,6 +782,7 @@ def __init__(self, bot_info_dict, target_proc, sub_target_proc):
self.config_file_format = {}

def setConfig(self):
global gProtocalEXECheckList
self.config_file_str = '''
account: # 账号相关
uin: {uin} # QQ账号
Expand Down Expand Up @@ -956,7 +985,7 @@ def setConfig(self):

if 'qsign-server-protocal' in self.bot_info_dict.extends \
and type(self.bot_info_dict.extends['qsign-server-protocal']) is str \
and self.bot_info_dict.extends['qsign-server-protocal'] == 'AstralQsign':
and self.bot_info_dict.extends['qsign-server-protocal'] in gProtocalEXECheckList:
self.config_file_format['sign-servers-data'] = '''
- url: 'http://localhost:%s/'
key: '%s'
Expand Down
Loading

0 comments on commit e9565ae

Please sign in to comment.