This commit is contained in:
2026-01-18 01:57:11 +08:00
parent ad120687b3
commit c39a01c4c0
3 changed files with 60 additions and 13 deletions

View File

@@ -255,18 +255,37 @@ class BotNotifier:
"""通知任务开始""" """通知任务开始"""
await self.notify(f"<b>🚀 任务开始</b>\nTeam: {team_name}") await self.notify(f"<b>🚀 任务开始</b>\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: if not TELEGRAM_NOTIFY_ON_COMPLETE:
return 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"<b>✅ 任务完成</b>\n" f"<b>✅ 任务完成</b>\n"
f"Team: {team_name}\n" f"Team: {team_name}\n"
f"成功: {success}\n" f"成功: {success_count}\n"
f"状态: {status}" f"状态: {status}"
) )
# 如果有成功的账号,列出来
if success_accounts:
message += "\n\n<b>成功账号:</b>"
for email in success_accounts:
message += f"\n• <code>{email}</code>"
await self.notify(message)
async def notify_error(self, message: str, details: str = ""): async def notify_error(self, message: str, details: str = ""):
"""通知错误""" """通知错误"""
if not TELEGRAM_NOTIFY_ON_ERROR: if not TELEGRAM_NOTIFY_ON_ERROR:

37
run.py
View File

@@ -392,19 +392,46 @@ def process_accounts(accounts: list, team_name: str) -> list:
# CPA 模式: codex_data 为 None授权成功后直接标记完成 # CPA 模式: codex_data 为 None授权成功后直接标记完成
# CRS 模式: 需要 codex_data手动添加到 CRS # CRS 模式: 需要 codex_data手动添加到 CRS
if AUTH_PROVIDER in ("cpa", "s2a"): if AUTH_PROVIDER == "s2a":
# CPA/S2A 模式: 授权成功即完成 (后台自动处理账号) # S2A 模式: 授权成功后验证账号是否入库
# codex_data 为 None 表示授权成功 from s2a_service import s2a_verify_account_in_pool
update_account_status(_tracker, team_name, email, "authorized") update_account_status(_tracker, team_name, email, "authorized")
save_team_tracker(_tracker) 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["status"] = "success"
result["crs_id"] = f"{AUTH_PROVIDER.upper()}-AUTO" # 标记为自动处理 result["crs_id"] = f"S2A-{account_id}"
update_account_status(_tracker, team_name, email, "completed") update_account_status(_tracker, team_name, email, "completed")
save_team_tracker(_tracker) save_team_tracker(_tracker)
log.success(f"{AUTH_PROVIDER.upper()} 账号处理完成: {email}") 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"] = "CPA-AUTO"
update_account_status(_tracker, team_name, email, "completed")
save_team_tracker(_tracker)
log.success(f"✅ CPA 账号处理完成: {email}")
else: else:
# CRS 模式: 原有逻辑 # CRS 模式: 原有逻辑
if codex_data: if codex_data:

View File

@@ -740,9 +740,10 @@ class ProvisionerBot:
"""包装任务以处理完成通知""" """包装任务以处理完成通知"""
try: try:
result = await task result = await task
success = sum(1 for r in (result or []) if r.get("status") == "completed") # 收集成功和失败的账号
failed = len(result or []) - success success_accounts = [r.get("email") for r in (result or []) if r.get("status") == "success"]
await self.notifier.notify_task_completed(team_name, success, failed) 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: except Exception as e:
await self.notifier.notify_error(f"任务失败: {team_name}", str(e)) await self.notifier.notify_error(f"任务失败: {team_name}", str(e))
finally: finally: