Skip to content

Commit 910d34b

Browse files
ernadoclaude
andcommitted
feat(send): implement ForwardMessage and DeleteMessage(s)
ForwardMessage forwards by id between resolved peers (Silent/ProtectContent apply) and returns the forwarded message. DeleteMessage/DeleteMessages revoke messages for everyone via the sender's Revoke builder, which is peer-aware (handles channels). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 2ffecf8 commit 910d34b

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

forward_delete.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package botapi
2+
3+
import "context"
4+
5+
// ForwardMessage forwards a single message from one chat to another and returns
6+
// the forwarded message. Silent and ProtectContent options apply.
7+
func (b *Bot) ForwardMessage(ctx context.Context, to, from ChatID, messageID int, opts ...SendOption) (*Message, error) {
8+
var cfg sendConfig
9+
for _, o := range opts {
10+
o(&cfg)
11+
}
12+
13+
toPeer, err := b.resolveInputPeer(ctx, to)
14+
if err != nil {
15+
return nil, err
16+
}
17+
fromPeer, err := b.resolveInputPeer(ctx, from)
18+
if err != nil {
19+
return nil, err
20+
}
21+
22+
builder := &b.sender.To(toPeer).Builder
23+
builder, err = b.applySendConfig(builder, cfg)
24+
if err != nil {
25+
return nil, err
26+
}
27+
28+
resp, err := builder.ForwardIDs(fromPeer, messageID).Send(ctx)
29+
return b.sentMessage(ctx, toPeer, resp, err)
30+
}
31+
32+
// DeleteMessage deletes a message for everyone in the chat.
33+
func (b *Bot) DeleteMessage(ctx context.Context, chat ChatID, messageID int) error {
34+
return b.DeleteMessages(ctx, chat, []int{messageID})
35+
}
36+
37+
// DeleteMessages deletes several messages for everyone in the chat.
38+
func (b *Bot) DeleteMessages(ctx context.Context, chat ChatID, messageIDs []int) error {
39+
if len(messageIDs) == 0 {
40+
return nil
41+
}
42+
peer, err := b.resolveInputPeer(ctx, chat)
43+
if err != nil {
44+
return err
45+
}
46+
_, err = b.sender.To(peer).Revoke().Messages(ctx, messageIDs...)
47+
return asAPIError(err)
48+
}

0 commit comments

Comments
 (0)