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, new_send_email from src.util.utils import random_time app = Flask(__name__) CORS(app, supports_credentials=True) admin_key = '1145141919810' target_email_list = ['ArmorServer@outlook.com'] @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) s2 = threading.Thread(target=skland_sign_in_thread) s1.start() s2.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()) new_send_email(target_email_list, '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 next_run_time = random_time(480, 720) ark_back.logger.info(f'Next daily sign-in time: {next_run_time}') while 1: if not ark_back.is_retrieving_data: break time.sleep(20) now = datetime.datetime.now() if now.strftime('%H:%M') == next_run_time and last_run != now.date(): next_run_time = random_time(480, 720) ark_back.daily_sign_new() last_run = now.date() except Exception as e: print(e, traceback.format_exc()) ark_back.logger.error(traceback.format_exc()) new_send_email(target_email_list, 'Error in ArkHelper Daily Sign-in', str(traceback.format_exc())) finally: ark_back.logger.info('Data Retrieve Stopped') logger = LoggerClass().get_log(logging.INFO) ark_back = ArkHelperBackend(logger=logger) # ark_back.update_gacha_data() # ark_back.update_payment_data() threading.Thread(target=skland_sign_in_thread).start() threading.Thread(target=data_retrieve_thread).start() if __name__ == '__main__': print('start') ark_back.daily_sign_new() # logger = LoggerClass().get_log(logging.INFO) # ark_back = ArkHelperBackend(logger=logger) # ark_back.update_gacha_data() # ark_back.update_payment_data() # threading.Thread(target=skland_sign_in_thread).start() # threading.Thread(target=data_retrieve_thread).start() app.run(host="192.168.195.194", port=59001)