/* * Echotron * Copyright (C) 2018 The Echotron Contributors * * Echotron is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Echotron is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package echotron // ParseMode is a custom type for the various frequent options used by some methods of the API. type ParseMode string // These are all the possible options that can be used by some methods. const ( Markdown ParseMode = "Markdown" MarkdownV2 = "MarkdownV2" HTML = "HTML" ) // PollType is a custom type for the various types of poll that can be sent. type PollType string // These are all the possible poll types. const ( Quiz PollType = "quiz" Regular = "regular" Any = "" ) // DiceEmoji is a custom type for the various emojis that can be sent through the SendDice method. type DiceEmoji string // These are all the possible emojis that can be sent through the SendDice method. const ( Die DiceEmoji = "🎲" Darts = "🎯" Basket = "🏀" Goal = "⚽️" Bowling = "🎳" Slot = "🎰" ) // ChatAction is a custom type for the various actions that can be sent through the SendChatAction method. type ChatAction string // These are all the possible actions that can be sent through the SendChatAction method. const ( Typing ChatAction = "typing" UploadPhoto = "upload_photo" RecordVideo = "record_video" UploadVideo = "upload_video" RecordAudio = "record_audio" UploadAudio = "upload_audio" UploadDocument = "upload_document" FindLocation = "find_location" RecordVideoNote = "record_video_note" UploadVideoNote = "upload_video_note" ChooseSticker = "choose_sticker" ) // MessageEntityType is a custom type for the various MessageEntity types used in various methods. type MessageEntityType string // These are all the possible types for MessageEntityType. const ( MentionEntity MessageEntityType = "mention" HashtagEntity = "hashtag" CashtagEntity = "cashtag" BotCommandEntity = "bot_command" UrlEntity = "url" EmailEntity = "email" PhoneNumberEntity = "phone_number" BoldEntity = "bold" ItalicEntity = "italic" UnderlineEntity = "underline" StrikethroughEntity = "strikethrough" SpoilerEntity = "spoiler" BlockQuoteEntity = "blockquote" ExpandableBlockQuoteEntity = "expandable_blockquote" CodeEntity = "code" PreEntity = "pre" TextLinkEntity = "text_link" TextMentionEntity = "text_mention" CustomEmojiEntity = "custom_emoji" ) // UpdateType is a custom type for the various update types that a bot can be subscribed to. type UpdateType string // These are all the possible types that a bot can be subscribed to. const ( MessageUpdate UpdateType = "message" EditedMessageUpdate = "edited_message" ChannelPostUpdate = "channel_post" EditedChannelPostUpdate = "edited_channel_post" InlineQueryUpdate = "inline_query" ChosenInlineResultUpdate = "chosen_inline_result" CallbackQueryUpdate = "callback_query" ShippingQueryUpdate = "shipping_query" PreCheckoutQueryUpdate = "pre_checkout_query" PollUpdate = "poll" PollAnswerUpdate = "poll_answer" MyChatMemberUpdate = "my_chat_member" ChatMemberUpdate = "chat_member" ) // ReplyMarkup is an interface for the various keyboard types. type ReplyMarkup interface { ImplementsReplyMarkup() } // KeyboardButton represents a button in a keyboard. type KeyboardButton struct { RequestPoll *KeyboardButtonPollType `json:"request_poll,omitempty"` WebApp *WebAppInfo `json:"web_app,omitempty"` RequestUsers *KeyboardButtonRequestUsers `json:"request_users,omitempty"` RequestChat *KeyboardButtonRequestChat `json:"request_chat,omitempty"` IconCustomEmojiID string `json:"icon_custom_emoji_id,omitempty"` Style ButtonStyle `json:"style,omitempty"` Text string `json:"text"` RequestContact bool `json:"request_contact,omitempty"` RequestLocation bool `json:"request_location,omitempty"` } // ButtonStyle represents supported button style values. type ButtonStyle string // These are all the possible values for ButtonStyle. const ( PrimaryButtonStyle ButtonStyle = "primary" DangerButtonStyle = "danger" SuccessButtonStyle = "success" ) // KeyboardButtonPollType represents type of a poll, which is allowed to be created and sent when the corresponding button is pressed. type KeyboardButtonPollType struct { Type PollType `json:"type"` } // KeyboardButtonRequestUsers defines the criteria used to request suitable users. // The identifiers of the selected users will be shared with the bot when the corresponding button is pressed. type KeyboardButtonRequestUsers struct { RequestID int `json:"request_id"` MaxQuantity int `json:"max_quantity,omitempty"` UserIsBot bool `json:"user_is_bot,omitempty"` UserIsPremium bool `json:"user_is_premium,omitempty"` RequestName bool `json:"request_name,omitempty"` RequestUsername bool `json:"request_username,omitempty"` RequestPhoto bool `json:"request_photo,omitempty"` } // KeyboardButtonRequestChat defines the criteria used to request a suitable chat. // The identifier of the selected chat will be shared with the bot when the corresponding button is pressed. type KeyboardButtonRequestChat struct { UserAdministratorRights *ChatAdministratorRights `json:"user_administrator_rights,omitempty"` BotAdministratorRights *ChatAdministratorRights `json:"bot_administrator_rights,omitempty"` RequestID int `json:"request_id"` ChatIsChannel bool `json:"chat_is_channel,omitempty"` ChatIsForum bool `json:"chat_is_forum,omitempty"` ChatHasUsername bool `json:"chat_has_username,omitempty"` ChatIsCreated bool `json:"chat_is_created,omitempty"` BotIsMember bool `json:"bot_is_member,omitempty"` RequestName bool `json:"request_name,omitempty"` RequestUsername bool `json:"request_username,omitempty"` RequestPhoto bool `json:"request_photo,omitempty"` } // ReplyKeyboardMarkup represents a custom keyboard with reply options. type ReplyKeyboardMarkup struct { InputFieldPlaceholder string `json:"input_field_placeholder,omitempty"` Keyboard [][]KeyboardButton `json:"keyboard"` IsPersistent bool `json:"is_persistent,omitempty"` ResizeKeyboard bool `json:"resize_keyboard,omitempty"` OneTimeKeyboard bool `json:"one_time_keyboard,omitempty"` Selective bool `json:"selective,omitempty"` } // ImplementsReplyMarkup is a dummy method which exists to implement the interface ReplyMarkup. func (i ReplyKeyboardMarkup) ImplementsReplyMarkup() {} // ReplyKeyboardRemove is used to remove the current custom keyboard and display the default letter-keyboard. // By default, custom keyboards are displayed until a new keyboard is sent by a bot. // An exception is made for one-time keyboards that are hidden immediately after the user presses a button (see ReplyKeyboardMarkup). // RemoveKeyboard MUST BE true. type ReplyKeyboardRemove struct { RemoveKeyboard bool `json:"remove_keyboard"` Selective bool `json:"selective"` } // ImplementsReplyMarkup is a dummy method which exists to implement the interface ReplyMarkup. func (r ReplyKeyboardRemove) ImplementsReplyMarkup() {} // InlineKeyboardButton represents a button in an inline keyboard. type InlineKeyboardButton struct { CopyText *CopyTextButton `json:"copy_text,omitempty"` CallbackGame *CallbackGame `json:"callback_game,omitempty"` WebApp *WebAppInfo `json:"web_app,omitempty"` LoginURL *LoginURL `json:"login_url,omitempty"` SwitchInlineQueryChosenChat *SwitchInlineQueryChosenChat `json:"switch_inline_query_chosen_chat,omitempty"` IconCustomEmojiID string `json:"icon_custom_emoji_id,omitempty"` Style ButtonStyle `json:"style,omitempty"` Text string `json:"text"` CallbackData string `json:"callback_data,omitempty"` SwitchInlineQuery string `json:"switch_inline_query,omitempty"` SwitchInlineQueryCurrentChat string `json:"switch_inline_query_current_chat,omitempty"` URL string `json:"url,omitempty"` Pay bool `json:"pay,omitempty"` } // CopyTextButton represents an inline keyboard button that copies specified text to the clipboard. type CopyTextButton struct { Text string `json:"text"` } // InlineKeyboardMarkup represents an inline keyboard. type InlineKeyboardMarkup struct { InlineKeyboard [][]InlineKeyboardButton `json:"inline_keyboard" query:"inline_keyboard"` } // ImplementsReplyMarkup is a dummy method which exists to implement the interface ReplyMarkup. func (i InlineKeyboardMarkup) ImplementsReplyMarkup() {} // ForceReply is used to display a reply interface to the user (act as if the user has selected the bot's message and tapped 'Reply'). // This can be extremely useful if you want to create user-friendly step-by-step interfaces without having to sacrifice privacy mode. type ForceReply struct { InputFieldPlaceholder string `json:"input_field_placeholder,omitempty"` ForceReply bool `json:"force_reply"` Selective bool `json:"selective"` } // ImplementsReplyMarkup is a dummy method which exists to implement the interface ReplyMarkup. func (f ForceReply) ImplementsReplyMarkup() {} // UpdateOptions contains the optional parameters used by the GetUpdates method. type UpdateOptions struct { AllowedUpdates []UpdateType `query:"allowed_updates"` Offset int `query:"offset"` Limit int `query:"limit"` Timeout int `query:"timeout"` } // WebhookOptions contains the optional parameters used by the SetWebhook method. type WebhookOptions struct { IPAddress string `query:"ip_address"` SecretToken string `query:"secret_token"` Certificate InputFile AllowedUpdates []UpdateType `query:"allowed_updates"` MaxConnections int `query:"max_connections"` } // BaseOptions contains the optional parameters used frequently in some Telegram API methods. type BaseOptions struct { BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` ReplyMarkup ReplyMarkup `query:"reply_markup"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // MessageOptions contains the optional parameters used by some Telegram API methods. type MessageOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` ParseMode ParseMode `query:"parse_mode"` LinkPreviewOptions LinkPreviewOptions `query:"link_preview_options"` Entities []MessageEntity `query:"entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int64 `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // PinMessageOptions contains the optional parameters used by the PinChatMember method. type PinMessageOptions struct { BusinessConnectionID string `query:"business_connection_id"` DisableNotification bool `query:"disable_notification"` } // UnpinMessageOptions contains the optional parameters used by the UnpinChatMember method. type UnpinMessageOptions struct { BusinessConnectionID string `query:"business_connection_id"` MessageID int `query:"message_id"` } // ForwardOptions contains the optional parameters used by the ForwardMessage method. type ForwardOptions struct { MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` VideoStartTimestamp int `query:"video_start_timestamp"` } // CopyOptions contains the optional parameters used by the CopyMessage method. type CopyOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` ParseMode ParseMode `query:"parse_mode"` Caption string `query:"caption"` CaptionEntities []MessageEntity `query:"caption_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` ShowCaptionAboveMedia bool `query:"show_caption_above_media"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // CopyMessagesOptions contains the optional parameters used by the CopyMessages methods. type CopyMessagesOptions struct { MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` RemoveCaption bool `query:"remove_caption"` VideoStartTimestamp int `query:"video_start_timestamp"` } // StickerOptions contains the optional parameters used by the SendSticker method. type StickerOptions struct { BusinessConnectionID string `query:"business_connection_id"` Emoji string `query:"emoji"` MessageEffectID string `query:"message_effect_id"` ReplyMarkup ReplyMarkup `query:"reply_markup"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // InputFile is a struct which contains data about a file to be sent. type InputFile struct { id string path string url string content []byte } // NewInputFileID is a wrapper for InputFile which only fills the id field. func NewInputFileID(ID string) InputFile { return InputFile{id: ID} } // NewInputFilePath is a wrapper for InputFile which only fills the path field. func NewInputFilePath(filePath string) InputFile { return InputFile{path: filePath} } // NewInputFileURL is a wrapper for InputFile which only fills the url field. func NewInputFileURL(url string) InputFile { return InputFile{url: url} } // NewInputFileBytes is a wrapper for InputFile which only fills the path and content fields. func NewInputFileBytes(fileName string, content []byte) InputFile { return InputFile{path: fileName, content: content} } // PhotoOptions contains the optional parameters used by the SendPhoto method. type PhotoOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` ParseMode ParseMode `query:"parse_mode"` Caption string `query:"caption"` CaptionEntities []MessageEntity `query:"caption_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` HasSpoiler bool `query:"has_spoiler"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` ShowCaptionAboveMedia bool `query:"show_caption_above_media"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // AudioOptions contains the optional parameters used by the SendAudio method. type AudioOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` Title string `query:"title"` MessageEffectID string `query:"message_effect_id"` ParseMode ParseMode `query:"parse_mode"` Caption string `query:"caption"` Performer string `query:"performer"` BusinessConnectionID string `query:"business_connection_id"` Thumbnail InputFile CaptionEntities []MessageEntity `query:"caption_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` Duration int `query:"duration"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // DocumentOptions contains the optional parameters used by the SendDocument method. type DocumentOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` ParseMode ParseMode `query:"parse_mode"` Caption string `query:"caption"` Thumbnail InputFile CaptionEntities []MessageEntity `query:"caption_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` DisableContentTypeDetection bool `query:"disable_content_type_detection"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // VideoOptions contains the optional parameters used by the SendVideo method. // TODO: handle the cover correctly. type VideoOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` Caption string `query:"caption"` MessageEffectID string `query:"message_effect_id"` ParseMode ParseMode `query:"parse_mode"` Thumbnail InputFile CaptionEntities []MessageEntity `query:"caption_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` Duration int `query:"duration"` Width int `query:"width"` Height int `query:"height"` HasSpoiler bool `query:"has_spoiler"` SupportsStreaming bool `query:"supports_streaming"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` ShowCaptionAboveMedia bool `query:"show_caption_above_media"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` Cover InputFile StartTimestamp int `query:"start_timestamp"` } // AnimationOptions contains the optional parameters used by the SendAnimation method. type AnimationOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` ParseMode ParseMode `query:"parse_mode"` Caption string `query:"caption"` Thumbnail InputFile CaptionEntities []MessageEntity `query:"caption_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` Duration int `query:"duration"` Width int `query:"width"` Height int `query:"height"` HasSpoiler bool `query:"has_spoiler"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` ShowCaptionAboveMedia bool `query:"show_caption_above_media"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // VoiceOptions contains the optional parameters used by the SendVoice method. type VoiceOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` ParseMode ParseMode `query:"parse_mode"` Caption string `query:"caption"` CaptionEntities []MessageEntity `query:"caption_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` Duration int `query:"duration"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // VideoNoteOptions contains the optional parameters used by the SendVideoNote method. type VideoNoteOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` Thumbnail InputFile ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` Duration int `query:"duration"` Length int `query:"length"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // PaidMediaOptions contains the optional parameters used by the SendPaidMedia method. type PaidMediaOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` Caption string `query:"caption"` Payload string `query:"payload"` ParseMode ParseMode `query:"parse_mode"` CaptionEntities []MessageEntity `query:"caption_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` ShowCaptionAboveMedia bool `query:"show_caption_above_media"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // MediaGroupOptions contains the optional parameters used by the SendMediaGroup method. type MediaGroupOptions struct { BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // This is a custom constant to set an infinite live period value in LocationOptions and EditLocationOptions. const InfiniteLivePeriod = 0x7FFFFFFF // LocationOptions contains the optional parameters used by the SendLocation method. type LocationOptions struct { BusinessConnectionID string `query:"business_connection_id"` MessageEffectID string `query:"message_effect_id"` ReplyMarkup ReplyMarkup `query:"reply_markup"` ReplyParameters ReplyParameters `query:"reply_parameters"` HorizontalAccuracy float64 `query:"horizontal_accuracy"` MessageThreadID int `query:"message_thread_id"` LivePeriod int `query:"live_period"` ProximityAlertRadius int `query:"proximity_alert_radius"` Heading int `query:"heading"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // EditLocationOptions contains the optional parameters used by the EditMessageLiveLocation method. type EditLocationOptions struct { BusinessConnectionID string `query:"business_connection_id"` ReplyMarkup InlineKeyboardMarkup `query:"reply_markup"` HorizontalAccuracy float64 `query:"horizontal_accuracy"` Heading int `query:"heading"` LivePeriod int `query:"live_period"` ProximityAlertRadius int `query:"proximity_alert_radius"` } // StopLocationOptions contains the optional parameters used by the StopMessageLiveLocation method. type StopLocationOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` } // VenueOptions contains the optional parameters used by the SendVenue method. type VenueOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` FoursquareID string `query:"foursquare_id"` FoursquareType string `query:"foursquare_type"` GooglePlaceType string `query:"google_place_type"` GooglePlaceID string `query:"google_place_id"` MessageEffectID string `query:"message_effect_id"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // ContactOptions contains the optional parameters used by the SendContact method. type ContactOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` VCard string `query:"vcard"` LastName string `query:"last_name"` MessageEffectID string `query:"message_effect_id"` ReplyParameters ReplyParameters `query:"reply_parameters"` MessageThreadID int `query:"message_thread_id"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // PollOptions contains the optional parameters used by the SendPoll method. type PollOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` Explanation string `query:"explanation"` MessageEffectID string `query:"message_effect_id"` ExplanationParseMode ParseMode `query:"explanation_parse_mode"` QuestionParseMode ParseMode `query:"question_parse_mode"` Type PollType `query:"type"` ExplanationEntities []MessageEntity `query:"explanation_entities"` QuestionEntities []MessageEntity `query:"question_entities"` ReplyParameters ReplyParameters `query:"reply_parameters"` CorrectOptionID int `query:"correct_option_id"` MessageThreadID int `query:"message_thread_id"` CloseDate int `query:"close_date"` OpenPeriod int `query:"open_period"` IsClosed bool `query:"is_closed"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` AllowsMultipleAnswers bool `query:"allows_multiple_answers"` IsAnonymous bool `query:"is_anonymous"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // StopPollOptions contains the optional parameters used by the StopPoll method. type StopPollOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` } // BanOptions contains the optional parameters used by the BanChatMember method. type BanOptions struct { UntilDate int `query:"until_date"` RevokeMessages bool `query:"revoke_messages"` } // UnbanOptions contains the optional parameters used by the UnbanChatMember method. type UnbanOptions struct { OnlyIfBanned bool `query:"only_if_banned"` } // RestrictOptions contains the optional parameters used by the RestrictChatMember method. type RestrictOptions struct { UseIndependentChatPermissions bool `query:"use_independent_chat_permissions"` UntilDate int `query:"until_date"` } // PromoteOptions contains the optional parameters used by the PromoteChatMember method. type PromoteOptions struct { IsAnonymous bool `query:"is_anonymous,omitempty"` CanManageChat bool `query:"can_manage_chat,omitempty"` CanPostMessages bool `query:"can_post_messages,omitempty"` CanEditMessages bool `query:"can_edit_messages,omitempty"` CanDeleteMessages bool `query:"can_delete_messages,omitempty"` CanManageVideoChats bool `query:"can_manage_video_chats,omitempty"` CanRestrictMembers bool `query:"can_restrict_members,omitempty"` CanPromoteMembers bool `query:"can_promote_members,omitempty"` CanChangeInfo bool `query:"can_change_info,omitempty"` CanInviteUsers bool `query:"can_invite_users,omitempty"` CanPinMessages bool `query:"can_pin_messages,omitempty"` CanPostStories bool `json:"can_post_stories,omitempty"` CanEditStories bool `json:"can_edit_stories,omitempty"` CanDeleteStories bool `json:"can_delete_stories,omitempty"` CanManageTopics bool `query:"can_manage_topics,omitempty"` } // UserProfileOptions contains the optional parameters used by the GetUserProfilePhotos method. type UserProfileOptions struct { Offset int `query:"offset"` Limit int `query:"limit"` } // UserProfileAudioOptions contains the optional parameters used by the GetUserProfileAudios method. type UserProfileAudioOptions struct { Offset int `query:"offset"` Limit int `query:"limit"` } // UserEmojiStatusOptions contains the optional parameters used by the SetUserEmojiStatus method. type UserEmojiStatusOptions struct { EmojiStatusCustomEmojiID string `query:"emoji_status_custom_emoji_id"` EmojiStatusExpirationDate string `query:"emoji_status_expiration_date"` } // ChatPermissionsOptions contains the optional parameters used by the SetChatPermissions method. type ChatPermissionsOptions struct { UseIndependentChatPermissions bool `query:"use_independent_chat_permissions"` } // InviteLinkOptions contains the optional parameters used by the CreateChatInviteLink and EditChatInviteLink methods. type InviteLinkOptions struct { Name string `query:"name"` ExpireDate int64 `query:"expire_date"` MemberLimit int `query:"member_limit"` CreatesJoinRequest bool `query:"creates_join_request"` } // ChatSubscriptionInviteOptions contains the optional parameters used by the CreateChatSubscriptionInviteLink and EditChatSubscriptionInviteLink methods. type ChatSubscriptionInviteOptions struct { Name string `query:"name"` } // CallbackQueryOptions contains the optional parameters used by the AnswerCallbackQuery method. type CallbackQueryOptions struct { Text string `query:"text"` URL string `query:"url"` CacheTime int `query:"cache_time"` ShowAlert bool `query:"show_alert"` } // MessageIDOptions is a struct which contains data about a message to edit. type MessageIDOptions struct { inlineMessageID string `query:"inline_message_id"` chatID int64 `query:"chat_id"` messageID int `query:"message_id"` } // NewMessageID is a wrapper for MessageIDOptions which only fills the chatID and messageID fields. func NewMessageID(chatID int64, messageID int) MessageIDOptions { return MessageIDOptions{chatID: chatID, messageID: messageID} } // NewInlineMessageID is a wrapper for MessageIDOptions which only fills the inlineMessageID fields. func NewInlineMessageID(ID string) MessageIDOptions { return MessageIDOptions{inlineMessageID: ID} } // MessageTextOptions contains the optional parameters used by the EditMessageText method. type MessageTextOptions struct { ParseMode ParseMode `query:"parse_mode"` BusinessConnectionID string `query:"business_connection_id"` Entities []MessageEntity `query:"entities"` ReplyMarkup InlineKeyboardMarkup `query:"reply_markup"` LinkPreviewOptions LinkPreviewOptions `query:"link_preview_options"` } // MessageCaptionOptions contains the optional parameters used by the EditMessageCaption method. type MessageCaptionOptions struct { Caption string `query:"caption"` BusinessConnectionID string `query:"business_connection_id"` ParseMode ParseMode `query:"parse_mode"` CaptionEntities []MessageEntity `query:"caption_entities"` ReplyMarkup InlineKeyboardMarkup `query:"reply_markup"` ShowCaptionAboveMedia bool `query:"show_caption_above_media"` } // MessageMediaOptions contains the optional parameters used by the EditMessageMedia method. type MessageMediaOptions struct { ReplyMarkup ReplyMarkup `query:"reply_markup"` BusinessConnectionID string `query:"business_connection_id"` } // MessageReplyMarkupOptions contains the optional parameters used by the EditMessageReplyMarkup method. type MessageReplyMarkupOptions struct { BusinessConnectionID string `query:"business_connection_id"` ReplyMarkup InlineKeyboardMarkup `query:"reply_markup"` } // CommandOptions contains the optional parameters used by the SetMyCommands, DeleteMyCommands and GetMyCommands methods. type CommandOptions struct { LanguageCode string `query:"language_code"` Scope BotCommandScope `query:"scope"` } // InvoiceOptions contains the optional parameters used by the SendInvoice API method. type InvoiceOptions struct { StartParameter string `query:"start_parameter"` ProviderData string `query:"provider_data"` PhotoURL string `query:"photo_url"` ProviderToken string `query:"provider_token"` MessageEffectID string `query:"message_effect_id"` ReplyMarkup InlineKeyboardMarkup `query:"reply_markup"` SuggestedTipAmount []int `query:"suggested_tip_amounts"` ReplyParameters ReplyParameters `query:"reply_parameters"` MaxTipAmount int `query:"max_tip_amount"` PhotoSize int `query:"photo_size"` PhotoWidth int `query:"photo_width"` PhotoHeight int `query:"photo_height"` MessageThreadID int `query:"message_thread_id"` SendPhoneNumberToProvider bool `query:"send_phone_number_to_provider"` NeedShippingAddress bool `query:"need_shipping_address"` NeedPhoneNumber bool `query:"need_phone_number"` SendEmailToProvider bool `query:"send_email_to_provider"` IsFlexible bool `query:"is_flexible"` DisableNotification bool `query:"disable_notification"` ProtectContent bool `query:"protect_content"` NeedName bool `query:"need_name"` NeedEmail bool `query:"need_email"` AllowPaidBroadcast bool `query:"allow_paid_broadcast"` } // CreateInvoiceLinkOptions contains the optional parameters used by the CreateInvoiceLink API method. // Currently, SubscriptionPeriod should always be set to 2592000 (30 days) if specified. type CreateInvoiceLinkOptions struct { ProviderData string `query:"provider_data"` PhotoURL string `query:"photo_url"` ProviderToken string `query:"provider_token"` BusinessConnectionID string `query:"business_connection_id"` SuggestedTipAmounts []int `query:"suggested_tip_amounts"` PhotoSize int `query:"photo_size"` PhotoWidth int `query:"photo_width"` PhotoHeight int `query:"photo_height"` MaxTipAmount int `query:"max_tip_amount"` SubscriptionPeriod int `query:"subscription_period"` NeedPhoneNumber bool `query:"need_phone_number"` NeepShippingAddress bool `query:"need_shipping_address"` SendPhoneNumberToProvider bool `query:"send_phone_number_to_provider"` SendEmailToProvider bool `query:"send_email_to_provider"` IsFlexible bool `query:"is_flexible"` NeedName bool `query:"need_name"` NeedEmail bool `query:"need_email"` } // ShippingOption represents one shipping option. type ShippingOption struct { ID string `query:"id"` Title string `query:"title"` Prices []LabeledPrice `query:"prices"` } // ShippingQueryOptions contains the optional parameters used by the AnswerShippingQuery API method. type ShippingQueryOptions struct { ErrorMessage string `query:"error_message"` ShippingOptions []ShippingOption `query:"shipping_options"` } // PreCheckoutOptions contains the optional parameters used by the AnswerPreCheckoutQuery API method. type PreCheckoutOptions struct { ErrorMessage string `query:"error_message"` } // CreateTopicOptions contains the optional parameters used by the CreateForumTopic API method. type CreateTopicOptions struct { IconCustomEmojiID string `query:"icon_custom_emoji_id"` IconColor IconColor `query:"icon_color"` } // EditTopicOptions contains the optional parameters used by the EditForumTopic API method. type EditTopicOptions struct { Name string `query:"name"` IconCustomEmojiID string `query:"icon_custom_emoji_id"` } // ChatActionOptions contains the optional parameters used by the SendChatAction API method. type ChatActionOptions struct { BusinessConnectionID string `query:"business_connection_id"` MessageThreadID int `query:"message_thread_id"` } // MessageReactionOptions contains the optional parameters used by the SetMessageReaction API method. type MessageReactionOptions struct { Reaction []ReactionType `query:"reaction"` IsBig bool `query:"is_big"` } // GiftOptions contains the optional parameters used by the SendGift API method. type GiftOptions struct { Text string `query:"text"` TextParseMode string `query:"text_parse_mode"` TextEntities []MessageEntity `query:"text_entities"` ChatID int64 `query:"chat_id"` PayForUpgrade bool `query:"pay_for_upgrade"` } // VerifyOptions contains the optional parameters used by the VerifyUser and VerifyChat API methods. type VerifyOptions struct { CustomDescription string `query:"custom_description"` }