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: