mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-26 06:01:49 +00:00
fix(discord): handle forwarded messages via message_snapshots
Discord introduced message_snapshots for forwarded messages — text and attachments live inside snap.content / snap.attachments rather than on the parent message. _handle_message wasn't reading them, so forwards showed up empty. Defensively extracts snapshot text (when raw_content is empty) and appends snapshot attachments to the working all_attachments list used for type detection and media routing. hasattr/getattr guards keep this safe on older discord.py installs without the field. Salvage of #25462 by @1RB (manually re-applied — original branch was stale against current main).
This commit is contained in:
parent
efa97af7e2
commit
b59ed9c6bc
1 changed files with 16 additions and 3 deletions
|
|
@ -4186,6 +4186,17 @@ class DiscordAdapter(BasePlatformAdapter):
|
||||||
raw_content = message.content.strip()
|
raw_content = message.content.strip()
|
||||||
normalized_content = raw_content
|
normalized_content = raw_content
|
||||||
mention_prefix = False
|
mention_prefix = False
|
||||||
|
|
||||||
|
snapshot_attachments = []
|
||||||
|
if hasattr(message, "message_snapshots") and message.message_snapshots:
|
||||||
|
snapshot_text_parts = []
|
||||||
|
for snap in message.message_snapshots:
|
||||||
|
if getattr(snap, "content", None):
|
||||||
|
snapshot_text_parts.append(snap.content.strip())
|
||||||
|
snapshot_attachments.extend(getattr(snap, "attachments", []) or [])
|
||||||
|
if snapshot_text_parts and not raw_content:
|
||||||
|
raw_content = "\n".join(snapshot_text_parts)
|
||||||
|
normalized_content = raw_content
|
||||||
if self._client.user and self._client.user in message.mentions:
|
if self._client.user and self._client.user in message.mentions:
|
||||||
mention_prefix = True
|
mention_prefix = True
|
||||||
normalized_content = normalized_content.replace(f"<@{self._client.user.id}>", "").strip()
|
normalized_content = normalized_content.replace(f"<@{self._client.user.id}>", "").strip()
|
||||||
|
|
@ -4261,13 +4272,15 @@ class DiscordAdapter(BasePlatformAdapter):
|
||||||
auto_threaded_channel = thread
|
auto_threaded_channel = thread
|
||||||
self._threads.mark(thread_id)
|
self._threads.mark(thread_id)
|
||||||
|
|
||||||
|
all_attachments = list(message.attachments) + snapshot_attachments
|
||||||
|
|
||||||
# Determine message type
|
# Determine message type
|
||||||
msg_type = MessageType.TEXT
|
msg_type = MessageType.TEXT
|
||||||
if normalized_content.startswith("/"):
|
if normalized_content.startswith("/"):
|
||||||
msg_type = MessageType.COMMAND
|
msg_type = MessageType.COMMAND
|
||||||
elif message.attachments:
|
elif all_attachments:
|
||||||
# Check attachment types
|
# Check attachment types
|
||||||
for att in message.attachments:
|
for att in all_attachments:
|
||||||
if att.content_type:
|
if att.content_type:
|
||||||
if att.content_type.startswith("image/"):
|
if att.content_type.startswith("image/"):
|
||||||
msg_type = MessageType.PHOTO
|
msg_type = MessageType.PHOTO
|
||||||
|
|
@ -4326,7 +4339,7 @@ class DiscordAdapter(BasePlatformAdapter):
|
||||||
media_urls = []
|
media_urls = []
|
||||||
media_types = []
|
media_types = []
|
||||||
pending_text_injection: Optional[str] = None
|
pending_text_injection: Optional[str] = None
|
||||||
for att in message.attachments:
|
for att in all_attachments:
|
||||||
content_type = att.content_type or "unknown"
|
content_type = att.content_type or "unknown"
|
||||||
if content_type.startswith("image/"):
|
if content_type.startswith("image/"):
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue