package tg // APIUser represents the "User" JSON structure type APIUser struct { UserID int64 `json:"id"` FirstName string `json:"first_name"` LastName string `json:"last_name,omitempty"` Username string `json:"username,omitempty"` IsBot bool `json:"is_bot"` LanguageCode string `json:"language_code,omitempty"` CanJoinGroups bool `json:"can_join_groups,omitempty"` CanReadAllGroupMessages bool `json:"can_read_all_group_messages,omitempty"` SupportsInlineQueries bool `json:"supports_inline_queries,omitempty"` } // ChatType defines the type of chat type ChatType string const ( // ChatTypePrivate is a private chat (between user and bot) ChatTypePrivate ChatType = "private" // ChatTypeGroup is a group chat (<100 members) ChatTypeGroup ChatType = "group" // ChatTypeSupergroup is a supergroup chat (>=100 members) ChatTypeSupergroup ChatType = "supergroup" // ChatTypeChannel is a channel (Read-only) ChatTypeChannel ChatType = "channel" ) // APIChat represents the "Chat" JSON structure type APIChat struct { ChatID int64 `json:"id"` Type ChatType `json:"type"` Title *string `json:"title,omitempty"` Username *string `json:"username,omitempty"` FirstName *string `json:"first_name,omitempty"` LastName *string `json:"last_name,omitempty"` } // APIMessage represents the "Message" JSON structure type APIMessage struct { MessageID int64 `json:"message_id"` User APIUser `json:"from"` Time int64 `json:"date"` Chat *APIChat `json:"chat"` FwdUser *APIUser `json:"forward_from,omitempty"` FwdTime *int `json:"forward_date,omitempty"` ReplyTo *APIMessage `json:"reply_to_message,omitempty"` Text *string `json:"text,omitempty"` Audio *APIAudio `json:"audio,omitempty"` Document *APIDocument `json:"document,omitempty"` Photo []APIPhotoSize `json:"photo,omitempty"` Sticker *APISticker `json:"sticker,omitempty"` Video *APIVideo `json:"video,omitempty"` Voice *APIVoice `json:"voice,omitempty"` Caption *string `json:"caption,omitempty"` Contact *APIContact `json:"contact,omitempty"` Location *APILocation `json:"location,omitempty"` NewUser *APIUser `json:"new_chat_partecipant,omitempty"` LeftUser *APIUser `json:"left_chat_partecipant,omitempty"` PhotoDeleted *bool `json:"delete_chat_photo,omitempty"` GroupCreated *bool `json:"group_chat_created,omitempty"` SupergroupCreated *bool `json:"supergroup_chat_created,omitempty"` ChannelCreated *bool `json:"channel_chat_created,omitempty"` GroupToSuper *int64 `json:"migrate_to_chat_id,omitempty"` GroupFromSuper *int64 `json:"migrate_from_chat_id,omitempty"` } // APIPhotoSize represents the "PhotoSize" JSON structure type APIPhotoSize struct { FileID string `json:"file_id"` Width int `json:"width"` Height int `json:"height"` FileSize *int `json:"file_size,omitempty"` } // APIAudio represents the "Audio" JSON structure type APIAudio struct { FileID string `json:"file_id"` Duration int `json:"duration"` Performer *string `json:"performer,omitempty"` Title *string `json:"title,omitempty"` MimeType *string `json:"mime_type,omitempty"` FileSize *int `json:"file_size,omitempty"` } // APIDocument represents the "Document" JSON structure type APIDocument struct { FileID string `json:"file_id"` Thumbnail *APIPhotoSize `json:"thumb,omitempty"` Filename string `json:"file_name"` MimeType *string `json:"mime_type,omitempty"` FileSize *int `json:"file_size,omitempty"` } // APISticker represents the "Sticker" JSON structure type APISticker struct { FileID string `json:"file_id"` Width int `json:"width"` Height int `json:"height"` Thumbnail *APIPhotoSize `json:"thumb,omitempty"` FileSize *int `json:"file_size,omitempty"` } // APIVideo represents the "Video" JSON structure type APIVideo struct { FileID string `json:"file_id"` Width int `json:"width"` Height int `json:"height"` Duration int `json:"duration"` Thumbnail *APIPhotoSize `json:"thumb,omitempty"` MimeType *string `json:"mime_type,omitempty"` FileSize *int `json:"file_size,omitempty"` } // APIVoice represents the "Voice" JSON structure type APIVoice struct { FileID string `json:"file_id"` Duration int `json:"duration"` MimeType *string `json:"mime_type,omitempty"` FileSize *int `json:"file_size,omitempty"` } // APIContact represents the "Contact" JSON structure type APIContact struct { PhoneNumber string `json:"phone_number"` FirstName string `json:"first_name"` LastName *string `json:"last_name,omitempty"` UserID *int64 `json:"user_id,omitempty"` } // APILocation represents the "Location" JSON structure type APILocation struct { Longitude float64 `json:"longitude"` Latitude float64 `json:"latitude"` } // APIUpdate represents the "Update" JSON structure type APIUpdate struct { UpdateID int64 `json:"update_id"` Message *APIMessage `json:"message"` Inline *APIInlineQuery `json:"inline_query,omitempty"` Callback *APICallbackQuery `json:"callback_query,omitempty"` } // APIFile represents the "File" JSON structure type APIFile struct { FileID string `json:"file_id"` Size *int `json:"file_size,omitempty"` Path *string `json:"file_path,omitempty"` } // APIResponse represents a response from the Telegram API type APIResponse struct { Ok bool `json:"ok"` ErrCode *int `json:"error_code,omitempty"` Description *string `json:"description,omitempty"` } // APIInlineQuery represents an inline query from telegram type APIInlineQuery struct { QueryID string `json:"id"` From APIUser `json:"from"` Location *APILocation `json:"location,omitempty"` Query string `json:"query"` Offset string `json:"offset"` } // APIInlineQueryResultPhoto is an image result for an inline query type APIInlineQueryResultPhoto struct { Type string `json:"type"` ResultID string `json:"id"` PhotoURL string `json:"photo_url"` ThumbURL string `json:"thumb_url"` Width int `json:"photo_width,omitempty"` Height int `json:"photo_height,omitempty"` Title string `json:"title,omitempty"` Description string `json:"description,omitempty"` Caption string `json:"caption,omitempty"` ParseMode string `json:"parse_mode,omitempty"` ReplyMarkup interface{} `json:"reply_markup,omitempty"` //TODO inputMessageContent } type APIReplyKeyboardMarkup struct { Keyboard [][]APIKeyboardButton `json:"keyboard"` // Grid of buttons Resize bool `json:"resize_keyboard,omitempty"` OneTime bool `json:"one_time_keyboard,omitempty"` Selective bool `json:"selective,omitempty"` } // APIForceReply forces the reply textbox to open after receiving a message type APIForceReply struct { ForceReply bool `json:"force_reply"` Selective bool `json:"selective,omitempty"` } // APIKeyboardButton is a custom keyboard button type APIKeyboardButton struct { Text string `json:"text"` RequestContact bool `json:"request_contact,omitempty"` RequestLocation bool `json:"request_location,omitempty"` } type APIReplyKeyboardRemove struct { RemoveKeyboard bool `json:"remove_keyboard"` Selective bool `json:"selective,omitempty"` } type APIInlineKeyboardMarkup struct { InlineKeyboard [][]APIInlineKeyboardButton `json:"inline_keyboard"` } // APIInlineKeyboardButton is an inline message button type APIInlineKeyboardButton struct { Text string `json:"text"` URL string `json:"url,omitempty"` CallbackData string `json:"callback_data,omitempty"` } // APIInputMediaPhoto is a media photo element (already on telegram servers or via HTTP URL) for albums and other cached pictures type APIInputMediaPhoto struct { Type string `json:"type"` Media string `json:"media"` Caption string `json:"caption,omitempty"` ParseMode string `json:"parse_mode,omitempty"` } // APICallbackQuery is a callback query triggered by an inline button type APICallbackQuery struct { ID string `json:"id"` User APIUser `json:"from"` Message *APIMessage `json:"message,omitempty"` InlineID *string `json:"inline_message_id,omitempty"` ChatID string `json:"chat_instance"` Data *string `json:"data,omitempty"` } type apiMessageResponse struct { Ok bool `json:"ok"` Result APIMessage `json:"result"` } type apiAlbumResponse struct { Ok bool `json:"ok"` Result []APIMessage `json:"result"` } type apiUserResponse struct { Ok bool `json:"ok"` Result APIUser `json:"result"` }