Bot API 4.6: Polls 2.0, misc. changes
TJ Horner me@tjhorner.com
Fri, 24 Jan 2020 22:42:19 -0500
4 files changed,
59 insertions(+),
22 deletions(-)
M
configs.go
→
configs.go
@@ -3,6 +3,7 @@
import ( "io" "net/url" + "strconv" ) // Telegram constants@@ -503,8 +504,13 @@
// SendPollConfig allows you to send a poll. type SendPollConfig struct { BaseChat - Question string - Options []string + Question string + Options []string + IsAnonymous bool + Type string + AllowsMultipleAnswers bool + CorrectOptionID int64 + IsClosed bool } func (config SendPollConfig) params() (Params, error) {@@ -515,6 +521,11 @@ }
params["question"] = config.Question err = params.AddInterface("options", config.Options) + params["is_anonymous"] = strconv.FormatBool(config.IsAnonymous) + params.AddNonEmpty("type", config.Type) + params["allows_multiple_answers"] = strconv.FormatBool(config.AllowsMultipleAnswers) + params["correct_option_id"] = strconv.FormatInt(config.CorrectOptionID, 10) + params["is_closed"] = strconv.FormatBool(config.IsClosed) return params, err }
M
helpers.go
→
helpers.go
@@ -821,8 +821,9 @@ return SendPollConfig{
BaseChat: BaseChat{ ChatID: chatID, }, - Question: question, - Options: options, + Question: question, + Options: options, + IsAnonymous: true, // This is Telegram's default. } }
M
types.go
→
types.go
@@ -38,6 +38,7 @@ CallbackQuery *CallbackQuery `json:"callback_query"`
ShippingQuery *ShippingQuery `json:"shipping_query"` PreCheckoutQuery *PreCheckoutQuery `json:"pre_checkout_query"` Poll *Poll `json:"poll"` + PollAnswer *PollAnswer `json:"poll_answer"` } // UpdatesChannel is the channel for getting updates.@@ -52,12 +53,15 @@ }
// User is a user on Telegram. type User struct { - ID int `json:"id"` - FirstName string `json:"first_name"` - LastName string `json:"last_name"` // optional - UserName string `json:"username"` // optional - LanguageCode string `json:"language_code"` // optional - IsBot bool `json:"is_bot"` // optional + ID int `json:"id"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` // optional + UserName string `json:"username"` // optional + LanguageCode string `json:"language_code"` // optional + IsBot bool `json:"is_bot"` // optional + CanJoinGroups bool `json:"can_join_groups"` // optional + CanReadAllGroupMessages bool `json:"can_read_all_group_messages"` // optional + SupportsInlineQueries bool `json:"supports_inline_queries"` // optional } // String displays a simple text version of a user.@@ -271,11 +275,12 @@ }
// MessageEntity contains information about data in a Message. type MessageEntity struct { - Type string `json:"type"` - Offset int `json:"offset"` - Length int `json:"length"` - URL string `json:"url"` // optional - User *User `json:"user"` // optional + Type string `json:"type"` + Offset int `json:"offset"` + Length int `json:"length"` + URL string `json:"url"` // optional + User *User `json:"user"` // optional + Language string `json:"language"` // optional } // ParseURL attempts to parse a URL contained within a MessageEntity.@@ -420,12 +425,23 @@ Text string `json:"text"`
VoterCount int `json:"voter_count"` } +// PollAnswer represents an answer of a user in a non-anonymous poll. +type PollAnswer struct { + PollID string `json:"poll_id"` + User User `json:"user"` + OptionIDs []int `json:"option_ids"` +} + // Poll contains information about a poll. type Poll struct { - ID string `json:"id"` - Question string `json:"question"` - Options []PollOption `json:"options"` - IsClosed bool `json:"is_closed"` + ID string `json:"id"` + Question string `json:"question"` + Options []PollOption `json:"options"` + IsClosed bool `json:"is_closed"` + IsAnonymous bool `json:"is_anonymous"` + Type string `json:"type"` + AllowsMultipleAnswers bool `json:"allows_multiple_answers"` + CorrectOptionID int `json:"correct_option_id"` // optional } // UserProfilePhotos contains a set of user profile photos.@@ -459,9 +475,16 @@ }
// KeyboardButton is a button within a custom keyboard. type KeyboardButton struct { - Text string `json:"text"` - RequestContact bool `json:"request_contact"` - RequestLocation bool `json:"request_location"` + Text string `json:"text"` + RequestContact bool `json:"request_contact"` + RequestLocation bool `json:"request_location"` + RequestPoll KeyboardButtonPollType `json:"request_poll"` +} + +// KeyboardButtonPollType represents type of a poll, which is allowed to +// be created and sent when the corresponding button is pressed. +type KeyboardButtonPollType struct { + Type string `json:"type"` } // ReplyKeyboardHide allows the Bot to hide a custom keyboard.