Files
Arknights_Tools/run_service_backend.py
T
2024-12-18 10:51:33 +08:00

136 lines
4.7 KiB
Python

import traceback
import threading
import logging
import json
import time
import datetime
from flask import Flask, request
from flask_cors import CORS
from src.My_Logger.project_logger import LoggerClass
from src.ark_helper_backend.backend import ArkHelperBackend
from src.util.mail import send_batch_email
app = Flask(__name__)
CORS(app, supports_credentials=True)
admin_key = '1145141919810'
@app.route("/GetCurrentStatus", methods=["POST"])
def get_current_status():
input_param_dict = json.loads(request.get_data()) if request.get_data() else {}
if not input_param_dict:
return 'No data supplied'
return json.dumps({'status': 0, 'data': ark_back.is_retrieving_data})
@app.route("/StartDataRetrieve", methods=["POST"])
def start_data_retrieve():
input_param_dict = json.loads(request.get_data()) if request.get_data() else {}
if not input_param_dict:
return 'No data supplied'
if input_param_dict.get('admin_key') != admin_key:
return '403 Forbidden'
if ark_back.is_retrieving_data():
return json.dumps({'status': 1, 'data': 'already started'})
else:
ark_back.is_retrieving_data = True
s1 = threading.Thread(target=data_retrieve_thread)
s2 = threading.Thread(target=skland_sign_in_thread())
s1.start()
s2.start()
return json.dumps({'status': 0, 'data': ark_back.is_retrieving_data})
@app.route("/ChangeStatus", methods=["POST"])
def change_status():
input_param_dict = json.loads(request.get_data()) if request.get_data() else {}
if not input_param_dict:
return 'No data supplied'
if input_param_dict.get('admin_key') != admin_key:
return '403 Forbidden'
if input_param_dict.get('status') == 'on going' and not ark_back.is_retrieving_data:
ark_back.is_retrieving_data = True
s1 = threading.Thread(target=data_retrieve_thread)
s1.start()
return json.dumps({'status': 0, 'data': ark_back.is_retrieving_data})
elif input_param_dict.get('status') == 'breaking' and ark_back.is_retrieving_data:
ark_back.is_retrieving_data = False
return json.dumps({'status': 0, 'data': ark_back.is_retrieving_data})
else:
return json.dumps({'status': -1})
@app.route("/GetData", methods=["POST"])
def get_data():
input_param_dict = json.loads(request.get_data()) if request.get_data() else {}
if not input_param_dict:
return 'No data supplied'
if input_param_dict.get('admin_key') != admin_key:
return '403 Forbidden'
gacha_data, payment_data = ark_back.show_data()
data = {'status': 0, 'gacha_data': gacha_data, 'payment_data': payment_data}
return json.dumps(data)
@app.route("/RunGetDataNow", methods=["POST"])
def run_get_data_now():
input_param_dict = json.loads(request.get_data()) if request.get_data() else {}
if not input_param_dict:
return 'No data supplied'
if input_param_dict.get('admin_key') != admin_key:
return '403 Forbidden'
ark_back.data_retrieve()
gacha_data, payment_data = ark_back.show_data()
data = {'status': 0, 'gacha_data': gacha_data, 'payment_data': payment_data}
return json.dumps(data)
def data_retrieve_thread():
try:
while 1:
# time.sleep(3600)
if ark_back.is_retrieving_data:
ark_back.data_retrieve()
else:
ark_back.logger.info('Breaking')
break
time.sleep(3600)
except Exception as e:
print(e, traceback.format_exc())
ark_back.logger.error(traceback.format_exc())
send_batch_email(['2654988228@qq.com'], 'Error in ArkHelper data retrieval', str(traceback.format_exc()))
finally:
ark_back.logger.info('Data Retrieve Stopped')
def skland_sign_in_thread():
try:
last_run = None
while 1:
if not ark_back.is_retrieving_data:
break
time.sleep(20)
now = datetime.datetime.now()
if now.strftime('%H:%M') == '08:00' and last_run != now.date():
ark_back.skland_sign_new()
last_run = now.date()
except Exception as e:
print(e, traceback.format_exc())
ark_back.logger.error(traceback.format_exc())
send_batch_email(['2654988228@qq.com'], 'Error in ArkHelper Skland Sign-in', str(traceback.format_exc()))
finally:
ark_back.logger.info('Data Retrieve Stopped')
if __name__ == '__main__':
print('start')
logger = LoggerClass().get_log(logging.INFO)
ark_back = ArkHelperBackend(logger=logger)
# threading.Thread(target=skland_sign_in_thread).start()
threading.Thread(target=data_retrieve_thread).start()
app.run(host="192.168.195.194", port=59001)