feat: full artifact content in Discord (split into chunks) + full task content display
This commit is contained in:
35
bot.py
35
bot.py
@@ -272,9 +272,15 @@ class GravityBot(commands.Bot):
|
|||||||
):
|
):
|
||||||
progress = parse_task_progress(event.content)
|
progress = parse_task_progress(event.content)
|
||||||
|
|
||||||
|
# Full task content (truncated to embed limit)
|
||||||
|
full_content = event.content.strip()
|
||||||
|
description = format_task_embed_text(progress) + "\n\n" + full_content
|
||||||
|
if len(description) > 4000:
|
||||||
|
description = description[:4000] + "\n…(truncated)"
|
||||||
|
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="📋 Task 진행 현황",
|
title="📋 Task 진행 현황",
|
||||||
description=format_task_embed_text(progress),
|
description=description,
|
||||||
color=discord.Color.gold() if progress.in_progress > 0
|
color=discord.Color.gold() if progress.in_progress > 0
|
||||||
else discord.Color.green() if progress.done == progress.total
|
else discord.Color.green() if progress.done == progress.total
|
||||||
else discord.Color.greyple(),
|
else discord.Color.greyple(),
|
||||||
@@ -304,20 +310,37 @@ class GravityBot(commands.Bot):
|
|||||||
label = labels.get(event.file_name, f"📄 {event.file_name}")
|
label = labels.get(event.file_name, f"📄 {event.file_name}")
|
||||||
event_label = "생성" if event.event_type == EventType.FILE_CREATED else "업데이트"
|
event_label = "생성" if event.event_type == EventType.FILE_CREATED else "업데이트"
|
||||||
|
|
||||||
lines = event.content.strip().splitlines()
|
full_content = event.content.strip()
|
||||||
preview = "\n".join(l for l in lines[:6] if l.strip())
|
CHUNK_SIZE = 4000 # Discord embed desc limit is 4096
|
||||||
if len(lines) > 6:
|
|
||||||
preview += f"\n... (+{len(lines) - 6} lines)"
|
|
||||||
|
|
||||||
|
# Split into chunks for long content
|
||||||
|
chunks = []
|
||||||
|
while full_content:
|
||||||
|
chunks.append(full_content[:CHUNK_SIZE])
|
||||||
|
full_content = full_content[CHUNK_SIZE:]
|
||||||
|
|
||||||
|
if not chunks:
|
||||||
|
chunks = ["(빈 파일)"]
|
||||||
|
|
||||||
|
# First chunk with title
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title=f"{label} ({event_label}됨)",
|
title=f"{label} ({event_label}됨)",
|
||||||
description=preview[:1000],
|
description=chunks[0],
|
||||||
color=discord.Color.blue(),
|
color=discord.Color.blue(),
|
||||||
timestamp=datetime.now(timezone.utc),
|
timestamp=datetime.now(timezone.utc),
|
||||||
)
|
)
|
||||||
embed.set_footer(text=f"Session: {event.conversation_id[:8]}")
|
embed.set_footer(text=f"Session: {event.conversation_id[:8]}")
|
||||||
await channel.send(embed=embed)
|
await channel.send(embed=embed)
|
||||||
|
|
||||||
|
# Additional chunks if content is long
|
||||||
|
for i, chunk in enumerate(chunks[1:], 2):
|
||||||
|
embed = discord.Embed(
|
||||||
|
title=f"{label} (계속 {i}/{len(chunks)})",
|
||||||
|
description=chunk,
|
||||||
|
color=discord.Color.blue(),
|
||||||
|
)
|
||||||
|
await channel.send(embed=embed)
|
||||||
|
|
||||||
# ─── Approval Scanner ────────────────────────────────────────────
|
# ─── Approval Scanner ────────────────────────────────────────────
|
||||||
|
|
||||||
@tasks.loop(seconds=3)
|
@tasks.loop(seconds=3)
|
||||||
|
|||||||
Reference in New Issue
Block a user