gotd: update to layer 224

This commit is contained in:
Tulir Asokan
2026-04-01 21:08:49 +03:00
parent 7630340ffc
commit 770b3b8d8c
77 changed files with 10606 additions and 703 deletions
+58
View File
@@ -422,3 +422,61 @@ func FormattedDate(relative bool, shortTime bool, longTime bool, shortDate bool,
func (b *Builder) FormattedDate(s string, relative bool, shortTime bool, longTime bool, shortDate bool, longDate bool, dayOfWeek bool, date int) *Builder {
return b.Format(s, FormattedDate(relative, shortTime, longTime, shortDate, longDate, dayOfWeek, date))
}
// DiffInsert creates Formatter of DiffInsert message entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffInsert.
func DiffInsert() Formatter {
return func(offset, length int) tg.MessageEntityClass {
return &tg.MessageEntityDiffInsert{
Offset: offset,
Length: length,
}
}
}
// DiffInsert adds and formats message as DiffInsert message entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffInsert.
func (b *Builder) DiffInsert(s string) *Builder {
return b.Format(s, DiffInsert())
}
// DiffReplace creates Formatter of DiffReplace message entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffReplace.
func DiffReplace(oldText string) Formatter {
return func(offset, length int) tg.MessageEntityClass {
return &tg.MessageEntityDiffReplace{
Offset: offset,
Length: length,
OldText: oldText,
}
}
}
// DiffReplace adds and formats message as DiffReplace message entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffReplace.
func (b *Builder) DiffReplace(s string, oldText string) *Builder {
return b.Format(s, DiffReplace(oldText))
}
// DiffDelete creates Formatter of DiffDelete message entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffDelete.
func DiffDelete() Formatter {
return func(offset, length int) tg.MessageEntityClass {
return &tg.MessageEntityDiffDelete{
Offset: offset,
Length: length,
}
}
}
// DiffDelete adds and formats message as DiffDelete message entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffDelete.
func (b *Builder) DiffDelete(s string) *Builder {
return b.Format(s, DiffDelete())
}
+4 -4
View File
@@ -21,7 +21,7 @@ type pollAnswerBuilder struct {
type PollAnswerOption func(p *pollAnswerBuilder)
// RawPollAnswer creates new raw poll answer option.
func RawPollAnswer(poll tg.PollAnswer) PollAnswerOption {
func RawPollAnswer(poll *tg.PollAnswer) PollAnswerOption {
return func(p *pollAnswerBuilder) {
p.input.Poll.Answers = append(p.input.Poll.Answers, poll)
}
@@ -31,7 +31,7 @@ func RawPollAnswer(poll tg.PollAnswer) PollAnswerOption {
func PollAnswer(text string, entities ...tg.MessageEntityClass) PollAnswerOption {
return func(p *pollAnswerBuilder) {
i := len(p.input.Poll.Answers)
p.input.Poll.Answers = append(p.input.Poll.Answers, tg.PollAnswer{
p.input.Poll.Answers = append(p.input.Poll.Answers, &tg.PollAnswer{
Text: tg.TextWithEntities{Text: text, Entities: entities},
Option: []byte(strconv.Itoa(i)),
})
@@ -44,11 +44,11 @@ func CorrectPollAnswer(text string, entities ...tg.MessageEntityClass) PollAnswe
p.input.Poll.Quiz = true
i := len(p.input.Poll.Answers)
option := []byte(strconv.Itoa(i))
p.input.Poll.Answers = append(p.input.Poll.Answers, tg.PollAnswer{
p.input.Poll.Answers = append(p.input.Poll.Answers, &tg.PollAnswer{
Text: tg.TextWithEntities{Text: text, Entities: entities},
Option: option,
})
p.input.CorrectAnswers = append(p.input.CorrectAnswers, option)
p.input.CorrectAnswers = append(p.input.CorrectAnswers, i)
}
}
+1 -1
View File
@@ -26,7 +26,7 @@ func TestPoll(t *testing.T) {
id = m.Poll.ID
require.Len(t, m.Poll.Answers, 3)
require.Len(t, m.CorrectAnswers, 1)
require.Equal(t, m.Poll.Answers[0].Option, m.CorrectAnswers[0])
require.Equal(t, 0, m.CorrectAnswers[0])
}).ThenResult(&tg.Updates{})
mock.ExpectFunc(func(b bin.Encoder) {
req, ok := b.(*tg.MessagesSendMediaRequest)
+30
View File
@@ -221,3 +221,33 @@ func FormattedDate(s string, relative bool, shortTime bool, longTime bool, short
return nil
})
}
// DiffInsert formats text as DiffInsert entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffInsert.
func DiffInsert(s string) StyledTextOption {
return styledTextOption(s, func(b *textBuilder) error {
b.DiffInsert(s)
return nil
})
}
// DiffReplace formats text as DiffReplace entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffReplace.
func DiffReplace(s string, oldText string) StyledTextOption {
return styledTextOption(s, func(b *textBuilder) error {
b.DiffReplace(s, oldText)
return nil
})
}
// DiffDelete formats text as DiffDelete entity.
//
// See https://core.telegram.org/constructor/messageEntityDiffDelete.
func DiffDelete(s string) StyledTextOption {
return styledTextOption(s, func(b *textBuilder) error {
b.DiffDelete(s)
return nil
})
}
+124
View File
@@ -692,6 +692,112 @@ func (b *GetUnreadMentionsQueryBuilder) Collect(ctx context.Context) ([]Elem, er
return r, iter.Err()
}
// GetUnreadPollVotesQueryBuilder is query builder of MessagesGetUnreadPollVotes.
type GetUnreadPollVotesQueryBuilder struct {
raw *tg.Client
req tg.MessagesGetUnreadPollVotesRequest
batchSize int
addOffset int
offsetID int
}
// GetUnreadPollVotes creates query builder of MessagesGetUnreadPollVotes.
func (q *QueryBuilder) GetUnreadPollVotes(paramPeer tg.InputPeerClass) *GetUnreadPollVotesQueryBuilder {
b := &GetUnreadPollVotesQueryBuilder{
raw: q.raw,
batchSize: 1,
req: tg.MessagesGetUnreadPollVotesRequest{
Peer: &tg.InputPeerEmpty{},
},
}
b.req.Peer = paramPeer
return b
}
// BatchSize sets buffer of message loaded from one request.
// Be carefully, when set this limit, because Telegram does not return error if limit is too big,
// so results can be incorrect.
func (b *GetUnreadPollVotesQueryBuilder) BatchSize(batchSize int) *GetUnreadPollVotesQueryBuilder {
b.batchSize = batchSize
return b
}
// OffsetID sets offsetID from which iterate start.
func (b *GetUnreadPollVotesQueryBuilder) OffsetID(offsetID int) *GetUnreadPollVotesQueryBuilder {
b.offsetID = offsetID
return b
}
// Peer sets Peer field of GetUnreadPollVotes query.
func (b *GetUnreadPollVotesQueryBuilder) Peer(paramPeer tg.InputPeerClass) *GetUnreadPollVotesQueryBuilder {
b.req.Peer = paramPeer
return b
}
// TopMsgID sets TopMsgID field of GetUnreadPollVotes query.
func (b *GetUnreadPollVotesQueryBuilder) TopMsgID(paramTopMsgID int) *GetUnreadPollVotesQueryBuilder {
b.req.TopMsgID = paramTopMsgID
return b
}
// Query implements Query interface.
func (b *GetUnreadPollVotesQueryBuilder) Query(ctx context.Context, req Request) (tg.MessagesMessagesClass, error) {
r := &tg.MessagesGetUnreadPollVotesRequest{
Limit: req.Limit,
}
r.Peer = b.req.Peer
r.TopMsgID = b.req.TopMsgID
r.AddOffset = req.AddOffset
r.OffsetID = req.OffsetID
return b.raw.MessagesGetUnreadPollVotes(ctx, r)
}
// Iter returns iterator using built query.
func (b *GetUnreadPollVotesQueryBuilder) Iter() *Iterator {
iter := NewIterator(b, b.batchSize)
iter = iter.OffsetID(b.offsetID)
return iter
}
// ForEach calls given callback on each iterator element.
func (b *GetUnreadPollVotesQueryBuilder) ForEach(ctx context.Context, cb func(context.Context, Elem) error) error {
iter := b.Iter()
for iter.Next(ctx) {
if err := cb(ctx, iter.Value()); err != nil {
return err
}
}
return iter.Err()
}
// Count fetches remote state to get number of elements.
func (b *GetUnreadPollVotesQueryBuilder) Count(ctx context.Context) (int, error) {
iter := b.Iter()
c, err := iter.Total(ctx)
if err != nil {
return 0, errors.Wrap(err, "get total")
}
return c, nil
}
// Collect creates iterator and collects all elements to slice.
func (b *GetUnreadPollVotesQueryBuilder) Collect(ctx context.Context) ([]Elem, error) {
iter := b.Iter()
c, err := iter.Total(ctx)
if err != nil {
return nil, errors.Wrap(err, "get total")
}
r := make([]Elem, 0, c)
for iter.Next(ctx) {
r = append(r, iter.Value())
}
return r, iter.Err()
}
// GetUnreadReactionsQueryBuilder is query builder of MessagesGetUnreadReactions.
type GetUnreadReactionsQueryBuilder struct {
raw *tg.Client
@@ -968,6 +1074,12 @@ func (b *SearchQueryBuilder) Pinned() *SearchQueryBuilder {
return b
}
// Poll sets Filter field of Search query.
func (b *SearchQueryBuilder) Poll() *SearchQueryBuilder {
b.req.Filter = &tg.InputMessagesFilterPoll{}
return b
}
// RoundVideo sets Filter field of Search query.
func (b *SearchQueryBuilder) RoundVideo() *SearchQueryBuilder {
b.req.Filter = &tg.InputMessagesFilterRoundVideo{}
@@ -1215,6 +1327,12 @@ func (b *SearchGlobalQueryBuilder) Pinned() *SearchGlobalQueryBuilder {
return b
}
// Poll sets Filter field of SearchGlobal query.
func (b *SearchGlobalQueryBuilder) Poll() *SearchGlobalQueryBuilder {
b.req.Filter = &tg.InputMessagesFilterPoll{}
return b
}
// RoundVideo sets Filter field of SearchGlobal query.
func (b *SearchGlobalQueryBuilder) RoundVideo() *SearchGlobalQueryBuilder {
b.req.Filter = &tg.InputMessagesFilterRoundVideo{}
@@ -1417,6 +1535,12 @@ func (b *SearchSentMediaQueryBuilder) Pinned() *SearchSentMediaQueryBuilder {
return b
}
// Poll sets Filter field of SearchSentMedia query.
func (b *SearchSentMediaQueryBuilder) Poll() *SearchSentMediaQueryBuilder {
b.req.Filter = &tg.InputMessagesFilterPoll{}
return b
}
// RoundVideo sets Filter field of SearchSentMedia query.
func (b *SearchSentMediaQueryBuilder) RoundVideo() *SearchSentMediaQueryBuilder {
b.req.Filter = &tg.InputMessagesFilterRoundVideo{}