diff --git a/bot.go b/bot.go index 3511062..235db6a 100644 --- a/bot.go +++ b/bot.go @@ -1338,141 +1338,6 @@ func (b *Bot) FileURLByID(fileID string) (string, error) { return b.URL + "/file/bot" + b.Token + "/" + f.FilePath, nil } -// UploadStickerFile uploads a .PNG file with a sticker for later use. -func (b *Bot) UploadStickerFile(to Recipient, png *File) (*File, error) { - files := map[string]File{ - "png_sticker": *png, - } - params := map[string]string{ - "user_id": to.Recipient(), - } - - data, err := b.sendFiles("uploadStickerFile", files, params) - if err != nil { - return nil, err - } - - var resp struct { - Result File - } - if err := json.Unmarshal(data, &resp); err != nil { - return nil, wrapError(err) - } - return &resp.Result, nil -} - -// GetStickerSet returns a StickerSet on success. -func (b *Bot) GetStickerSet(name string) (*StickerSet, error) { - data, err := b.Raw("getStickerSet", map[string]string{"name": name}) - if err != nil { - return nil, err - } - - var resp struct { - Result *StickerSet - } - if err := json.Unmarshal(data, &resp); err != nil { - return nil, wrapError(err) - } - return resp.Result, nil -} - -// CreateNewStickerSet creates a new sticker set. -func (b *Bot) CreateNewStickerSet(to Recipient, s StickerSet) error { - files := make(map[string]File) - if s.PNG != nil { - files["png_sticker"] = *s.PNG - } - if s.TGS != nil { - files["tgs_sticker"] = *s.TGS - } - - params := map[string]string{ - "user_id": to.Recipient(), - "name": s.Name, - "title": s.Title, - "emojis": s.Emojis, - "contains_masks": strconv.FormatBool(s.ContainsMasks), - } - - if s.MaskPosition != nil { - data, err := json.Marshal(&s.MaskPosition) - if err != nil { - return err - } - params["mask_position"] = string(data) - } - - _, err := b.sendFiles("createNewStickerSet", files, params) - return err -} - -// AddStickerToSet adds new sticker to existing sticker set. -func (b *Bot) AddStickerToSet(to Recipient, s Sticker) error { - files := make(map[string]File) - if s.PNG != nil { - files["png_sticker"] = *s.PNG - } - if s.TGS != nil { - files["tgs_sticker"] = *s.TGS - } - - params := map[string]string{ - "user_id": to.Recipient(), - "name": s.Name, - "emojis": s.Emojis, - } - - if s.MaskPosition != nil { - data, err := json.Marshal(&s.MaskPosition) - if err != nil { - return err - } - params["mask_position"] = string(data) - } - - _, err := b.sendFiles("addStickerToSet", files, params) - return err -} - -// SetStickerPositionInSet moves a sticker in set to a specific position. -func (b *Bot) SetStickerPositionInSet(sticker string, position int) error { - params := map[string]string{ - "sticker": sticker, - "position": strconv.Itoa(position), - } - - _, err := b.Raw("setStickerPositionInSet", params) - return err -} - -// DeleteStickerFromSet deletes sticker from set created by the bot. -func (b *Bot) DeleteStickerFromSet(sticker string) error { - _, err := b.Raw("deleteStickerFromSet", map[string]string{"sticker": sticker}) - return err - -} - -// SetStickerSetThumb sets the thumbnail of a sticker set. Animated thumbnails can be set for animated sticker sets only. -// -// Thumbnail must be a PNG image, up to 128 kilobytes in size and have width and height exactly 100px, -// or a TGS animation up to 32 kilobytes in size. Animated sticker set thumbnail can't be uploaded via HTTP URL. -func (b *Bot) SetStickerSetThumb(to Recipient, s Sticker) error { - files := map[string]File{} - if s.PNG != nil { - files["thumb"] = *s.PNG - } else if s.TGS != nil { - files["thumb"] = *s.TGS - } - params := map[string]string{ - "name": s.Name, - "user_id": to.Recipient(), - } - - _, err := b.sendFiles("setStickerSetThumb", files, params) - return err -} - // GetCommands returns the current list of the bot's commands. func (b *Bot) GetCommands() ([]Command, error) { data, err := b.Raw("getMyCommands", nil) diff --git a/stickers.go b/stickers.go index 03aa544..d6c8cdc 100644 --- a/stickers.go +++ b/stickers.go @@ -1,5 +1,10 @@ package telebot +import ( + "encoding/json" + "strconv" +) + // Sticker object represents a WebP image, so-called sticker. type Sticker struct { File @@ -16,7 +21,7 @@ type Sticker struct { MaskPosition *MaskPosition `json:"mask_position"` } -// StickerSet represents a sticker set +// StickerSet represents a sticker set. type StickerSet struct { Name string `json:"name"` Title string `json:"title"` @@ -47,3 +52,143 @@ type StickerSetParams struct { PngSticker *File Emojis string } + +// UploadStickerFile uploads a .PNG file with a sticker for later use. +func (b *Bot) UploadStickerFile(to Recipient, png *File) (*File, error) { + files := map[string]File{ + "png_sticker": *png, + } + params := map[string]string{ + "user_id": to.Recipient(), + } + + data, err := b.sendFiles("uploadStickerFile", files, params) + if err != nil { + return nil, err + } + + var resp struct { + Result File + } + if err := json.Unmarshal(data, &resp); err != nil { + return nil, wrapError(err) + } + return &resp.Result, nil +} + +// GetStickerSet returns a StickerSet on success. +func (b *Bot) GetStickerSet(name string) (*StickerSet, error) { + data, err := b.Raw("getStickerSet", map[string]string{"name": name}) + if err != nil { + return nil, err + } + + var resp struct { + Result *StickerSet + } + if err := json.Unmarshal(data, &resp); err != nil { + return nil, wrapError(err) + } + return resp.Result, nil +} + +// CreateNewStickerSet creates a new sticker set. +func (b *Bot) CreateNewStickerSet(to Recipient, s StickerSet) error { + files := make(map[string]File) + if s.PNG != nil { + files["png_sticker"] = *s.PNG + } + if s.TGS != nil { + files["tgs_sticker"] = *s.TGS + } + + params := map[string]string{ + "user_id": to.Recipient(), + "name": s.Name, + "title": s.Title, + "emojis": s.Emojis, + "contains_masks": strconv.FormatBool(s.ContainsMasks), + } + + if s.MaskPosition != nil { + data, err := json.Marshal(&s.MaskPosition) + if err != nil { + return err + } + params["mask_position"] = string(data) + } + + _, err := b.sendFiles("createNewStickerSet", files, params) + return err +} + +// AddStickerToSet adds new sticker to existing sticker set. +func (b *Bot) AddStickerToSet(to Recipient, s Sticker) error { + files := make(map[string]File) + if s.PNG != nil { + files["png_sticker"] = *s.PNG + } else if s.TGS != nil { + files["tgs_sticker"] = *s.TGS + } + + params := map[string]string{ + "user_id": to.Recipient(), + "name": s.Name, + "emojis": s.Emojis, + } + + if s.MaskPosition != nil { + data, err := json.Marshal(&s.MaskPosition) + if err != nil { + return err + } + params["mask_position"] = string(data) + } + + _, err := b.sendFiles("addStickerToSet", files, params) + return err +} + +// SetStickerPositionInSet moves a sticker in set to a specific position. +func (b *Bot) SetStickerPositionInSet(sticker string, position int) error { + params := map[string]string{ + "sticker": sticker, + "position": strconv.Itoa(position), + } + + _, err := b.Raw("setStickerPositionInSet", params) + return err +} + +// DeleteStickerFromSet deletes sticker from set created by the bot. +func (b *Bot) DeleteStickerFromSet(sticker string) error { + _, err := b.Raw("deleteStickerFromSet", map[string]string{"sticker": sticker}) + return err + +} + +// SetStickerSetThumb sets the thumbnail of a sticker set. +// Animated thumbnails can be set for animated sticker sets only. +// +// Thumbnail must be a PNG image, up to 128 kilobytes in size +// and have width and height exactly 100px, or a TGS animation +// up to 32 kilobytes in size. +// +// Animated sticker set thumbnail can't be uploaded via HTTP URL. +// +func (b *Bot) SetStickerSetThumb(to Recipient, s Sticker) error { + files := map[string]File{} + if s.PNG != nil { + files["thumb"] = *s.PNG + } else if s.TGS != nil { + files["thumb"] = *s.TGS + } + + params := map[string]string{ + "name": s.Name, + "user_id": to.Recipient(), + } + + _, err := b.sendFiles("setStickerSetThumb", files, params) + return err +}