update
This commit is contained in:
@@ -0,0 +1,116 @@
|
|||||||
|
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)
|
||||||
|
s1.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)
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
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()
|
||||||
|
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)
|
||||||
|
app.run(host="192.168.195.194", port=59001)
|
||||||
|
|
||||||
@@ -26,9 +26,9 @@ class ArkHelperBackend:
|
|||||||
self.user_config_dict = self.load_users()
|
self.user_config_dict = self.load_users()
|
||||||
self.user_data_dict = self.initiate_user_data()
|
self.user_data_dict = self.initiate_user_data()
|
||||||
|
|
||||||
# # 更新用户token
|
# 更新用户token
|
||||||
# self.refresh_user_token()
|
self.refresh_user_token()
|
||||||
|
self.is_retrieving_data = True
|
||||||
self.logger.info('ArkHelperBackend initiated')
|
self.logger.info('ArkHelperBackend initiated')
|
||||||
|
|
||||||
def load_users(self):
|
def load_users(self):
|
||||||
@@ -184,10 +184,21 @@ class ArkHelperBackend:
|
|||||||
pay_dict = {item['orderId']: item for item in pay_data}
|
pay_dict = {item['orderId']: item for item in pay_data}
|
||||||
payment_data.update(pay_dict)
|
payment_data.update(pay_dict)
|
||||||
self.user_data_dict[phone]['payment'] = payment_data
|
self.user_data_dict[phone]['payment'] = payment_data
|
||||||
|
self.logger.info(f'{phone} payment data updated')
|
||||||
self.save_data(token_status=False, gacha_status=False)
|
self.save_data(token_status=False, gacha_status=False)
|
||||||
|
|
||||||
|
def data_retrieve(self):
|
||||||
|
self.refresh_user_token()
|
||||||
|
self.update_payment_data()
|
||||||
|
self.update_gacha_data()
|
||||||
|
|
||||||
|
def show_data(self):
|
||||||
|
gacha_data = {user: content['gacha'] for user, content in self.user_data_dict.items()}
|
||||||
|
payment_data = {user: content['payment'] for user, content in self.user_data_dict.items()}
|
||||||
|
return gacha_data, payment_data
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
ak_back = ArkHelperBackend()
|
ak_back = ArkHelperBackend()
|
||||||
ak_back.update_payment_data()
|
# ak_back.update_payment_data()
|
||||||
|
ak_back.skland_sign()
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
import smtplib
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
from email.mime.base import MIMEBase
|
||||||
|
from email import encoders
|
||||||
|
|
||||||
|
|
||||||
|
def send_batch_email(receiver_email_list, subject, content, file_path=None):
|
||||||
|
"""
|
||||||
|
Send Email to the receiver list. Can attach files if needed.
|
||||||
|
:param receiver_email_list:
|
||||||
|
:param subject: Title
|
||||||
|
:param content: Word Content
|
||||||
|
:param file_path: file list
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
# sender config
|
||||||
|
sender_email = "ArmorServer@outlook.com"
|
||||||
|
password = "ServerOnly2024!"
|
||||||
|
|
||||||
|
# mail content
|
||||||
|
message = MIMEMultipart()
|
||||||
|
message["Subject"] = subject
|
||||||
|
message["From"] = sender_email
|
||||||
|
|
||||||
|
# main body
|
||||||
|
part1 = MIMEText(content, "plain")
|
||||||
|
message.attach(part1)
|
||||||
|
|
||||||
|
if file_path and isinstance(file_path, list):
|
||||||
|
for filename in file_path:
|
||||||
|
# 指定附件的路径和文件名
|
||||||
|
attachment = open(filename, 'rb')
|
||||||
|
|
||||||
|
# 创建MIMEBase实例
|
||||||
|
part = MIMEBase('application', 'octet-stream')
|
||||||
|
part.set_payload(attachment.read())
|
||||||
|
encoders.encode_base64(part)
|
||||||
|
|
||||||
|
# 添加邮件头
|
||||||
|
part.add_header(
|
||||||
|
'Content-Disposition',
|
||||||
|
f'attachment; filename= {filename}',
|
||||||
|
)
|
||||||
|
message.attach(part)
|
||||||
|
attachment.close()
|
||||||
|
|
||||||
|
# 登录SMTP服务器并发送邮件
|
||||||
|
# 使用Hotmail的SMTP服务器
|
||||||
|
server = smtplib.SMTP('smtp.office365.com', 587)
|
||||||
|
try:
|
||||||
|
server.starttls() # 启用安全传输模式
|
||||||
|
server.login(sender_email, password)
|
||||||
|
|
||||||
|
for receiver_email in receiver_email_list:
|
||||||
|
message["To"] = receiver_email
|
||||||
|
server.sendmail(sender_email, receiver_email, message.as_string())
|
||||||
|
print(f"Email to {receiver_email} sent successfully!")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error: {e}")
|
||||||
|
finally:
|
||||||
|
server.quit()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
target_email_list = ['2654988228@qq.com']
|
||||||
|
email_subject = 'Test Message'
|
||||||
|
email_body = """
|
||||||
|
This is a test email
|
||||||
|
"""
|
||||||
|
|
||||||
|
email_file_list = []
|
||||||
|
|
||||||
|
send_batch_email(target_email_list, email_subject, email_body, email_file_list)
|
||||||
|
|
||||||
Reference in New Issue
Block a user