From f7e326b02e008b78a79cd56f85786a5940d0939c Mon Sep 17 00:00:00 2001 From: OvyFlash Date: Sun, 20 Nov 2022 21:55:30 +0200 Subject: [PATCH] Implement Bot API 6.2 changes. --- configs.go | 24 +++++++++++++++++++++--- types.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/configs.go b/configs.go index 1831337..b3f01a6 100644 --- a/configs.go +++ b/configs.go @@ -2004,6 +2004,24 @@ func (config GetStickerSetConfig) params() (Params, error) { return params, nil } +// GetCustomEmojiStickersConfig get information about +// custom emoji stickers by their identifiers. +type GetCustomEmojiStickersConfig struct { + CustomEmojiIDs []string +} + +func (config GetCustomEmojiStickersConfig) params() (Params, error) { + params := make(Params) + + params.AddInterface("custom_emoji_ids", config.CustomEmojiIDs) + + return params, nil +} + +func (config GetCustomEmojiStickersConfig) method() string { + return "getCustomEmojiStickers" +} + // UploadStickerConfig allows you to upload a sticker for use in a set later. type UploadStickerConfig struct { UserID int64 @@ -2038,8 +2056,9 @@ type NewStickerSetConfig struct { Title string PNGSticker RequestFileData TGSSticker RequestFileData + StickerType string Emojis string - ContainsMasks bool + ContainsMasks bool // deprecated MaskPosition *MaskPosition } @@ -2053,11 +2072,10 @@ func (config NewStickerSetConfig) params() (Params, error) { params.AddNonZero64("user_id", config.UserID) params["name"] = config.Name params["title"] = config.Title - params["emojis"] = config.Emojis params.AddBool("contains_masks", config.ContainsMasks) - + params.AddNonEmpty("sticker_type", string(config.StickerType)) err := params.AddInterface("mask_position", config.MaskPosition) return params, err diff --git a/types.go b/types.go index 36c174b..d1c8443 100644 --- a/types.go +++ b/types.go @@ -274,6 +274,12 @@ type Chat struct { // // optional HasPrivateForwards bool `json:"has_private_forwards,omitempty"` + // HasRestrictedVoiceAndVideoMessages if the privacy settings of the other party + // restrict sending voice and video note messages + // in the private chat. Returned only in getChat. + // + // optional + HasRestrictedVoiceAndVideoMessages bool `json:"has_restricted_voice_and_video_messages,omitempty"` // Description for groups, supergroups and channel chats // // optional @@ -730,6 +736,7 @@ type MessageEntity struct { // “pre” (monowidth block), // “text_link” (for clickable text URLs), // “text_mention” (for users without usernames) + // “text_mention” (for inline custom emoji stickers) Type string `json:"type"` // Offset in UTF-16 code units to the start of the entity Offset int `json:"offset"` @@ -747,6 +754,10 @@ type MessageEntity struct { // // optional Language string `json:"language,omitempty"` + // CustomEmojiID for “custom_emoji” only, unique identifier of the custom emoji + // + // optional + CustomEmojiID string `json:"custom_emoji_id"` } // ParseURL attempts to parse a URL contained within a MessageEntity. @@ -1984,6 +1995,13 @@ type InputMediaDocument struct { DisableContentTypeDetection bool `json:"disable_content_type_detection,omitempty"` } +// Constant values for sticker types +const ( + StickerTypeRegular = "regular" + StickerTypeMask = "mask" + StickerTypeCustomEmoji = "custom_emoji" +) + // Sticker represents a sticker. type Sticker struct { // FileID is an identifier for this file, which can be used to download or @@ -1993,6 +2011,10 @@ type Sticker struct { // which is supposed to be the same over time and for different bots. // Can't be used to download or reuse the file. FileUniqueID string `json:"file_unique_id"` + // Type is a type of the sticker, currently one of “regular”, + // “mask”, “custom_emoji”. The type of the sticker is independent + // from its format, which is determined by the fields is_animated and is_video. + Type string `json:"type"` // Width sticker width Width int `json:"width"` // Height sticker height @@ -2036,6 +2058,21 @@ type Sticker struct { FileSize int `json:"file_size,omitempty"` } +// IsRegular returns if the Sticker is regular +func (s Sticker) IsRegular() bool { + return s.Type == StickerTypeRegular +} + +// IsMask returns if the Sticker is mask +func (s Sticker) IsMask() bool { + return s.Type == StickerTypeMask +} + +// IsCustomEmoji returns if the Sticker is custom emoji +func (s Sticker) IsCustomEmoji() bool { + return s.Type == StickerTypeCustomEmoji +} + // StickerSet represents a sticker set. type StickerSet struct { // Name sticker set name @@ -2049,6 +2086,8 @@ type StickerSet struct { // IsVideo true, if the sticker set contains video stickers IsVideo bool `json:"is_video"` // ContainsMasks true, if the sticker set contains masks + // + // deprecated. Use sticker_type instead ContainsMasks bool `json:"contains_masks"` // Stickers list of all set stickers Stickers []Sticker `json:"stickers"` @@ -2056,6 +2095,21 @@ type StickerSet struct { Thumbnail *PhotoSize `json:"thumb"` } +// IsRegular returns if the StickerSet is regular +func (s StickerSet) IsRegular() bool { + return s.StickerType == StickerTypeRegular +} + +// IsMask returns if the StickerSet is mask +func (s StickerSet) IsMask() bool { + return s.StickerType == StickerTypeMask +} + +// IsCustomEmoji returns if the StickerSet is custom emoji +func (s StickerSet) IsCustomEmoji() bool { + return s.StickerType == StickerTypeCustomEmoji +} + // MaskPosition describes the position on faces where a mask should be placed // by default. type MaskPosition struct {