Skip to content

Commit

Permalink
米游社大别野基本实现
Browse files Browse the repository at this point in the history
  • Loading branch information
lunzhiPenxil committed Dec 1, 2023
1 parent 74d8d1d commit 2c73c30
Show file tree
Hide file tree
Showing 7 changed files with 382 additions and 38 deletions.
10 changes: 10 additions & 0 deletions OlivOS/API.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ def get_Event_from_SDK(self):
OlivOS.contentAPI.get_Event_from_fake_SDK(self)
elif self.sdk_event_type is OlivOS.kaiheilaSDK.event:
OlivOS.kaiheilaSDK.get_Event_from_SDK(self)
elif self.sdk_event_type is OlivOS.mhyVilaSDK.event:
OlivOS.mhyVilaSDK.get_Event_from_SDK(self)
elif self.sdk_event_type is OlivOS.qqRedSDK.event:
OlivOS.qqRedSDK.get_Event_from_SDK(self)
elif self.sdk_event_type is OlivOS.hackChatSDK.event:
Expand Down Expand Up @@ -894,6 +896,14 @@ def __send(self, send_type, target_id, message, host_id=None, flag_log=True):
OlivOS.kaiheilaSDK.event_action.send_msg(self, target_id, tmp_message, flag_direct=False)
elif flag_type == 'private':
OlivOS.kaiheilaSDK.event_action.send_msg(self, target_id, tmp_message, flag_direct=True)
elif self.platform['sdk'] == 'mhyVila_link':
if flag_type == 'group':
if host_id is not None:
OlivOS.mhyVilaSDK.event_action.send_group_msg(self, target_id, tmp_message, host_id=host_id)
elif 'host_id' in self.data.__dict__:
OlivOS.mhyVilaSDK.event_action.send_group_msg(self, target_id, tmp_message, host_id=self.data.host_id)
elif flag_type == 'private':
pass
elif self.platform['sdk'] == 'hackChat_link':
OlivOS.hackChatSDK.event_action.send_msg(self, tmp_message, self.plugin_info['control_queue'])
elif self.platform['sdk'] == 'biliLive_link':
Expand Down
8 changes: 8 additions & 0 deletions OlivOS/messageAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,14 @@
'text': 'olivos_para'
}
},
'mhyVila': {
'mhyVila_link': {
'default': 'olivos_string',
'public': 'olivos_string',
'private': 'olivos_string',
'sandbox': 'olivos_string'
}
},
'discord': {
'discord_link': {
'default': 'olivos_para'
Expand Down
107 changes: 87 additions & 20 deletions OlivOS/mhyVilaLinkServerAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,60 +46,127 @@ def __init__(self, Proc_name, scan_interval=0.001, dead_interval=1, rx_queue=Non
'pulse_interval': None,
'last_s': None,
'ws_obj': None,
'ws_item': None
'ws_item': None,
'ws_PLogin': {
'uid': 0,
'token': '',
'platform': 3,
'app_id': 104,
'device_id': ''
}
}
self.Proc_data['platform_bot_info_dict'] = None

def run(self):
self.log(2, 'OlivOS kaiheila link server [' + self.Proc_name + '] is running')
self.log(2, 'OlivOS mhyVila link server [' + self.Proc_name + '] is running')
while True:
api_obj = OlivOS.mhyVilaSDK.API.getWebsocketInfo(
OlivOS.mhyVilaSDK.get_SDK_bot_info_from_Plugin_bot_info(
self.Proc_data['bot_info_dict']
)
sdk_bot_info = OlivOS.mhyVilaSDK.get_SDK_bot_info_from_Plugin_bot_info(
self.Proc_data['bot_info_dict']
)
api_obj = OlivOS.mhyVilaSDK.API.getWebsocketInfo(sdk_bot_info)
try:
api_obj.do_api('GET')
api_obj_json = json.loads(api_obj.res)
if api_obj_json['retcode'] == 0:
self.Proc_data['extend_data']['ws_PLogin']['uid'] = int(api_obj_json['data']['uid'])
self.Proc_data['extend_data']['ws_PLogin']['token'] = '%s.%s.%s' % (
str(sdk_bot_info.vila_id),
OlivOS.mhyVilaSDK.get_bot_secret(sdk_bot_info),
str(sdk_bot_info.bot_id)
)
self.Proc_data['extend_data']['ws_PLogin']['platform'] = int(api_obj_json['data']['platform'])
self.Proc_data['extend_data']['ws_PLogin']['app_id'] = int(api_obj_json['data']['app_id'])
self.Proc_data['extend_data']['ws_PLogin']['device_id'] = str(api_obj_json['data']['device_id'])
self.Proc_data['extend_data']['websocket_url'] = api_obj_json['data']['websocket_url']
else:
self.Proc_data['extend_data']['websocket_url'] = None
except:
self.Proc_data['extend_data']['websocket_url'] = None
print(self.Proc_data['extend_data']['websocket_url'])
#if self.Proc_data['extend_data']['websocket_url'] is not None:
# self.run_websocket_rx_connect_start()
if self.Proc_data['extend_data']['websocket_url'] is not None:
self.run_websocket_rx_connect_start()
time.sleep(10)

def on_message(self, ws, message):
def on_data(self, ws:websocket.WebSocketApp, data, opcode, FIN):
#print([data, opcode, FIN])
pass

def on_message(self, ws:websocket.WebSocketApp, message):
try:
print(message)
except:
pass
#print(message)
messageObj = OlivOS.mhyVilaSDK.PAYLOAD.rxPacket(message)
if messageObj.dataHeader.BizType in [
OlivOS.mhyVilaSDK.protoEnum.Model_ROBOTEVENT.value
]:
sdk_event = OlivOS.mhyVilaSDK.event(
messageObj.dataHeader.BizType,
messageObj.dataTable,
self.Proc_data['bot_info_dict']
)
tx_packet_data = OlivOS.pluginAPI.shallow.rx_packet(sdk_event)
self.Proc_info.tx_queue.put(tx_packet_data, block=False)
except Exception as e:
traceback.print_exc()

def on_error(self, ws:websocket.WebSocketApp, error):
self.log(0, 'OlivOS mhyVila link server [' + self.Proc_name + '] websocket link error')

def on_close(self, ws:websocket.WebSocketApp, close_status_code, close_msg):
self.log(0, 'OlivOS mhyVila link server [' + self.Proc_name + '] websocket link close')

def on_error(self, ws, error):
self.log(0, 'OlivOS kaiheila link server [' + self.Proc_name + '] websocket link error')
def on_open(self, ws:websocket.WebSocketApp):
self.send_PLogin(ws)
threading.Thread(
target=self.run_pulse,
args=()
).start()
self.log(2, 'OlivOS mhyVila link server [' + self.Proc_name + '] websocket link start')

def on_close(self, ws, close_status_code, close_msg):
self.log(0, 'OlivOS kaiheila link server [' + self.Proc_name + '] websocket link close')
def run_pulse(self):
tmp_ws_item = self.Proc_data['extend_data']['ws_item']
while self.Proc_data['extend_data']['pulse_interval'] is not None:
tmp_pulse_interval = self.Proc_data['extend_data']['pulse_interval']
time.sleep(tmp_pulse_interval)
tmp_data = OlivOS.mhyVilaSDK.PAYLOAD.PHeartBeat().dump()
if tmp_ws_item != self.Proc_data['extend_data']['ws_item'] or self.Proc_data['extend_data']['ws_item'] is None:
self.log(0, 'OlivOS mhyVila link server [' + self.Proc_name + '] websocket pulse giveup')
return
if self.Proc_data['extend_data']['ws_obj'] is not None:
try:
self.Proc_data['extend_data']['ws_obj'].send(tmp_data, opcode=websocket.ABNF.OPCODE_BINARY)
self.log(0, 'OlivOS mhyVila link server [' + self.Proc_name + '] websocket pulse send')
except:
break
else:
break
self.log(0, 'OlivOS mhyVila link server [' + self.Proc_name + '] websocket pulse lost')
return

def on_open(self, ws):
self.log(2, 'OlivOS kaiheila link server [' + self.Proc_name + '] websocket link start')
def send_PLogin(self, ws:websocket.WebSocketApp):
tmp_data = OlivOS.mhyVilaSDK.PAYLOAD.PLogin()
tmp_data.data.uid = self.Proc_data['extend_data']['ws_PLogin']['uid']
tmp_data.data.token = self.Proc_data['extend_data']['ws_PLogin']['token']
tmp_data.data.platform = self.Proc_data['extend_data']['ws_PLogin']['platform']
tmp_data.data.app_id = self.Proc_data['extend_data']['ws_PLogin']['app_id']
tmp_data.data.device_id = self.Proc_data['extend_data']['ws_PLogin']['device_id']
tmp_data.dump()
#print(tmp_data)
ws.send(tmp_data.raw, opcode=websocket.ABNF.OPCODE_BINARY)

def run_websocket_rx_connect_start(self):
websocket.enableTrace(False)
ws = websocket.WebSocketApp(
self.Proc_data['extend_data']['websocket_url'],
on_open=self.on_open,
on_message=self.on_message,
on_data=self.on_data,
on_error=self.on_error,
on_close=self.on_close
)
self.Proc_data['extend_data']['ws_obj'] = ws
self.Proc_data['extend_data']['ws_item'] = uuid.uuid4()
self.Proc_data['extend_data']['pulse_interval'] = 20
ws.run_forever()
self.Proc_data['extend_data']['pulse_interval'] = None
self.Proc_data['extend_data']['ws_obj'] = None
self.Proc_data['extend_data']['ws_item'] = None
self.log(2, 'OlivOS kaiheila link server [' + self.Proc_name + '] websocket link lost')
self.log(2, 'OlivOS mhyVila link server [' + self.Proc_name + '] websocket link lost')
Loading

0 comments on commit 2c73c30

Please sign in to comment.