You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
core.telegram.org/bots/api#forwardmessage: "Use this method to forward messages of any kind... Returns the sent Message". forwardMessages: "forward multiple messages of any kind... Returns an Array of MessageId". copyMessage: "The method is analogous to forwardMessage, but the copied message doesn't have a link to the original message". copyMessages: "copy messages of any kind... Array of MessageId".
What Hermes does today
Repo evidence at current main (3fa318a50c, plugins/platforms/telegram/adapter.py):
grep 'forward_message|forwardMessage|copy_message|copyMessage' in adapter.py and tools/send_message_tool.py → 0 matches (verified at main).
adapter.py:4432-4758 — send() is the only outbound text path; no forwarding/copying entry point anywhere (also checked hermes_cli/telegram_managed_bot.py).
adapter.py:5217-5241 — the only deletion-adjacent surface is delete_message; no forward/copy counterpart.
The bot cannot forward or copy an existing message (single or batch) to another chat/topic. Batch params (message_ids 1-100 strictly increasing, video_start_timestamp, show_caption_above_media on copy) are likewise absent.
Why it matters
Relay/mirror workflows (channel mirrors, message routing between groups) must re-send content from scratch instead of using the documented forward/copy API; forwarded messages lose their origin link and quote semantics. The gateway's mirror/relay features re-send content rather than using Bot API forward/copy.
Suggested fix class
Adapter: add forward_message(chat_id, from_chat_id, message_id, ...) and copy_message(...) methods (+ batch variants) to the outbound surface, plus a tools/ entry point or mirror-mode integration.
What the API specifies
core.telegram.org/bots/api#forwardmessage: "Use this method to forward messages of any kind... Returns the sent Message". forwardMessages: "forward multiple messages of any kind... Returns an Array of MessageId". copyMessage: "The method is analogous to forwardMessage, but the copied message doesn't have a link to the original message". copyMessages: "copy messages of any kind... Array of MessageId".
What Hermes does today
Repo evidence at current main (
3fa318a50c,plugins/platforms/telegram/adapter.py):grep 'forward_message|forwardMessage|copy_message|copyMessage'inadapter.pyandtools/send_message_tool.py→ 0 matches (verified at main).adapter.py:4432-4758—send()is the only outbound text path; no forwarding/copying entry point anywhere (also checkedhermes_cli/telegram_managed_bot.py).adapter.py:5217-5241— the only deletion-adjacent surface isdelete_message; no forward/copy counterpart.Inbound direction only:
adapter.py:9633-9800_build_message_eventconsumesforward_origin/reply_to_message(extraction PR fix(telegram): extract forwarded message text from caption and forward_origin.api_kwargs #72035 open); nothing ever issues an outbound forward/copy.Delta
The bot cannot forward or copy an existing message (single or batch) to another chat/topic. Batch params (
message_ids1-100 strictly increasing,video_start_timestamp,show_caption_above_mediaon copy) are likewise absent.Why it matters
Relay/mirror workflows (channel mirrors, message routing between groups) must re-send content from scratch instead of using the documented forward/copy API; forwarded messages lose their origin link and quote semantics. The gateway's mirror/relay features re-send content rather than using Bot API forward/copy.
Suggested fix class
Adapter: add
forward_message(chat_id, from_chat_id, message_id, ...)andcopy_message(...)methods (+ batch variants) to the outbound surface, plus atools/entry point or mirror-mode integration.Interlocks
#43397 (open — preserve forwarded-message metadata inbound; related, not covering), #76615 (open — forwarded channel media dropped inbound; related), #72035 (open PR — inbound forward text extraction; related). None covers outbound forward/copy.
Verification
Call the new adapter method with a real
from_chat_id+message_id; assertforwardMessageinvoked andMessagereturned.Batch path: assert
forwardMessagespayload with strictly increasingmessage_ids.Test copy with
show_caption_above_media=True.Interlock (master meta-lock, 5x2x3 validated)
Related #28614 #43397 #43477 #51543 #51747 #52126 #54262 #72035 #76615 #79066 #79067 #79068 #79069 #79070
Related #28614 #43397 #43477 #51543 #51747 #52126 #54262 #72035 #76615 #79066 #79067 #79068 #79069 #79070 #79392 #79393 #79394 #79395 #79396