Skip to content

Commit 33df89c

Browse files
ernadoclaude
andcommitted
feat(send): implement CopyMessage
CopyMessage re-sends a message's content as a new, unlinked message via a forward with the author dropped (the MTProto equivalent of Bot API copyMessage). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 8eccc1a commit 33df89c

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

copy.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package botapi
2+
3+
import "context"
4+
5+
// CopyMessage copies a message: it re-sends the message's content to another
6+
// chat as a new message, without the "forwarded from" header. Unlike
7+
// ForwardMessage, the result is not linked to the original.
8+
func (b *Bot) CopyMessage(ctx context.Context, to, from ChatID, messageID int, opts ...SendOption) (*Message, error) {
9+
var cfg sendConfig
10+
for _, o := range opts {
11+
o(&cfg)
12+
}
13+
14+
toPeer, err := b.resolveInputPeer(ctx, to)
15+
if err != nil {
16+
return nil, err
17+
}
18+
fromPeer, err := b.resolveInputPeer(ctx, from)
19+
if err != nil {
20+
return nil, err
21+
}
22+
23+
builder := &b.sender.To(toPeer).Builder
24+
builder, err = b.applySendConfig(builder, cfg)
25+
if err != nil {
26+
return nil, err
27+
}
28+
29+
resp, err := builder.ForwardIDs(fromPeer, messageID).DropAuthor().Send(ctx)
30+
return b.sentMessage(ctx, toPeer, resp, err)
31+
}

0 commit comments

Comments
 (0)