Skip to content

Commit 026f73b

Browse files
ernadoclaude
andcommitted
feat(send): implement message edits
EditMessageText and EditMessageCaption edit via the sender's Edit builder (parse mode, web-preview and markup options apply). EditMessageReplyMarkup goes straight to messages.editMessage with only the markup set, so text and media are left untouched; a nil markup removes the keyboard. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 910d34b commit 026f73b

1 file changed

Lines changed: 72 additions & 0 deletions

File tree

edit.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package botapi
2+
3+
import (
4+
"context"
5+
6+
"github.com/gotd/td/tg"
7+
)
8+
9+
// editText is the shared path for editing a message's text or caption.
10+
func (b *Bot) editText(ctx context.Context, chat ChatID, messageID int, text string, opts ...SendOption) (*Message, error) {
11+
var cfg sendConfig
12+
for _, o := range opts {
13+
o(&cfg)
14+
}
15+
16+
peer, err := b.resolveInputPeer(ctx, chat)
17+
if err != nil {
18+
return nil, err
19+
}
20+
21+
styled, err := styledText(text, cfg.parseMode, b.peers.UserResolveHook(ctx))
22+
if err != nil {
23+
return nil, err
24+
}
25+
26+
builder := &b.sender.To(peer).Builder
27+
if cfg.disableWebPreview {
28+
builder = builder.NoWebpage()
29+
}
30+
if cfg.markup != nil {
31+
mkp, err := replyMarkupToTg(cfg.markup)
32+
if err != nil {
33+
return nil, err
34+
}
35+
builder = builder.Markup(mkp)
36+
}
37+
38+
resp, err := builder.Edit(messageID).StyledText(ctx, styled...)
39+
return b.sentMessage(ctx, peer, resp, err)
40+
}
41+
42+
// EditMessageText edits the text of a message and returns the edited message.
43+
func (b *Bot) EditMessageText(ctx context.Context, chat ChatID, messageID int, text string, opts ...SendOption) (*Message, error) {
44+
return b.editText(ctx, chat, messageID, text, opts...)
45+
}
46+
47+
// EditMessageCaption edits the caption of a media message and returns the
48+
// edited message.
49+
func (b *Bot) EditMessageCaption(ctx context.Context, chat ChatID, messageID int, caption string, opts ...SendOption) (*Message, error) {
50+
return b.editText(ctx, chat, messageID, caption, opts...)
51+
}
52+
53+
// EditMessageReplyMarkup edits only the reply markup of a message, leaving its
54+
// text and media unchanged. A nil markup removes the keyboard.
55+
func (b *Bot) EditMessageReplyMarkup(ctx context.Context, chat ChatID, messageID int, markup ReplyMarkup) (*Message, error) {
56+
peer, err := b.resolveInputPeer(ctx, chat)
57+
if err != nil {
58+
return nil, err
59+
}
60+
61+
req := &tg.MessagesEditMessageRequest{Peer: peer, ID: messageID}
62+
if markup != nil {
63+
mkp, err := replyMarkupToTg(markup)
64+
if err != nil {
65+
return nil, err
66+
}
67+
req.SetReplyMarkup(mkp)
68+
}
69+
70+
resp, err := b.raw.MessagesEditMessage(ctx, req)
71+
return b.sentMessage(ctx, peer, resp, err)
72+
}

0 commit comments

Comments
 (0)