update
This commit is contained in:
@@ -255,18 +255,37 @@ class BotNotifier:
|
||||
"""通知任务开始"""
|
||||
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:
|
||||
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"Team: {team_name}\n"
|
||||
f"成功: {success}\n"
|
||||
f"成功: {success_count}\n"
|
||||
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 = ""):
|
||||
"""通知错误"""
|
||||
if not TELEGRAM_NOTIFY_ON_ERROR:
|
||||
|
||||
37
run.py
37
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"{AUTH_PROVIDER.upper()}-AUTO" # 标记为自动处理
|
||||
result["crs_id"] = f"S2A-{account_id}"
|
||||
|
||||
update_account_status(_tracker, team_name, email, "completed")
|
||||
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:
|
||||
# CRS 模式: 原有逻辑
|
||||
if codex_data:
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user