From f161477fdf8a99647218efb617b6208c992c3933 Mon Sep 17 00:00:00 2001 From: timxx <3337598077@qq.com> Date: Tue, 7 Jul 2026 06:10:19 +0000 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Points=5FBased/D=5FSFSY=5F?= =?UTF-8?q?SJBHD.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Points_Based/D_SFSY_SJBHD.py | 136 +++++++++++++++++++++++++++++++++-- 1 file changed, 131 insertions(+), 5 deletions(-) diff --git a/Points_Based/D_SFSY_SJBHD.py b/Points_Based/D_SFSY_SJBHD.py index 442d4b9..4679c7e 100644 --- a/Points_Based/D_SFSY_SJBHD.py +++ b/Points_Based/D_SFSY_SJBHD.py @@ -4,10 +4,11 @@ 顺丰2026世界杯活动 - 射门游戏 + 比赛竞猜 + 每日礼物 Author: Auto-generated (参考端午活动脚本) -Version: 1.2.0 -Date: 2026-07-06 +Version: 1.2.1 +Date: 2026-07-07 更新日志: + 1.2.1 (2026-07-07) 修复多变量解析:支持青龙同名变量换行分隔,兼容 & 分隔 1.2.0 (2026-07-06) 优化邀请逻辑:支持列表内账号互相邀请,显示已邀请好友列表 1.1.0 (2026-07-04) 新增下注结算(settleBet)阶段、赔率显示、潜在收益/今日盈亏列 1.0.0 (2026-07-03) 初版:每日礼物 + 任务(白名单) + 射门游戏 + 比赛下注 @@ -416,7 +417,6 @@ class WorldCupExecutor: for i, friend in enumerate(invite_list, 1): mobile = friend.get('mobile', '未知') invite_date = friend.get('inviteDate', '未知') - # 脱敏显示 if len(mobile) >= 7: mobile_masked = mobile[:3] + "****" + mobile[7:] else: @@ -810,7 +810,133 @@ def run_account(account_url: str, index: int, invite_pool: List[str]) -> Dict[st } +# ==================== 主程序(重写解析逻辑,支持同名多变量) ==================== def main(): - # 收集所有 sfsyUrl 相关环境变量(兼容青龙面板同名多变量) + # 第一步:收集所有可能包含账号信息的环境变量 + raw_values = [] + for key, value in os.environ.items(): + if key == 'sfsyUrl' or key.startswith('sfsyUrl_'): + raw_values.append(value) + + if not raw_values: + print("❌ 未找到任何 sfsyUrl / sfsyUrl_* 环境变量,请检查青龙面板变量配置") + return + + # 第二步:合并所有值,按 & 和 \n 分割 + combined = '&'.join(raw_values) + parts = [] + for p in combined.split('&'): + if '\n' in p: + parts.extend(p.split('\n')) + else: + if p.strip(): + parts.append(p.strip()) + + # 第三步:提取以 sessionId= 开头的有效账号字符串 account_urls = [] - invite_pool = [] # \ No newline at end of file + for p in parts: + p = p.strip() + if not p: + continue + if p.startswith('sessionId='): + account_urls.append(p) + elif 'sessionId=' in p: + # 从第一个 sessionId= 开始截取 + idx = p.find('sessionId=') + account_urls.append(p[idx:]) + + # 第四步:去重(保留首次出现顺序) + seen = set() + unique_urls = [] + for u in account_urls: + if u not in seen: + seen.add(u) + unique_urls.append(u) + account_urls = unique_urls + + if not account_urls: + print("❌ 未能解析出有效的账号 Cookie,请检查格式(应以 sessionId= 开头)") + print(f" 原始输入片段: {combined[:200]}...") + return + + # 第五步:提取邀请池(所有 user_id) + invite_pool = [] + for url in account_urls: + m = re.search(r'_login_user_id_=([A-Fa-f0-9]+)', url) + if m: + invite_pool.append(m.group(1)) + + # 设置全局邀请池 + global inviteId + inviteId = invite_pool + + # 打乱顺序,防止固定顺序触发风控 + random.shuffle(account_urls) + + print("=" * 60) + print(f"⚽ 顺丰2026世界杯活动 - 射门挑战 + 比赛竞猜") + print(f"👨‍💻 Author: Auto-generated") + print(f"📱 共获取到 {len(account_urls)} 个账号") + print(f"🤝 邀请池: {len(invite_pool)} 个账号") + print(f"⚙️ 并发数量: {CONCURRENT_NUM}") + print(f"🎯 阶段开关: 礼物={ENABLE_DAILY_GIFT} 任务={ENABLE_TASKS} 游戏={ENABLE_GAME} 下注={ENABLE_BET} 结算={ENABLE_SETTLE}") + print(f"💰 单场下注: {BET_COIN} 金币(最低 10)") + print(f"⏰ 执行时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + print("=" * 60) + + all_results = [] + + if CONCURRENT_NUM <= 1: + for idx, url in enumerate(account_urls): + result = run_account(url, idx, invite_pool) + all_results.append(result) + if idx < len(account_urls) - 1: + print("-" * 60) + time.sleep(2) + else: + with ThreadPoolExecutor(max_workers=CONCURRENT_NUM) as pool: + futures = {pool.submit(run_account, url, idx, invite_pool): idx for idx, url in enumerate(account_urls)} + for future in as_completed(futures): + all_results.append(future.result()) + + all_results.sort(key=lambda x: x['index']) + + print(f"\n" + "=" * 90) + print(f"📊 世界杯活动汇总") + print("=" * 90) + print(f"{'序号':<6} {'手机号':<15} {'金币余额':<10} {'通关数':<6} {'下注数':<6} {'潜在收益':<10} {'今日盈亏':<10} {'每日礼物':<8}") + print("-" * 100) + + total_balance = 0 + total_payout = 0.0 + total_pnl = 0 + + for r in all_results: + idx = r['index'] + 1 + phone = r['phone'][:3] + "****" + r['phone'][7:] if r.get('phone') and len(r['phone']) >= 7 else r.get('phone', '未登录') + daily = '✅' if r.get('daily_gift') else '❌' + balance = r.get('final_balance', 0) + stages = len(r.get('stages_passed', [])) + bets = r.get('bets_placed', 0) + payout = sum(d.get('potential_payout', 0) for d in r.get('bet_details', [])) + pnl = r.get('settle_pnl', 0) + wins = r.get('settle_wins', 0) + losses = r.get('settle_losses', 0) + if wins + losses > 0: + pnl_str = f'{pnl:+d} ({wins}胜{losses}负)' + else: + pnl_str = '-' + total_payout += payout + total_pnl += pnl + total_balance += balance + + print(f"{idx:<6} {phone:<15} {balance:<10} {stages:<6} {bets:<6} {payout:<10} {pnl_str:<10} {daily:<8}") + + print("-" * 100) + print(f"{'汇总':<6} {'账号: ' + str(len(all_results)):<15} 总金币余额: {total_balance} | 累计盈亏: {total_pnl:+d}") + print("=" * 90) + print("\n🎊 所有账号执行完成!") + + +if __name__ == '__main__': + main() \ No newline at end of file