diff --git a/.gitignore b/.gitignore index 9b3fdd90f..1d2a3f764 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,9 @@ __pycache__/ *.py[cod] *$py.class +# Nodejs Version Manager +.nvmrc + # C extensions *.so diff --git a/arknights_mower/__main__.py b/arknights_mower/__main__.py index 036eaef44..157d1ecaf 100644 --- a/arknights_mower/__main__.py +++ b/arknights_mower/__main__.py @@ -180,6 +180,7 @@ def initialize(tasks, scheduler=None): "server_push_enable": conf["server_push_enable"], "sendKey": conf["sendKey"], }, + "pushplus_config": conf["pushplus"], } base_scheduler.check_mail_enable = conf["check_mail_enable"] base_scheduler.report_enable = conf["report_enable"] diff --git a/arknights_mower/templates/conf.yml b/arknights_mower/templates/conf.yml index c2ef99733..e0b9a21bd 100644 --- a/arknights_mower/templates/conf.yml +++ b/arknights_mower/templates/conf.yml @@ -262,6 +262,9 @@ run_order_grandet_mode: back_to_index: false server_push_enable: false sendKey: '' +pushplus: + enable: false + token: '' recruit_gap: 9 recruit_auto_5: 1 recruit_auto_only5: false diff --git a/arknights_mower/utils/solver.py b/arknights_mower/utils/solver.py index 7517efa7b..b6763b1ba 100644 --- a/arknights_mower/utils/solver.py +++ b/arknights_mower/utils/solver.py @@ -811,6 +811,25 @@ def handle_serverJang_error(self, url, data): logger.exception(e) self.csleep(delay) + # PushPlus异常处理 + def handle_pushplus_error(self, data): + for delay in self.exponential_backoff(): + try: + response = requests.post(r"http://www.pushplus.plus/send", json=data) + json_data = response.json() + if json_data.get("code") == 200: + logger.info("PushPlus通知发送成功") + break + else: + logger.error( + f"PushPlus通知发送失败,错误信息:{json_data.get('msg')}" + ) + self.csleep(delay) + except Exception as e: + logger.error("PushPlus通知发送失败") + logger.exception(e) + self.csleep(delay) + def send_message( self, body="", @@ -857,6 +876,8 @@ def send_message_old( email_config = send_message_config.get("email_config") # 获取Server酱配置 serverJang_push_config = send_message_config.get("serverJang_push_config") + # 获取PushPlus配置 + pushplus_config = send_message_config.get("pushplus_config") # 邮件通知部分 if email_config and email_config.get("mail_enable", 0): @@ -902,6 +923,53 @@ def send_message_old( except Exception: failed_methods.append(("serverJang", url, data)) + # PushPlus通知部分 + if pushplus_config and pushplus_config.get("enable", False): + token = pushplus_config.get("token") + if not token: + logger.error("PushPlus的token未配置") + return + + # img 嵌入 html + # if attach_image is not None: + # img = cv2.cvtColor(attach_image, cv2.COLOR_RGB2BGR) + # _, attachment = cv2.imencode( + # ".jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 75] + # ) + # img_base64 = base64.b64encode(attachment) + # img_url = f"data:image/jpeg;base64,{img_base64.decode('utf-8')}" + # img_tag = f'' + + # # 查找 标签的位置 + # body_close_tag = '' + # insert_position = body.find(body_close_tag) + + # # 在 标签前插入 标签 + # if insert_position != -1: + # body = body[:insert_position] + img_tag + body[insert_position:] + + url = r"http://www.pushplus.plus/send" + data = { + "token": token, + "title": "Mower通知", + "content": body, + "template": "markdown", + } + + try: + response = requests.post(url, json=data) + json_data = response.json() + if json_data.get("code") == 200: + logger.info("PushPlus通知发送成功") + else: + logger.error( + f"PushPlus通知发送失败,错误信息:{json_data.get('msg')}" + ) + except Exception as e: + logger.error("PushPlus通知发送失败") + logger.exception(e) + failed_methods.append(("pushplus", data)) + # 处理失败的方法 for method, *args in failed_methods: if method == "email": @@ -918,3 +986,11 @@ def send_message_old( break except Exception: self.csleep(1) + + elif method == "pushplus": + for _ in range(retry_times): + try: + self.handle_pushplus_error(*args) + break + except Exception: + self.csleep(1) diff --git a/server.py b/server.py index 852095be2..8bd2c60a3 100755 --- a/server.py +++ b/server.py @@ -544,6 +544,30 @@ def test_serverJang_push(): return "发送失败 : " + str(e) +@app.route("/test-pushplus-push") +@require_token +def test_pushplus_push(): + import requests + + try: + response = requests.post( + r"http://www.pushplus.plus/send", + params={ + "token": config.conf["pushplus"]["token"], + "title": "arknights-mower推送测试", + "content": "arknights-mower推送测试", + }, + ) + + if response.status_code == 200 and response.json().get("code") == 200: + return "发送成功" + else: + return "发送失败 : " + response.json().get("message", "") + except Exception as e: + print(type(e)) + return "发送失败 : " + str(e) + + @app.route("/check-skland") @require_token def test_skland(): diff --git a/ui/components.d.ts b/ui/components.d.ts index a4a20c204..657ee3eb6 100644 --- a/ui/components.d.ts +++ b/ui/components.d.ts @@ -79,6 +79,7 @@ declare module 'vue' { NVirtualList: typeof import('naive-ui')['NVirtualList'] NWatermark: typeof import('naive-ui')['NWatermark'] PlanEditor: typeof import('./src/components/PlanEditor.vue')['default'] + PushPlus: typeof import('./src/components/PushPlus.vue')['default'] ReclamationAlgorithm: typeof import('./src/components/ReclamationAlgorithm.vue')['default'] Recruit: typeof import('./src/components/Recruit.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/ui/src/components/PushPlus.vue b/ui/src/components/PushPlus.vue new file mode 100644 index 000000000..0aae949e4 --- /dev/null +++ b/ui/src/components/PushPlus.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/ui/src/pages/Settings.vue b/ui/src/pages/Settings.vue index 9b378f2d5..7528e056b 100644 --- a/ui/src/pages/Settings.vue +++ b/ui/src/pages/Settings.vue @@ -471,6 +471,7 @@ async function test_screenshot() {
+
diff --git a/ui/src/stores/config.js b/ui/src/stores/config.js index 4994dde08..588723c56 100644 --- a/ui/src/stores/config.js +++ b/ui/src/stores/config.js @@ -61,6 +61,7 @@ export const useConfigStore = defineStore('config', () => { const run_order_grandet_mode = ref({}) const server_push_enable = ref(false) // Server酱通知开关 const sendKey = ref('') // Server酱Key值 + const pushplus = ref({}) const check_mail_enable = ref(true) const report_enable = ref(true) const send_report = ref(true) @@ -156,6 +157,8 @@ export const useConfigStore = defineStore('config', () => { // 新增:加载Server酱的配置 server_push_enable.value = response.data.server_push_enable != 0 sendKey.value = response.data.sendKey + // 新增:加载PushPlus的配置 + pushplus.value = response.data.pushplus check_mail_enable.value = response.data.check_mail_enable report_enable.value = response.data.report_enable send_report.value = response.data.send_report @@ -240,6 +243,8 @@ export const useConfigStore = defineStore('config', () => { // 新增:Server酱的配置 server_push_enable: server_push_enable.value ? 1 : 0, sendKey: sendKey.value, + // 新增:PushPlus的配置 + pushplus: pushplus.value, check_mail_enable: check_mail_enable.value, report_enable: report_enable.value, send_report: send_report.value, @@ -334,6 +339,7 @@ export const useConfigStore = defineStore('config', () => { run_order_grandet_mode, server_push_enable, sendKey, + pushplus, check_mail_enable, report_enable, send_report,