From 6672631551c1b0601057e5fdbb2e2a996e786c42 Mon Sep 17 00:00:00 2001 From: hlt1995 <93117676+hlt1995@users.noreply.github.com> Date: Sat, 28 Mar 2026 15:39:35 +0800 Subject: [PATCH] Update print statement from 'Hello' to 'Goodbye' --- SFExpress_Year.py | 113 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 78 insertions(+), 35 deletions(-) diff --git a/SFExpress_Year.py b/SFExpress_Year.py index c779fdb..6ed277c 100644 --- a/SFExpress_Year.py +++ b/SFExpress_Year.py @@ -1,14 +1,11 @@ -# cron: 0 12 * * * -# const $ = new Env('顺丰速运33周年活动') - """ 顺丰33周年活动 - 完成任务抽勋章 Author: 爱学习的呆子 -Version: 1.1.0 -Date: 2026-03-19 +Version: 1.2.0 +Date: 2026-03-26 -顺丰暗号环境变量:sfsyah +暗号答案通过环境变量 sfsyah 填写当天答案,历史答案从API获取,运行时展示开奖结果及奖励 """ @@ -46,9 +43,6 @@ ACTIVITY_CODE = "ANNIVERSARY_2026" TOKEN = 'wwesldfs29aniversaryvdld29' SYS_CODE = 'MCS-MIMP-CORE' -# 暗号环境变量(可选,不设置则自动从API获取答案) -GUESS_ANSWER_ENV = 'sfsyah' - # 需要跳过的任务类型(需要实际操作的) SKIP_TASK_TYPES = [ 'BUY_ADD_VALUE_SERVICE_PACKET', # 通过服务套餐寄件 @@ -431,10 +425,10 @@ class AnniversaryExecutor: # ---------- 业务逻辑 ---------- def do_guess_game(self) -> bool: - """对暗号任务:读取所有日期的题目,按顺序匹配环境变量中的暗号逐日提交""" + """对暗号任务:从API获取题目和答案,逐日提交""" self.logger.task('[对暗号赢免单] 开始...') - # 1. 获取题目列表 + # 1. 获取题目列表(含答案) guess_info = self.get_guess_title_list() if not guess_info: self.logger.warning('[对暗号] 获取题目列表失败') @@ -452,14 +446,7 @@ class AnniversaryExecutor: self.logger.info(f'[对暗号] 共 {len(title_list)} 天题目,当前日期: {current_period}') - # 2. 读取环境变量中的暗号列表(每行一个,按日期顺序对应) - env_answers_raw = os.getenv(GUESS_ANSWER_ENV, '').strip() - env_answers = [a.strip() for a in env_answers_raw.split('\n') if a.strip()] if env_answers_raw else [] - - if env_answers: - self.logger.info(f'[对暗号] 环境变量已设置 {len(env_answers)} 个暗号') - - # 3. 逐日处理 + # 2. 逐日处理 any_success = False for i, title in enumerate(title_list): period = title.get('period', '') @@ -477,17 +464,22 @@ class AnniversaryExecutor: self.logger.info(f'[对暗号] {period} 尚未开放,跳过') continue - # 获取答案:优先环境变量按顺序匹配,其次API返回的answerInfo - answer = '' - if i < len(env_answers): - answer = env_answers[i] - if not answer: - answer = title.get('answerInfo', '') + # 从API返回的answerInfo获取答案 + answer = title.get('answerInfo', '') if not answer: - self.logger.warning(f'[对暗号] {period} 无法获取答案(提示: {tip})') - self.logger.info(f'[对暗号] 请在环境变量 {GUESS_ANSWER_ENV} 第 {i + 1} 行填写该日暗号') - continue + # API未返回答案,尝试从环境变量获取当天答案 + if period == current_period: + env_answer = os.getenv('sfsyah', '').strip() + if env_answer: + answer = env_answer + self.logger.info(f'[对暗号] {period} 使用环境变量 sfsyah 答案: {answer}') + else: + self.logger.warning(f'[对暗号] {period} API未返回答案且未设置环境变量 sfsyah(提示: {tip})') + continue + else: + self.logger.warning(f'[对暗号] {period} API未返回答案(提示: {tip})') + continue self.logger.info(f'[对暗号] {period} 提交答案: {answer}') @@ -516,6 +508,58 @@ class AnniversaryExecutor: return any_success + def show_guess_results(self) -> None: + """展示暗号开奖结果及奖励信息""" + guess_info = self.get_guess_title_list() + if not guess_info: + self.logger.warning('[暗号开奖] 获取开奖结果失败') + return + + title_list = guess_info.get('guessTitleInfoList', []) + if not title_list: + self.logger.info('[暗号开奖] 暂无开奖数据') + return + + title_list.sort(key=lambda x: x.get('period', '')) + + self.logger.info('=' * 20 + ' 暗号开奖结果 ' + '=' * 20) + + for title in title_list: + period = title.get('period', '') + answer_status = title.get('answerStatus') + answer_info = title.get('answerInfo', '') + answer_analysis = title.get('answerAnalysis', '') + tip = title.get('tip', '') + award_list = title.get('awardList', []) + + if answer_status == 1: + self.logger.success(f'日期: {period} 答案: {answer_info}') + if answer_analysis: + self.logger.info(f'解析: {answer_analysis}') + if award_list: + self.logger.info('获得奖励:') + for award in award_list: + product_name = award.get('productName') or award.get('couponName', '未知奖品') + amount = award.get('amount', 1) + coupon_no = award.get('couponNo', '') + denomination = award.get('denomination', '') + limit_money = award.get('limitMoney', '') + desc = product_name + if denomination and limit_money: + desc = f'{denomination}折寄件券(最高抵扣{limit_money}元)' if '折' in product_name else product_name + coupon_info = f'(券号: {coupon_no})' if coupon_no else '' + self.logger.info(f' - {desc} x{amount} {coupon_info}') + else: + self.logger.info('暂无奖励信息') + elif answer_info: + # 有答案但未作答(answerStatus != 1) + self.logger.warning(f'日期: {period} 答案: {answer_info}(未作答)') + else: + # 未公布答案 + self.logger.info(f'日期: {period} 提示: {tip}(答案未公布)') + + self.logger.info('=' * 56) + def do_tasks(self, result: Dict) -> None: """执行所有可自动完成的任务""" self.logger.info('正在获取周年活动任务列表...') @@ -720,6 +764,9 @@ class AnniversaryExecutor: # 3. 抽勋章 self.do_claim_medals(result) + # 4. 展示暗号开奖结果及奖励 + self.show_guess_results() + return result @@ -787,15 +834,11 @@ def main(): print(f"❌ 环境变量 {env_name} 为空或格式错误") return - # 暗号提示 - guess_answer = os.getenv(GUESS_ANSWER_ENV, '') + guess_answer = os.getenv('sfsyah', '').strip() if guess_answer: - answer_lines = [a.strip() for a in guess_answer.strip().split('\n') if a.strip()] - print(f"🔑 已设置暗号环境变量,共 {len(answer_lines)} 个暗号(按日期顺序对应)") - for i, a in enumerate(answer_lines): - print(f" 第{i+1}天: {a}") + print(f"🔑 今日暗号答案: {guess_answer}(来自环境变量 sfsyah)") else: - print(f"🔑 未设置暗号环境变量({GUESS_ANSWER_ENV}),将自动从API获取答案") + print(f"⚠️ 未设置环境变量 sfsyah,当天暗号将无法作答(历史答案从API获取)") random.shuffle(account_urls)