1
0
Fork 0

👽 Updated code to support BotAPI v4.7

This commit is contained in:
Maxim Lebedev 2020-04-01 22:14:09 +05:00
parent d70608c147
commit 09c0fe0ba0
No known key found for this signature in database
GPG Key ID: F8978F46FF0FFA4F
4 changed files with 180 additions and 5 deletions

View File

@ -3,7 +3,7 @@ package telegram
import "github.com/Masterminds/semver"
// Version represents current version of Telegram API supported by this package
var Version = semver.MustParse("4.6.0") //nolint: gochecknoglobals
var Version = semver.MustParse("4.7.0") //nolint: gochecknoglobals
// Action represents available and supported status actions of bot
const (
@ -82,6 +82,7 @@ const (
MethodGetFile string = "getFile"
MethodGetGameHighScores string = "getGameHighScores"
MethodGetMe string = "getMe"
MethodGetMyCommands string = "getMyCommands"
MethodGetStickerSet string = "getStickerSet"
MethodGetUpdates string = "getUpdates"
MethodGetUserProfilePhotos string = "getUserProfilePhotos"
@ -95,6 +96,7 @@ const (
MethodSendAudio string = "sendAudio"
MethodSendChatAction string = "sendChatAction"
MethodSendContact string = "sendContact"
MethodSendDice string = "sendDice"
MethodSendDocument string = "sendDocument"
MethodSendGame string = "sendGame"
MethodSendInvoice string = "sendInvoice"
@ -115,8 +117,10 @@ const (
MethodSetChatStickerSet string = "setChatStickerSet"
MethodSetChatTitle string = "setChatTitle"
MethodSetGameScore string = "setGameScore"
MethodSetMyCommands string = "setMyCommands"
MethodSetPassportDataErrors string = "setPassportDataErrors"
MethodSetStickerPositionInSet string = "setStickerPositionInSet"
MethodSetStickerSetThumb string = "setStickerSetThumb"
MethodSetWebhook string = "setWebhook"
MethodStopMessageLiveLocation string = "stopMessageLiveLocation"
MethodStopPoll string = "stopPoll"

View File

@ -432,7 +432,22 @@ type (
ReplyMarkup ReplyMarkup `json:"reply_markup,omitempty"`
}
// SendChatAction represents data for SendChatAction method.
// SendDice represents data for SendDice method.
SendDice struct {
// Unique identifier for the target chat or username of the target channel (in the format @channelusername)
ChatID int64 `json:"chat_id"`
// Sends the message silently. Users will receive a notification with no sound.
DisableNotification bool `json:"disable_notification,omitempty"`
// If the message is a reply, ID of the original message
ReplyToMessageID int `json:"reply_to_message_id,omitempty"`
// Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user.
ReplyMarkup ReplyMarkup `json:"reply_markup,omitempty"`
}
// SendChatAction represents data for SendChat method.
SendChatAction struct {
// Unique identifier for the target chat
ChatID int64 `json:"chat_id"`
@ -672,6 +687,13 @@ type (
// The maximum amount of time in seconds that the result of the callback query may be cached client-side. Telegram apps will support caching starting in version 3.14. Defaults to 0.
CacheTime int `json:"cache_time,omitempty"`
}
// SetMyCommands represents data for SetMyCommands method.
SetMyCommands struct {
// A JSON-serialized list of bot commands to be set as the list of the bot's commands. At most 100
// commands can be specified.
Commands []*BotCommand `json:"commands"`
}
)
// GetMe testing your bot's auth token. Returns basic information about the bot in form of a User object.
@ -1343,6 +1365,28 @@ func (b Bot) SendPoll(p SendPoll) (*Message, error) {
return result, nil
}
// SendDice send a dice, which will have a random value from 1 to 6. On success, the sent Message is returned. (Yes,
// we're aware of the “proper” singular of die. But it's awkward, and we decided to help it change. One dice at a
// time!)
func (b Bot) SendDice(p SendDice) (*Message, error) {
src, err := b.Do(MethodSendDice, p)
if err != nil {
return nil, err
}
resp := new(Response)
if err = b.marshler.Unmarshal(src, resp); err != nil {
return nil, err
}
result := new(Message)
if err = b.marshler.Unmarshal(resp.Result, &result); err != nil {
return nil, err
}
return result, nil
}
// SendChatAction tell the user that something is happening on the bot's side. The status is set for 5 seconds or less (when a message arrives from your bot, Telegram clients clear its typing status). Returns True on success.
//
// We only recommend using this method when a response from the bot will take a noticeable amount of time to arrive.
@ -1874,3 +1918,44 @@ func (b Bot) AnswerCallbackQuery(p AnswerCallbackQuery) (bool, error) {
return result, nil
}
// SetMyCommands change the list of the bot's commands. Returns True on success.
func (b Bot) SetMyCommands(p SetMyCommands) (bool, error) {
src, err := b.Do(MethodSetMyCommands, p)
if err != nil {
return false, err
}
resp := new(Response)
if err = b.marshler.Unmarshal(src, resp); err != nil {
return false, err
}
var result bool
if err = b.marshler.Unmarshal(resp.Result, &result); err != nil {
return false, err
}
return result, nil
}
// GetMyCommands get the current list of the bot's commands. Requires no parameters. Returns Array of BotCommand on
// success.
func (b Bot) GetMyCommands() ([]*BotCommand, error) {
src, err := b.Do(MethodGetMyCommands, nil)
if err != nil {
return nil, err
}
resp := new(Response)
if err = b.marshler.Unmarshal(src, resp); err != nil {
return nil, err
}
var result []*BotCommand
if err = b.marshler.Unmarshal(resp.Result, &result); err != nil {
return nil, err
}
return result, nil
}

View File

@ -55,6 +55,9 @@ type (
// true, if the sticker set contains animated stickers
IsAnimated bool `json:"is_animated"`
// Sticker set thumbnail in the .WEBP or .TGS format
Thumb *PhotoSize `json:"thumb,omitempty"`
}
// MaskPosition describes the position on faces where a mask should be placed by default.
@ -114,8 +117,12 @@ type (
// Sticker set title, 1-64 characters
Title string `json:"title"`
// Png image with the sticker, must be up to 512 kilobytes in size, dimensions must not exceed 512px, and either width or height must be exactly 512px. Pass a file_id as a String to send a file that already exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data.
PNGSticker *InputFile `json:"png_sticker"`
// PNG image with the sticker, must be up to 512 kilobytes in size, dimensions must not exceed 512px, and either width or height must be exactly 512px. Pass a file_id as a String to send a file that already exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data.
PNGSticker *InputFile `json:"png_sticker,omitempty"`
// TGS animation with the sticker, uploaded using multipart/form-data.
// See https://core.telegram.org/animated_stickers#technical-requirements for technical requirements
TGSSticker *InputFile `json:"tgs_sticker,omitempty"`
// One or more emoji corresponding to the sticker
Emojis string `json:"emojis"`
@ -134,9 +141,13 @@ type (
// Sticker set name
Name string `json:"name"`
// Png image with the sticker, must be up to 512 kilobytes in size, dimensions must not exceed 512px, and either width or height must be exactly 512px. Pass a file_id as a String to send a file that already exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data. More info on Sending Files »
// PNG image with the sticker, must be up to 512 kilobytes in size, dimensions must not exceed 512px, and either width or height must be exactly 512px. Pass a file_id as a String to send a file that already exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data. More info on Sending Files »
PNGSticker *InputFile `json:"png_sticker"`
// TGS animation with the sticker, uploaded using multipart/form-data.
// See https://core.telegram.org/animated_stickers#technical-requirements for technical requirements
TGSSticker *InputFile `json:"tgs_sticker,omitempty"`
// One or more emoji corresponding to the sticker
Emojis string `json:"emojis"`
@ -158,6 +169,24 @@ type (
// File identifier of the sticker
Sticker string `json:"sticker"`
}
// SetStickerSetThumb represents data for SetStickerSetThumb method.
SetStickerSetThumb struct {
// Sticker set name
Name string `json:"name"`
// User identifier of the sticker set owner
UserID int `json:"user_id"`
// A PNG image with the thumbnail, must be up to 128 kilobytes in size and have width and height
// exactly 100px, or a TGS animation with the thumbnail up to 32 kilobytes in size;
// see https://core.telegram.org/animated_stickers#technical-requirements for animated sticker
// technical requirements. Pass a file_id as a String to send a file that already exists on the
// Telegram servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, or
// upload a new one using multipart/form-data. More info on Sending Files ». Animated sticker set
// thumbnail can't be uploaded via HTTP URL.
Thumb *InputFile `json:"thumb,omitempty"`
}
)
func NewSticker(chatID int64, sticker *InputFile) SendSticker {
@ -368,6 +397,41 @@ func (b *Bot) DeleteStickerFromSet(sticker string) (bool, error) {
return result, nil
}
// SetStickerSetThumb set the thumbnail of a sticker set. Animated thumbnails can be set for animated sticker sets
// only. Returns True on success.
func (b *Bot) SetStickerSetThumb(p SetStickerSetThumb) (bool, error) {
params := make(map[string]string)
params["name"] = p.Name
params["user_id"] = strconv.Itoa(p.UserID)
var err error
if params["thumb"], err = b.marshler.MarshalToString(p.Thumb); err != nil {
return false, err
}
files := make([]*InputFile, 0)
if p.Thumb.IsAttachment() {
files = append(files, p.Thumb)
}
src, err := b.Upload(MethodSetStickerSetThumb, params, files...)
if err != nil {
return false, err
}
resp := new(Response)
if err = b.marshler.Unmarshal(src, resp); err != nil {
return false, err
}
var result bool
if err = b.marshler.Unmarshal(resp.Result, &result); err != nil {
return false, err
}
return result, nil
}
// InSet checks that the current sticker in the stickers set.
func (s Sticker) InSet() bool { return s.SetName != "" }

View File

@ -191,6 +191,9 @@ type (
// Message is a native poll, information about the poll
Poll *Poll `json:"poll,omitempty"`
// Message is a dice with random value from 1 to 6
Dice *Dice `json:"dice,omitempty"`
// New members that were added to the group or supergroup and information about them (the bot itself may be one of these members)
NewChatMembers []*User `json:"new_chat_members,omitempty"`
@ -520,6 +523,13 @@ type (
CorrectOptionID int `json:"correct_option_id,omitempty"`
}
// Dice represents a dice with random value from 1 to 6. (Yes, we're aware of the “proper” singular of die.
// But it's awkward, and we decided to help it change. One dice at a time!)
Dice struct {
// Value of the dice, 1-6
Value int `json:"value"`
}
// UserProfilePhotos represent a user's profile pictures.
UserProfilePhotos struct {
// Total number of profile pictures the target user has
@ -772,6 +782,16 @@ type (
CanPinMessages bool `json:"can_pin_messages,omitempty"`
}
// BotCommand represents a bot command.
BotCommand struct {
// Text of the command, 1-32 characters. Can contain only lowercase English letters, digits and
// underscores.
Command string `json:"command"`
// Description of the command, 3-256 characters.
Description string `json:"description"`
}
// ResponseParameters contains information about why a request was unsuccessful.
ResponseParameters struct {
// The group has been migrated to a supergroup with the specified identifier.
@ -1192,6 +1212,8 @@ func (m Message) IsEvent() bool {
m.IsSupergroupChatCreatedEvent() || m.IsNewChatPhotoEvent()
}
func (m Message) IsDice() bool { return m.Dice != nil }
// IsBold checks that the current entity is a bold tag.
func (e MessageEntity) IsBold() bool { return strings.EqualFold(e.Type, EntityBold) }