You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.1 KiB
81 lines
2.1 KiB
package message |
|
|
|
import ( |
|
"context" |
|
|
|
"github.com/go-faster/errors" |
|
|
|
"github.com/gotd/td/telegram/message/peer" |
|
"github.com/gotd/td/tg" |
|
) |
|
|
|
// DeleteBuilder is an intermediate builder to delete messages. |
|
// Unlike RevokeBuilder will keep messages for other users. |
|
type DeleteBuilder struct { |
|
sender *Sender |
|
} |
|
|
|
// Delete creates new DeleteBuilder. |
|
func (s *Sender) Delete() *DeleteBuilder { |
|
return &DeleteBuilder{sender: s} |
|
} |
|
|
|
// Messages deletes messages by given IDs, but keeps it for other users. |
|
// |
|
// NB: Telegram counts message IDs globally for private chats (but not for channels). This method does not check that |
|
// all given message IDs from one chat. |
|
func (b *DeleteBuilder) Messages(ctx context.Context, ids ...int) (*tg.MessagesAffectedMessages, error) { |
|
r, err := b.sender.deleteMessages(ctx, &tg.MessagesDeleteMessagesRequest{ |
|
ID: ids, |
|
}) |
|
if err != nil { |
|
return nil, errors.Wrap(err, "delete messages") |
|
} |
|
|
|
return r, nil |
|
} |
|
|
|
// RevokeBuilder is an intermediate builder to delete messages. |
|
// Unlike DeleteBuilder will not keep messages for other users. |
|
type RevokeBuilder struct { |
|
builder *RequestBuilder |
|
} |
|
|
|
// Revoke creates new RevokeBuilder. |
|
func (b *RequestBuilder) Revoke() *RevokeBuilder { |
|
return &RevokeBuilder{builder: b} |
|
} |
|
|
|
// Messages deletes messages by given IDs. |
|
// |
|
// NB: Telegram counts message IDs globally for private chats (but not for channels). This method does not check that |
|
// all given message IDs from one chat. |
|
func (b *RevokeBuilder) Messages(ctx context.Context, ids ...int) (*tg.MessagesAffectedMessages, error) { |
|
p, err := b.builder.peer(ctx) |
|
if err != nil { |
|
return nil, errors.Wrap(err, "peer") |
|
} |
|
|
|
ch, isChannel := peer.ToInputChannel(p) |
|
if isChannel { |
|
r, err := b.builder.sender.deleteChannelMessages(ctx, &tg.ChannelsDeleteMessagesRequest{ |
|
Channel: ch, |
|
ID: ids, |
|
}) |
|
if err != nil { |
|
return nil, errors.Wrap(err, "delete channel messages") |
|
} |
|
|
|
return r, nil |
|
} |
|
|
|
r, err := b.builder.sender.deleteMessages(ctx, &tg.MessagesDeleteMessagesRequest{ |
|
Revoke: true, |
|
ID: ids, |
|
}) |
|
if err != nil { |
|
return nil, errors.Wrap(err, "delete messages") |
|
} |
|
|
|
return r, nil |
|
}
|
|
|