|
46 | 46 | "ConfirmThreadCreationView", |
47 | 47 | "DummyParam", |
48 | 48 | "extract_forwarded_content", |
| 49 | + "extract_forwarded_attachments", |
49 | 50 | ] |
50 | 51 |
|
51 | 52 |
|
@@ -640,6 +641,36 @@ def __init__(self): |
640 | 641 | self.value = None |
641 | 642 |
|
642 | 643 |
|
| 644 | +def extract_forwarded_attachments(message) -> typing.List[typing.Tuple[str, str]]: |
| 645 | + """ |
| 646 | + Extract attachment URLs from forwarded messages. |
| 647 | +
|
| 648 | + Parameters |
| 649 | + ---------- |
| 650 | + message : discord.Message |
| 651 | + The message to extract attachments from. |
| 652 | +
|
| 653 | + Returns |
| 654 | + ------- |
| 655 | + List[Tuple[str, str]] |
| 656 | + List of (url, filename) tuples for attachments. |
| 657 | + """ |
| 658 | + import discord |
| 659 | + attachments = [] |
| 660 | + try: |
| 661 | + if getattr(message, "message_snapshots", None): |
| 662 | + for snap in message.message_snapshots: |
| 663 | + if getattr(snap, "attachments", None): |
| 664 | + for a in snap.attachments: |
| 665 | + url = getattr(a, "url", None) |
| 666 | + filename = getattr(a, "filename", "Unknown") |
| 667 | + if url: |
| 668 | + attachments.append((url.split('?')[0], filename)) |
| 669 | + except Exception: |
| 670 | + pass |
| 671 | + return attachments |
| 672 | + |
| 673 | + |
643 | 674 | def extract_forwarded_content(message) -> typing.Optional[str]: |
644 | 675 | """ |
645 | 676 | Extract forwarded message content from Discord forwarded messages. |
@@ -687,12 +718,18 @@ def extract_forwarded_content(message) -> typing.Optional[str]: |
687 | 718 | break # One embed preview is usually enough |
688 | 719 |
|
689 | 720 | if getattr(snap, "attachments", None): |
690 | | - attachment_info = ", ".join( |
691 | | - [getattr(a, "filename", "Unknown") for a in snap.attachments[:3]] |
692 | | - ) |
| 721 | + attachment_links = [] |
| 722 | + for a in snap.attachments[:3]: |
| 723 | + filename = getattr(a, "filename", "Unknown") |
| 724 | + url = getattr(a, "url", None) |
| 725 | + if url: |
| 726 | + url = url.split('?')[0] |
| 727 | + attachment_links.append(f"[{filename}]({url})") |
| 728 | + else: |
| 729 | + attachment_links.append(filename) |
693 | 730 | if len(snap.attachments) > 3: |
694 | | - attachment_info += f" (+{len(snap.attachments) - 3} more)" |
695 | | - formatted_part += f"[Attachments: {attachment_info}]\n" |
| 731 | + attachment_links.append(f"(+{len(snap.attachments) - 3} more)") |
| 732 | + formatted_part += f"📎 {', '.join(attachment_links)}\n" |
696 | 733 | forwarded_parts.append(formatted_part) |
697 | 734 |
|
698 | 735 | if forwarded_parts: |
@@ -725,12 +762,18 @@ def extract_forwarded_content(message) -> typing.Optional[str]: |
725 | 762 | embed_desc = embed_desc[:297] + "..." |
726 | 763 | return f"**{ref_author_name}:** {embed_desc}" |
727 | 764 | elif getattr(ref_msg, "attachments", None): |
728 | | - attachment_info = ", ".join( |
729 | | - [getattr(a, "filename", "Unknown") for a in ref_msg.attachments[:3]] |
730 | | - ) |
| 765 | + attachment_links = [] |
| 766 | + for a in ref_msg.attachments[:3]: |
| 767 | + filename = getattr(a, "filename", "Unknown") |
| 768 | + url = getattr(a, "url", None) |
| 769 | + if url: |
| 770 | + url = url.split('?')[0] |
| 771 | + attachment_links.append(f"[{filename}]({url})") |
| 772 | + else: |
| 773 | + attachment_links.append(filename) |
731 | 774 | if len(ref_msg.attachments) > 3: |
732 | | - attachment_info += f" (+{len(ref_msg.attachments) - 3} more)" |
733 | | - return f"**{ref_author_name}:** [Attachments: {attachment_info}]" |
| 775 | + attachment_links.append(f"(+{len(ref_msg.attachments) - 3} more)") |
| 776 | + return f"**{ref_author_name}:** 📎 {', '.join(attachment_links)}" |
734 | 777 | except Exception as e: |
735 | 778 | # Log and continue; failing to extract a reference preview shouldn't break flow |
736 | 779 | logger.debug("Failed to extract reference preview: %s", e) |
|
0 commit comments