|
65 | 65 | unregister_job_post_channel, |
66 | 66 | ) |
67 | 67 | from five08.job_leads import ( |
| 68 | + format_job_lead_review_summary, |
68 | 69 | get_job_lead, |
69 | 70 | JobLead, |
70 | 71 | JobLeadStatus, |
@@ -3454,12 +3455,43 @@ def _truncate_job_lead_text(value: str, limit: int) -> str: |
3454 | 3455 |
|
3455 | 3456 | @classmethod |
3456 | 3457 | def _format_job_lead_review_line(cls, index: int, lead: JobLead) -> str: |
3457 | | - tags = ", ".join(lead.tags[:5]) if lead.tags else "untagged" |
3458 | 3458 | title = cls._truncate_job_lead_text(lead.title, 120) |
3459 | | - return ( |
3460 | | - f"{index}. `{lead.id[:8]}` **{title}** " |
3461 | | - f"({lead.confidence:.0%}; {tags})\n{lead.source_url}" |
3462 | | - ) |
| 3459 | + summary = cls._truncate_job_lead_text(format_job_lead_review_summary(lead), 180) |
| 3460 | + return f"{index}. `{lead.id[:8]}` **{title}**\n{summary}\n{lead.source_url}" |
| 3461 | + |
| 3462 | + @classmethod |
| 3463 | + def _format_job_lead_review_message(cls, leads: list[JobLead]) -> str: |
| 3464 | + """Format a bounded Discord response for pending lead review.""" |
| 3465 | + if not leads: |
| 3466 | + return "Pending job leads:\n\nNo pending job leads found." |
| 3467 | + limit = settings.discord_sendmsg_character_limit |
| 3468 | + header = "Pending job leads:" |
| 3469 | + lines: list[str] = [] |
| 3470 | + shown = 0 |
| 3471 | + for index, lead in enumerate(leads, start=1): |
| 3472 | + line = cls._format_job_lead_review_line(index, lead) |
| 3473 | + candidate_lines = [*lines, line] |
| 3474 | + omitted = len(leads) - len(candidate_lines) |
| 3475 | + footer = f"\n\nShowing {len(candidate_lines)} of {len(leads)} leads." |
| 3476 | + if omitted > 0: |
| 3477 | + footer += " Use a lower limit to inspect omitted leads." |
| 3478 | + candidate = f"{header}\n\n" + "\n\n".join(candidate_lines) + footer |
| 3479 | + if len(candidate) > limit: |
| 3480 | + break |
| 3481 | + lines = candidate_lines |
| 3482 | + shown = len(candidate_lines) |
| 3483 | + |
| 3484 | + if not lines: |
| 3485 | + first = cls._truncate_job_lead_text( |
| 3486 | + cls._format_job_lead_review_line(1, leads[0]), |
| 3487 | + max(0, limit - len(header) - 32), |
| 3488 | + ) |
| 3489 | + return f"{header}\n\n{first}" |
| 3490 | + |
| 3491 | + footer = f"\n\nShowing {shown} of {len(leads)} leads." |
| 3492 | + if shown < len(leads): |
| 3493 | + footer += " Use a lower limit to inspect omitted leads." |
| 3494 | + return f"{header}\n\n" + "\n\n".join(lines) + footer |
3463 | 3495 |
|
3464 | 3496 | @classmethod |
3465 | 3497 | def _format_job_lead_thread_content(cls, lead: JobLead) -> str: |
@@ -4014,12 +4046,8 @@ async def list_sourced_job_leads( |
4014 | 4046 | ) |
4015 | 4047 | return |
4016 | 4048 |
|
4017 | | - lines = [ |
4018 | | - self._format_job_lead_review_line(index, lead) |
4019 | | - for index, lead in enumerate(leads, start=1) |
4020 | | - ] |
4021 | 4049 | await interaction.followup.send( |
4022 | | - "Pending job leads:\n\n" + "\n\n".join(lines), |
| 4050 | + self._format_job_lead_review_message(leads), |
4023 | 4051 | ephemeral=True, |
4024 | 4052 | ) |
4025 | 4053 |
|
|
0 commit comments