gotd: update to layer 224
This commit is contained in:
+58
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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{}
|
||||
|
||||
Reference in New Issue
Block a user