This commit is contained in:
2024-07-19 11:03:17 +08:00
parent 38ade33f70
commit 033842fe68
3 changed files with 207 additions and 5 deletions
+116
View File
@@ -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)
+16 -5
View File
@@ -26,9 +26,9 @@ class ArkHelperBackend:
self.user_config_dict = self.load_users()
self.user_data_dict = self.initiate_user_data()
# # 更新用户token
# self.refresh_user_token()
# 更新用户token
self.refresh_user_token()
self.is_retrieving_data = True
self.logger.info('ArkHelperBackend initiated')
def load_users(self):
@@ -184,10 +184,21 @@ class ArkHelperBackend:
pay_dict = {item['orderId']: item for item in pay_data}
payment_data.update(pay_dict)
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)
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__':
ak_back = ArkHelperBackend()
ak_back.update_payment_data()
# ak_back.update_payment_data()
ak_back.skland_sign()
+75
View File
@@ -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)