fix(anime): batch_download list crash + title 오분류 fallback 수정

This commit is contained in:
2026-03-18 22:45:32 +09:00
parent 7a3df96a95
commit 7d36be0497
3 changed files with 46 additions and 12 deletions

View File

@@ -91,6 +91,12 @@ async def handle_anime_message(
mode = parsed.get("download_mode", "auto")
episode = parsed.get("episode")
result = await pipeline.download(title, mode=mode, episode=episode)
# resolve 실패 시 batch fallback (title이 애니 제목이 아닌 경우)
if not result.success and not episode:
logger.info(f"단건 resolve 실패 → 배치 fallback: '{title}'")
dl_filter = parsed.get("filter", "")
batch_mode = "sub_only" if "sub" in dl_filter else "auto"
result = await pipeline.batch_download(mode=batch_mode)
elif action == "download" and not title:
# 이번 분기 전체 다운로드 (자막 최신화 등)
dl_filter = parsed.get("filter", "")
@@ -143,19 +149,34 @@ async def handle_anime_message(
))
return
# 결과 임베드
embed = discord.Embed(
title=f"🎬 {result.message[:100]}" if result.message else "🎬 결과",
description=result.message[:2000] if result.message else "완료",
color=0x2ECC71 if result.success else 0xE74C3C,
)
if result.errors:
embed.add_field(
name="⚠️ 오류",
value="\n".join(f"{e}" for e in result.errors[:5])[:1000],
inline=False,
# 결과 임베드 — batch_download는 list[DownloadResult] 반환
if isinstance(result, list):
successes = [r for r in result if r.success]
failures = [r for r in result if not r.success]
lines = []
for r in result:
icon = "" if r.success else ""
name = r.anime.subject if r.anime else "?"
lines.append(f"{icon} {name}: {r.message[:60]}")
embed = discord.Embed(
title=f"📥 일괄 다운로드 ({len(successes)}/{len(result)}건 성공)",
description="\n".join(lines)[:2000] if lines else "처리 완료",
color=0x2ECC71 if not failures else 0xF39C12,
)
await safe_send_embed(message.channel, embed)
await safe_send_embed(message.channel, embed)
else:
embed = discord.Embed(
title=f"🎬 {result.message[:100]}" if result.message else "🎬 결과",
description=result.message[:2000] if result.message else "완료",
color=0x2ECC71 if result.success else 0xE74C3C,
)
if result.errors:
embed.add_field(
name="⚠️ 오류",
value="\n".join(f"{e}" for e in result.errors[:5])[:1000],
inline=False,
)
await safe_send_embed(message.channel, embed)
except Exception as e:
logger.error(f"애니 핸들러 오류: {e}", exc_info=True)