From c39a01c4c0e30b2e591656d96914bb7f262517ad Mon Sep 17 00:00:00 2001 From: kyx236 Date: Sun, 18 Jan 2026 01:57:11 +0800 Subject: [PATCH] update --- bot_notifier.py | 29 ++++++++++++++++++++++++----- run.py | 37 ++++++++++++++++++++++++++++++++----- telegram_bot.py | 7 ++++--- 3 files changed, 60 insertions(+), 13 deletions(-) diff --git a/bot_notifier.py b/bot_notifier.py index 0ad69d2..ee03b27 100644 --- a/bot_notifier.py +++ b/bot_notifier.py @@ -255,18 +255,37 @@ class BotNotifier: """通知任务开始""" await self.notify(f"🚀 任务开始\nTeam: {team_name}") - async def notify_task_completed(self, team_name: str, success: int, failed: int): - """通知任务完成""" + async def notify_task_completed(self, team_name: str, success_accounts: list, failed_accounts: list): + """通知任务完成 + + Args: + team_name: Team 名称 + success_accounts: 成功的账号列表 + failed_accounts: 失败的账号列表 + """ if not TELEGRAM_NOTIFY_ON_COMPLETE: return - status = "全部成功" if failed == 0 else f"{failed} 个失败" - await self.notify( + + success_count = len(success_accounts) + failed_count = len(failed_accounts) + status = "全部成功" if failed_count == 0 else f"{failed_count} 个失败" + + # 构建消息 + message = ( f"✅ 任务完成\n" f"Team: {team_name}\n" - f"成功: {success}\n" + f"成功: {success_count}\n" f"状态: {status}" ) + # 如果有成功的账号,列出来 + if success_accounts: + message += "\n\n成功账号:" + for email in success_accounts: + message += f"\n• {email}" + + await self.notify(message) + async def notify_error(self, message: str, details: str = ""): """通知错误""" if not TELEGRAM_NOTIFY_ON_ERROR: diff --git a/run.py b/run.py index 9450a7a..0b9671c 100644 --- a/run.py +++ b/run.py @@ -392,19 +392,46 @@ def process_accounts(accounts: list, team_name: str) -> list: # CPA 模式: codex_data 为 None,授权成功后直接标记完成 # CRS 模式: 需要 codex_data,手动添加到 CRS - if AUTH_PROVIDER in ("cpa", "s2a"): - # CPA/S2A 模式: 授权成功即完成 (后台自动处理账号) - # codex_data 为 None 表示授权成功 + if AUTH_PROVIDER == "s2a": + # S2A 模式: 授权成功后验证账号是否入库 + from s2a_service import s2a_verify_account_in_pool + + update_account_status(_tracker, team_name, email, "authorized") + save_team_tracker(_tracker) + + # 验证账号是否成功入库 + log.step("正在验证 S2A 账号入库状态...") + progress_update(step="验证入库...") + verified, account_data = s2a_verify_account_in_pool(email) + + if verified: + account_id = account_data.get("id", "") + account_name = account_data.get("name", "") + result["status"] = "success" + result["crs_id"] = f"S2A-{account_id}" + + update_account_status(_tracker, team_name, email, "completed") + save_team_tracker(_tracker) + + log.success(f"✅ S2A 账号入库成功 (ID: {account_id}, 名称: {account_name})") + else: + log.warning("⚠️ S2A 授权成功但入库验证失败") + result["status"] = "partial" + update_account_status(_tracker, team_name, email, "partial") + save_team_tracker(_tracker) + + elif AUTH_PROVIDER == "cpa": + # CPA 模式: 授权成功即完成 (后台自动处理账号) update_account_status(_tracker, team_name, email, "authorized") save_team_tracker(_tracker) result["status"] = "success" - result["crs_id"] = f"{AUTH_PROVIDER.upper()}-AUTO" # 标记为自动处理 + result["crs_id"] = "CPA-AUTO" update_account_status(_tracker, team_name, email, "completed") save_team_tracker(_tracker) - log.success(f"✅ {AUTH_PROVIDER.upper()} 账号处理完成: {email}") + log.success(f"✅ CPA 账号处理完成: {email}") else: # CRS 模式: 原有逻辑 if codex_data: diff --git a/telegram_bot.py b/telegram_bot.py index 40a108a..adbdf01 100644 --- a/telegram_bot.py +++ b/telegram_bot.py @@ -740,9 +740,10 @@ class ProvisionerBot: """包装任务以处理完成通知""" try: result = await task - success = sum(1 for r in (result or []) if r.get("status") == "completed") - failed = len(result or []) - success - await self.notifier.notify_task_completed(team_name, success, failed) + # 收集成功和失败的账号 + success_accounts = [r.get("email") for r in (result or []) if r.get("status") == "success"] + failed_accounts = [r.get("email") for r in (result or []) if r.get("status") != "success"] + await self.notifier.notify_task_completed(team_name, success_accounts, failed_accounts) except Exception as e: await self.notifier.notify_error(f"任务失败: {team_name}", str(e)) finally: