{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE TemplateHaskell #-} -- | TD API data types generated by tdlib-gen module TDLib.Generated.Types where import GHC.Generics import Language.Haskell.Codegen.TH import Data.ByteString.Base64.Type import qualified Data.Text as T import Language.TL.I64 type I53 = Int type I32 = Int type T = T.Text data Error = -- | An object of this type can be returned on every function call, in case of an error Error { -- | Error code; subject to future changes. If the error code is 406, the error message must not be processed in any way and must not be displayed to the user code :: I32, -- | Error message; subject to future changes message :: T } deriving (Show, Eq, Generic) data Ok = -- | An object of this type is returned on a successful function call for certain functions Ok { } deriving (Show, Eq, Generic) data TdlibParameters = -- | Contains parameters for TDLib initialization TdlibParameters { -- | If set to true, the Telegram test environment will be used instead of the production environment useTestDc :: Bool, -- | The path to the directory for the persistent database; if empty, the current working directory will be used databaseDirectory :: T, -- | The path to the directory for storing files; if empty, database_directory will be used filesDirectory :: T, -- | If set to true, information about downloaded and uploaded files will be saved between application restarts useFileDatabase :: Bool, -- | If set to true, the library will maintain a cache of users, basic groups, supergroups, channels and secret chats. Implies use_file_database useChatInfoDatabase :: Bool, -- | If set to true, the library will maintain a cache of chats and messages. Implies use_chat_info_database useMessageDatabase :: Bool, -- | If set to true, support for secret chats will be enabled useSecretChats :: Bool, -- | Application identifier for Telegram API access, which can be obtained at https://my.telegram.org apiId :: I32, -- | Application identifier hash for Telegram API access, which can be obtained at https://my.telegram.org apiHash :: T, -- | IETF language tag of the user's operating system language; must be non-empty systemLanguageCode :: T, -- | Model of the device the application is being run on; must be non-empty deviceModel :: T, -- | Version of the operating system the application is being run on; must be non-empty systemVersion :: T, -- | Application version; must be non-empty applicationVersion :: T, -- | If set to true, old files will automatically be deleted enableStorageOptimizer :: Bool, -- | If set to true, original file names will be ignored. Otherwise, downloaded files will be saved under names as close as possible to the original name ignoreFileNames :: Bool } deriving (Show, Eq, Generic) -- | Provides information about the method by which an authentication code is delivered to the user data AuthenticationCodeType = -- | An authentication code is delivered via a private Telegram message, which can be viewed in another client AuthenticationCodeTypeTelegramMessage { -- | Length of the code length :: I32 } | -- | An authentication code is delivered via an SMS message to the specified phone number AuthenticationCodeTypeSms { -- | Length of the code length :: I32 } | -- | An authentication code is delivered via a phone call to the specified phone number AuthenticationCodeTypeCall { -- | Length of the code length :: I32 } | -- | An authentication code is delivered by an immediately cancelled call to the specified phone number. The number from which the call was made is the code AuthenticationCodeTypeFlashCall { -- | Pattern of the phone number from which the call will be made pattern_ :: T } deriving (Show, Eq, Generic) data AuthenticationCodeInfo = -- | Information about the authentication code that was sent AuthenticationCodeInfo { -- | A phone number that is being authenticated phoneNumber :: T, -- | Describes the way the code was sent to the user type_ :: AuthenticationCodeType, -- | Describes the way the next code will be sent to the user; may be null nextType :: (Maybe) (AuthenticationCodeType), -- | Timeout before the code should be re-sent, in seconds timeout :: I32 } deriving (Show, Eq, Generic) data EmailAddressAuthenticationCodeInfo = -- | Information about the email address authentication code that was sent EmailAddressAuthenticationCodeInfo { -- | Pattern of the email address to which an authentication code was sent emailAddressPattern :: T, -- | Length of the code; 0 if unknown length :: I32 } deriving (Show, Eq, Generic) data TextEntity = -- | Represents a part of the text that needs to be formatted in some unusual way TextEntity { -- | Offset of the entity in UTF-16 code units offset :: I32, -- | Length of the entity, in UTF-16 code units length :: I32, -- | Type of the entity type_ :: TextEntityType } deriving (Show, Eq, Generic) data TextEntities = -- | Contains a list of text entities TextEntities { -- | List of text entities entities :: [TextEntity] } deriving (Show, Eq, Generic) data FormattedText = -- | A text with some entities FormattedText { -- | The text text :: T, -- | Entities contained in the text. Entities can be nested, but must not mutually intersect with each other. entities :: [TextEntity] } deriving (Show, Eq, Generic) data TermsOfService = -- | Contains Telegram terms of service TermsOfService { -- | Text of the terms of service text :: FormattedText, -- | The minimum age of a user to be able to accept the terms; 0 if any minUserAge :: I32, -- | True, if a blocking popup with terms of service must be shown to the user showPopup :: Bool } deriving (Show, Eq, Generic) -- | Represents the current authorization state of the client data AuthorizationState = -- | TDLib needs TdlibParameters for initialization AuthorizationStateWaitTdlibParameters { } | -- | TDLib needs an encryption key to decrypt the local database AuthorizationStateWaitEncryptionKey { -- | True, if the database is currently encrypted isEncrypted :: Bool } | -- | TDLib needs the user's phone number to authorize. Call `setAuthenticationPhoneNumber` to provide the phone number, or use `requestQrCodeAuthentication`, or `checkAuthenticationBotToken` for other authentication options AuthorizationStateWaitPhoneNumber { } | -- | TDLib needs the user's authentication code to authorize AuthorizationStateWaitCode { -- | Information about the authorization code that was sent codeInfo :: AuthenticationCodeInfo } | -- | The user needs to confirm authorization on another logged in device by scanning a QR code with the provided link AuthorizationStateWaitOtherDeviceConfirmation { -- | A tg:// URL for the QR code. The link will be updated frequently link :: T } | -- | The user is unregistered and need to accept terms of service and enter their first name and last name to finish registration AuthorizationStateWaitRegistration { -- | Telegram terms of service termsOfService :: TermsOfService } | -- | The user has been authorized, but needs to enter a password to start using the application AuthorizationStateWaitPassword { -- | Hint for the password; may be empty passwordHint :: T, -- | True, if a recovery email address has been set up hasRecoveryEmailAddress :: Bool, -- | Pattern of the email address to which the recovery email was sent; empty until a recovery email has been sent recoveryEmailAddressPattern :: T } | -- | The user has been successfully authorized. TDLib is now ready to answer queries AuthorizationStateReady { } | -- | The user is currently logging out AuthorizationStateLoggingOut { } | -- | TDLib is closing, all subsequent queries will be answered with the error 500. Note that closing TDLib can take a while. All resources will be freed only after authorizationStateClosed has been received AuthorizationStateClosing { } | -- | TDLib client is in its final state. All databases are closed and all resources are released. No other updates will be received after this. All queries will be responded to AuthorizationStateClosed { } deriving (Show, Eq, Generic) data PasswordState = -- | Represents the current state of 2-step verification PasswordState { -- | True, if a 2-step verification password is set hasPassword :: Bool, -- | Hint for the password; may be empty passwordHint :: T, -- | True, if a recovery email is set hasRecoveryEmailAddress :: Bool, -- | True, if some Telegram Passport elements were saved hasPassportData :: Bool, -- | Information about the recovery email address to which the confirmation email was sent; may be null recoveryEmailAddressCodeInfo :: (Maybe) (EmailAddressAuthenticationCodeInfo) } deriving (Show, Eq, Generic) data RecoveryEmailAddress = -- | Contains information about the current recovery email address RecoveryEmailAddress { -- | Recovery email address recoveryEmailAddress :: T } deriving (Show, Eq, Generic) data TemporaryPasswordState = -- | Returns information about the availability of a temporary password, which can be used for payments TemporaryPasswordState { -- | True, if a temporary password is available hasPassword :: Bool, -- | Time left before the temporary password expires, in seconds validFor :: I32 } deriving (Show, Eq, Generic) data LocalFile = -- | Represents a local file LocalFile { -- | Local path to the locally available file part; may be empty path :: T, -- | True, if it is possible to try to download or generate the file canBeDownloaded :: Bool, -- | True, if the file can be deleted canBeDeleted :: Bool, -- | True, if the file is currently being downloaded (or a local copy is being generated by some other means) isDownloadingActive :: Bool, -- | True, if the local copy is fully available isDownloadingCompleted :: Bool, -- | Download will be started from this offset. downloaded_prefix_size is calculated from this offset downloadOffset :: I32, -- | If is_downloading_completed is false, then only some prefix of the file starting from download_offset is ready to be read. downloaded_prefix_size is the size of that prefix downloadedPrefixSize :: I32, -- | Total downloaded file bytes. Should be used only for calculating download progress. The actual file size may be bigger, and some parts of it may contain garbage downloadedSize :: I32 } deriving (Show, Eq, Generic) data RemoteFile = -- | Represents a remote file RemoteFile { -- | Remote file identifier; may be empty. Can be used by the current user across application restarts or even from other devices. Uniquely identifies a file, but a file can have a lot of different valid identifiers. id :: T, -- | Unique file identifier; may be empty if unknown. The unique file identifier which is the same for the same file even for different users and is persistent over time uniqueId :: T, -- | True, if the file is currently being uploaded (or a remote copy is being generated by some other means) isUploadingActive :: Bool, -- | True, if a remote copy is fully available isUploadingCompleted :: Bool, -- | Size of the remote available part of the file; 0 if unknown uploadedSize :: I32 } deriving (Show, Eq, Generic) data File = -- | Represents a file File { -- | Unique file identifier id :: I32, -- | File size; 0 if unknown size :: I32, -- | Expected file size in case the exact file size is unknown, but an approximate size is known. Can be used to show download/upload progress expectedSize :: I32, -- | Information about the local copy of the file local :: LocalFile, -- | Information about the remote copy of the file remote :: RemoteFile } deriving (Show, Eq, Generic) -- | Points to a file data InputFile = -- | A file defined by its unique ID InputFileId { -- | Unique file identifier id_2 :: I32 } | -- | A file defined by its remote ID. The remote ID is guaranteed to be usable only if the corresponding file is still accessible to the user and known to TDLib. InputFileRemote { -- | Remote file identifier id :: T } | -- | A file defined by a local path InputFileLocal { -- | Local path to the file path :: T } | -- | A file generated by the client InputFileGenerated { -- | Local path to a file from which the file is generated; may be empty if there is no such file originalPath :: T, -- | String specifying the conversion applied to the original file; should be persistent across application restarts. Conversions beginning with '#' are reserved for internal TDLib usage conversion :: T, -- | Expected size of the generated file; 0 if unknown expectedSize :: I32 } deriving (Show, Eq, Generic) data PhotoSize = -- | Photo description PhotoSize { -- | Thumbnail type (see https://core.telegram.org/constructor/photoSize) type_ :: T, -- | Information about the photo file photo :: File, -- | Photo width width :: I32, -- | Photo height height :: I32 } deriving (Show, Eq, Generic) data Minithumbnail = -- | Thumbnail image of a very poor quality and low resolution Minithumbnail { -- | Thumbnail width, usually doesn't exceed 40 width :: I32, -- | Thumbnail height, usually doesn't exceed 40 height :: I32, -- | The thumbnail in JPEG format data_ :: ByteString64 } deriving (Show, Eq, Generic) -- | Describes format of the thumbnail data ThumbnailFormat = -- | The thumbnail is in JPEG format ThumbnailFormatJpeg { } | -- | The thumbnail is in PNG format. It will be used only for background patterns ThumbnailFormatPng { } | -- | The thumbnail is in WEBP format. It will be used only for some stickers ThumbnailFormatWebp { } | -- | The thumbnail is in static GIF format. It will be used only for some bot inline results ThumbnailFormatGif { } | -- | The thumbnail is in TGS format. It will be used only for animated sticker sets ThumbnailFormatTgs { } | -- | The thumbnail is in MPEG4 format. It will be used only for some animations and videos ThumbnailFormatMpeg4 { } deriving (Show, Eq, Generic) data Thumbnail = -- | Represents a thumbnail Thumbnail { -- | Thumbnail format format :: ThumbnailFormat, -- | Thumbnail width width :: I32, -- | Thumbnail height height :: I32, -- | The thumbnail file :: File } deriving (Show, Eq, Generic) -- | Part of the face, relative to which a mask should be placed data MaskPoint = -- | A mask should be placed relatively to the forehead MaskPointForehead { } | -- | A mask should be placed relatively to the eyes MaskPointEyes { } | -- | A mask should be placed relatively to the mouth MaskPointMouth { } | -- | A mask should be placed relatively to the chin MaskPointChin { } deriving (Show, Eq, Generic) data MaskPosition = -- | Position on a photo where a mask should be placed MaskPosition { -- | Part of the face, relative to which the mask should be placed point :: MaskPoint, -- | Shift by X-axis measured in widths of the mask scaled to the face size, from left to right. (For example, -1.0 will place the mask just to the left of the default mask position) xShift :: Double, -- | Shift by Y-axis measured in heights of the mask scaled to the face size, from top to bottom. (For example, 1.0 will place the mask just below the default mask position) yShift :: Double, -- | Mask scaling coefficient. (For example, 2.0 means a doubled size) scale :: Double } deriving (Show, Eq, Generic) data PollOption = -- | Describes one answer option of a poll PollOption { -- | Option text, 1-100 characters text :: T, -- | Number of voters for this option, available only for closed or voted polls voterCount :: I32, -- | The percentage of votes for this option, 0-100 votePercentage :: I32, -- | True, if the option was chosen by the user isChosen :: Bool, -- | True, if the option is being chosen by a pending setPollAnswer request isBeingChosen :: Bool } deriving (Show, Eq, Generic) -- | Describes the type of a poll data PollType = -- | A regular poll PollTypeRegular { -- | True, if multiple answer options can be chosen simultaneously allowMultipleAnswers :: Bool } | -- | A poll in quiz mode, which has exactly one correct answer option and can be answered only once PollTypeQuiz { -- | 0-based identifier of the correct answer option; -1 for a yet unanswered poll correctOptionId :: I32, -- | Text that is shown when the user chooses an incorrect answer or taps on the lamp icon, 0-200 characters with at most 2 line feeds; empty for a yet unanswered poll explanation :: FormattedText } deriving (Show, Eq, Generic) data Animation = -- | Describes an animation file. The animation must be encoded in GIF or MPEG4 format Animation { -- | Duration of the animation, in seconds; as defined by the sender duration :: I32, -- | Width of the animation width :: I32, -- | Height of the animation height :: I32, -- | Original name of the file; as defined by the sender fileName :: T, -- | MIME type of the file, usually "image/gif" or "video/mp4" mimeType :: T, -- | True, if stickers were added to the animation. The list of corresponding sticker set can be received using getAttachedStickerSets hasStickers :: Bool, -- | Animation minithumbnail; may be null minithumbnail :: (Maybe) (Minithumbnail), -- | Animation thumbnail in JPEG or MPEG4 format; may be null thumbnail :: (Maybe) (Thumbnail), -- | File containing the animation animation :: File } deriving (Show, Eq, Generic) data Audio = -- | Describes an audio file. Audio is usually in MP3 or M4A format Audio { -- | Duration of the audio, in seconds; as defined by the sender duration :: I32, -- | Title of the audio; as defined by the sender title :: T, -- | Performer of the audio; as defined by the sender performer :: T, -- | Original name of the file; as defined by the sender fileName :: T, -- | The MIME type of the file; as defined by the sender mimeType :: T, -- | The minithumbnail of the album cover; may be null albumCoverMinithumbnail :: (Maybe) (Minithumbnail), -- | The thumbnail of the album cover in JPEG format; as defined by the sender. The full size thumbnail should be extracted from the downloaded file; may be null albumCoverThumbnail :: (Maybe) (Thumbnail), -- | File containing the audio audio :: File } deriving (Show, Eq, Generic) data Document = -- | Describes a document of any type Document { -- | Original name of the file; as defined by the sender fileName :: T, -- | MIME type of the file; as defined by the sender mimeType :: T, -- | Document minithumbnail; may be null minithumbnail :: (Maybe) (Minithumbnail), -- | Document thumbnail in JPEG or PNG format (PNG will be used only for background patterns); as defined by the sender; may be null thumbnail :: (Maybe) (Thumbnail), -- | File containing the document document :: File } deriving (Show, Eq, Generic) data Photo = -- | Describes a photo Photo { -- | True, if stickers were added to the photo. The list of corresponding sticker sets can be received using getAttachedStickerSets hasStickers :: Bool, -- | Photo minithumbnail; may be null minithumbnail :: (Maybe) (Minithumbnail), -- | Available variants of the photo, in different sizes sizes :: [PhotoSize] } deriving (Show, Eq, Generic) data Sticker = -- | Describes a sticker Sticker { -- | The identifier of the sticker set to which the sticker belongs; 0 if none setId :: I64, -- | Sticker width; as defined by the sender width :: I32, -- | Sticker height; as defined by the sender height :: I32, -- | Emoji corresponding to the sticker emoji :: T, -- | True, if the sticker is an animated sticker in TGS format isAnimated :: Bool, -- | True, if the sticker is a mask isMask :: Bool, -- | Position where the mask should be placed; may be null maskPosition :: (Maybe) (MaskPosition), -- | Sticker thumbnail in WEBP or JPEG format; may be null thumbnail :: (Maybe) (Thumbnail), -- | File containing the sticker sticker :: File } deriving (Show, Eq, Generic) data Video = -- | Describes a video file Video { -- | Duration of the video, in seconds; as defined by the sender duration :: I32, -- | Video width; as defined by the sender width :: I32, -- | Video height; as defined by the sender height :: I32, -- | Original name of the file; as defined by the sender fileName :: T, -- | MIME type of the file; as defined by the sender mimeType :: T, -- | True, if stickers were added to the video. The list of corresponding sticker sets can be received using getAttachedStickerSets hasStickers :: Bool, -- | True, if the video should be tried to be streamed supportsStreaming :: Bool, -- | Video minithumbnail; may be null minithumbnail :: (Maybe) (Minithumbnail), -- | Video thumbnail in JPEG or MPEG4 format; as defined by the sender; may be null thumbnail :: (Maybe) (Thumbnail), -- | File containing the video video :: File } deriving (Show, Eq, Generic) data VideoNote = -- | Describes a video note. The video must be equal in width and height, cropped to a circle, and stored in MPEG4 format VideoNote { -- | Duration of the video, in seconds; as defined by the sender duration :: I32, -- | Video width and height; as defined by the sender length :: I32, -- | Video minithumbnail; may be null minithumbnail :: (Maybe) (Minithumbnail), -- | Video thumbnail in JPEG format; as defined by the sender; may be null thumbnail :: (Maybe) (Thumbnail), -- | File containing the video video :: File } deriving (Show, Eq, Generic) data VoiceNote = -- | Describes a voice note. The voice note must be encoded with the Opus codec, and stored inside an OGG container. Voice notes can have only a single audio channel VoiceNote { -- | Duration of the voice note, in seconds; as defined by the sender duration :: I32, -- | A waveform representation of the voice note in 5-bit format waveform :: ByteString64, -- | MIME type of the file; as defined by the sender mimeType :: T, -- | File containing the voice note voice :: File } deriving (Show, Eq, Generic) data Contact = -- | Describes a user contact Contact { -- | Phone number of the user phoneNumber :: T, -- | First name of the user; 1-255 characters in length firstName :: T, -- | Last name of the user lastName :: T, -- | Additional data about the user in a form of vCard; 0-2048 bytes in length vcard :: T, -- | Identifier of the user, if known; otherwise 0 userId :: I32 } deriving (Show, Eq, Generic) data Location = -- | Describes a location on planet Earth Location { -- | Latitude of the location in degrees; as defined by the sender latitude :: Double, -- | Longitude of the location, in degrees; as defined by the sender longitude :: Double } deriving (Show, Eq, Generic) data Venue = -- | Describes a venue Venue { -- | Venue location; as defined by the sender location :: Location, -- | Venue name; as defined by the sender title :: T, -- | Venue address; as defined by the sender address :: T, -- | Provider of the venue database; as defined by the sender. Currently only "foursquare" needs to be supported provider :: T, -- | Identifier of the venue in the provider database; as defined by the sender id :: T, -- | Type of the venue in the provider database; as defined by the sender type_ :: T } deriving (Show, Eq, Generic) data Game = -- | Describes a game Game { -- | Game ID id :: I64, -- | Game short name. To share a game use the URL https://t.me/{bot_username}?game={game_short_name} shortName :: T, -- | Game title title :: T, -- | Game text, usually containing scoreboards for a game text :: FormattedText, -- | Describes a game description :: T, -- | Game photo photo :: Photo, -- | Game animation; may be null animation :: (Maybe) (Animation) } deriving (Show, Eq, Generic) data Poll = -- | Describes a poll Poll { -- | Unique poll identifier id :: I64, -- | Poll question, 1-255 characters question :: T, -- | List of poll answer options options :: [PollOption], -- | Total number of voters, participating in the poll totalVoterCount :: I32, -- | User identifiers of recent voters, if the poll is non-anonymous recentVoterUserIds :: [I32], -- | True, if the poll is anonymous isAnonymous :: Bool, -- | Type of the poll type_ :: PollType, -- | Amount of time the poll will be active after creation, in seconds openPeriod :: I32, -- | Point in time (Unix timestamp) when the poll will be automatically closed closeDate :: I32, -- | True, if the poll is closed isClosed :: Bool } deriving (Show, Eq, Generic) data ProfilePhoto = -- | Describes a user profile photo ProfilePhoto { -- | Photo identifier; 0 for an empty photo. Can be used to find a photo in a list of userProfilePhotos id :: I64, -- | A small (160x160) user profile photo. The file can be downloaded only before the photo is changed small :: File, -- | A big (640x640) user profile photo. The file can be downloaded only before the photo is changed big :: File } deriving (Show, Eq, Generic) data ChatPhoto = -- | Describes the photo of a chat ChatPhoto { -- | A small (160x160) chat photo. The file can be downloaded only before the photo is changed small :: File, -- | A big (640x640) chat photo. The file can be downloaded only before the photo is changed big :: File } deriving (Show, Eq, Generic) -- | Represents the type of a user. The following types are possible: regular users, deleted users and bots data UserType = -- | A regular user UserTypeRegular { } | -- | A deleted user or deleted bot. No information on the user besides the user identifier is available. It is not possible to perform any active actions on this type of user UserTypeDeleted { } | -- | A bot (see https://core.telegram.org/bots) UserTypeBot { -- | True, if the bot can be invited to basic group and supergroup chats canJoinGroups :: Bool, -- | True, if the bot can read all messages in basic group or supergroup chats and not just those addressed to the bot. In private and channel chats a bot can always read all messages canReadAllGroupMessages :: Bool, -- | True, if the bot supports inline queries isInline :: Bool, -- | Placeholder for inline queries (displayed on the client input field) inlineQueryPlaceholder :: T, -- | True, if the location of the user should be sent with every inline query to this bot needLocation :: Bool } | -- | No information on the user besides the user identifier is available, yet this user has not been deleted. This object is extremely rare and must be handled like a deleted user. It is not possible to perform any actions on users of this type UserTypeUnknown { } deriving (Show, Eq, Generic) data BotCommand = -- | Represents a command supported by a bot BotCommand { -- | Text of the bot command command :: T, -- | Represents a command supported by a bot description :: T } deriving (Show, Eq, Generic) data BotInfo = -- | Provides information about a bot and its supported commands BotInfo { -- | Provides information about a bot and its supported commands description :: T, -- | A list of commands supported by the bot commands :: [BotCommand] } deriving (Show, Eq, Generic) data ChatLocation = -- | Represents a location to which a chat is connected ChatLocation { -- | The location location :: Location, -- | Location address; 1-64 characters, as defined by the chat owner address :: T } deriving (Show, Eq, Generic) data User = -- | Represents a user User { -- | User identifier id :: I32, -- | First name of the user firstName :: T, -- | Last name of the user lastName :: T, -- | Username of the user username :: T, -- | Phone number of the user phoneNumber :: T, -- | Current online status of the user status :: UserStatus, -- | Profile photo of the user; may be null profilePhoto :: (Maybe) (ProfilePhoto), -- | The user is a contact of the current user isContact :: Bool, -- | The user is a contact of the current user and the current user is a contact of the user isMutualContact :: Bool, -- | True, if the user is verified isVerified :: Bool, -- | True, if the user is Telegram support account isSupport :: Bool, -- | If non-empty, it contains a human-readable description of the reason why access to this user must be restricted restrictionReason :: T, -- | True, if many users reported this user as a scam isScam :: Bool, -- | If false, the user is inaccessible, and the only information known about the user is inside this class. It can't be passed to any method except GetUser haveAccess :: Bool, -- | Type of the user type_ :: UserType, -- | IETF language tag of the user's language; only available to bots languageCode :: T } deriving (Show, Eq, Generic) data UserFullInfo = -- | Contains full information about a user (except the full list of profile photos) UserFullInfo { -- | True, if the user is blacklisted by the current user isBlocked :: Bool, -- | True, if the user can be called canBeCalled :: Bool, -- | True, if the user can't be called due to their privacy settings hasPrivateCalls :: Bool, -- | True, if the current user needs to explicitly allow to share their phone number with the user when the method addContact is used needPhoneNumberPrivacyException :: Bool, -- | A short user bio bio :: T, -- | For bots, the text that is included with the link when users share the bot shareText :: T, -- | Number of group chats where both the other user and the current user are a member; 0 for the current user groupInCommonCount :: I32, -- | If the user is a bot, information about the bot; may be null botInfo :: (Maybe) (BotInfo) } deriving (Show, Eq, Generic) data UserProfilePhoto = -- | Contains full information about a user profile photo UserProfilePhoto { -- | Unique user profile photo identifier id :: I64, -- | Point in time (Unix timestamp) when the photo has been added addedDate :: I32, -- | Available variants of the user photo, in different sizes sizes :: [PhotoSize] } deriving (Show, Eq, Generic) data UserProfilePhotos = -- | Contains part of the list of user photos UserProfilePhotos { -- | Total number of user profile photos totalCount :: I32, -- | A list of photos photos :: [UserProfilePhoto] } deriving (Show, Eq, Generic) data Users = -- | Represents a list of users Users { -- | Approximate total count of users found totalCount :: I32, -- | A list of user identifiers userIds :: [I32] } deriving (Show, Eq, Generic) data ChatAdministrator = -- | Contains information about a chat administrator ChatAdministrator { -- | User identifier of the administrator userId :: I32, -- | Custom title of the administrator customTitle :: T, -- | True, if the user is the owner of the chat isOwner :: Bool } deriving (Show, Eq, Generic) data ChatAdministrators = -- | Represents a list of chat administrators ChatAdministrators { -- | A list of chat administrators administrators :: [ChatAdministrator] } deriving (Show, Eq, Generic) data ChatPermissions = -- | Describes actions that a user is allowed to take in a chat ChatPermissions { -- | True, if the user can send text messages, contacts, locations, and venues canSendMessages :: Bool, -- | True, if the user can send audio files, documents, photos, videos, video notes, and voice notes. Implies can_send_messages permissions canSendMediaMessages :: Bool, -- | True, if the user can send polls. Implies can_send_messages permissions canSendPolls :: Bool, -- | True, if the user can send animations, games, and stickers and use inline bots. Implies can_send_messages permissions canSendOtherMessages :: Bool, -- | True, if the user may add a web page preview to their messages. Implies can_send_messages permissions canAddWebPagePreviews :: Bool, -- | True, if the user can change the chat title, photo, and other settings canChangeInfo :: Bool, -- | True, if the user can invite new users to the chat canInviteUsers :: Bool, -- | True, if the user can pin messages canPinMessages :: Bool } deriving (Show, Eq, Generic) -- | Provides information about the status of a member in a chat data ChatMemberStatus = -- | The user is the owner of a chat and has all the administrator privileges ChatMemberStatusCreator { -- | A custom title of the owner; 0-16 characters without emojis; applicable to supergroups only customTitle :: T, -- | True, if the user is a member of the chat isMember :: Bool } | -- | The user is a member of a chat and has some additional privileges. In basic groups, administrators can edit and delete messages sent by others, add new members, and ban unprivileged members. In supergroups and channels, there are more detailed options for administrator privileges ChatMemberStatusAdministrator { -- | A custom title of the administrator; 0-16 characters without emojis; applicable to supergroups only customTitle :: T, -- | True, if the current user can edit the administrator privileges for the called user canBeEdited :: Bool, -- | True, if the administrator can change the chat title, photo, and other settings canChangeInfo :: Bool, -- | True, if the administrator can create channel posts; applicable to channels only canPostMessages :: Bool, -- | True, if the administrator can edit messages of other users and pin messages; applicable to channels only canEditMessages :: Bool, -- | True, if the administrator can delete messages of other users canDeleteMessages :: Bool, -- | True, if the administrator can invite new users to the chat canInviteUsers :: Bool, -- | True, if the administrator can restrict, ban, or unban chat members canRestrictMembers :: Bool, -- | True, if the administrator can pin messages; applicable to groups only canPinMessages :: Bool, -- | True, if the administrator can add new administrators with a subset of their own privileges or demote administrators that were directly or indirectly promoted by them canPromoteMembers :: Bool } | -- | The user is a member of a chat, without any additional privileges or restrictions ChatMemberStatusMember { } | -- | The user is under certain restrictions in the chat. Not supported in basic groups and channels ChatMemberStatusRestricted { -- | True, if the user is a member of the chat isMember :: Bool, -- | Point in time (Unix timestamp) when restrictions will be lifted from the user; 0 if never. If the user is restricted for more than 366 days or for less than 30 seconds from the current time, the user is considered to be restricted forever restrictedUntilDate :: I32, -- | User permissions in the chat permissions :: ChatPermissions } | -- | The user is not a chat member ChatMemberStatusLeft { } | -- | The user was banned (and hence is not a member of the chat). Implies the user can't return to the chat or view messages ChatMemberStatusBanned { -- | Point in time (Unix timestamp) when the user will be unbanned; 0 if never. If the user is banned for more than 366 days or for less than 30 seconds from the current time, the user is considered to be banned forever bannedUntilDate :: I32 } deriving (Show, Eq, Generic) data ChatMember = -- | A user with information about joining/leaving a chat ChatMember { -- | User identifier of the chat member userId :: I32, -- | Identifier of a user that invited/promoted/banned this member in the chat; 0 if unknown inviterUserId :: I32, -- | Point in time (Unix timestamp) when the user joined a chat joinedChatDate :: I32, -- | Status of the member in the chat status :: ChatMemberStatus, -- | If the user is a bot, information about the bot; may be null. Can be null even for a bot if the bot is not a chat member botInfo :: (Maybe) (BotInfo) } deriving (Show, Eq, Generic) data ChatMembers = -- | Contains a list of chat members ChatMembers { -- | Approximate total count of chat members found totalCount :: I32, -- | A list of chat members members :: [ChatMember] } deriving (Show, Eq, Generic) -- | Specifies the kind of chat members to return in searchChatMembers data ChatMembersFilter = -- | Returns contacts of the user ChatMembersFilterContacts { } | -- | Returns the owner and administrators ChatMembersFilterAdministrators { } | -- | Returns all chat members, including restricted chat members ChatMembersFilterMembers { } | -- | Returns users under certain restrictions in the chat; can be used only by administrators in a supergroup ChatMembersFilterRestricted { } | -- | Returns users banned from the chat; can be used only by administrators in a supergroup or in a channel ChatMembersFilterBanned { } | -- | Returns bot members of the chat ChatMembersFilterBots { } deriving (Show, Eq, Generic) -- | Specifies the kind of chat members to return in getSupergroupMembers data SupergroupMembersFilter = -- | Returns recently active users in reverse chronological order SupergroupMembersFilterRecent { } | -- | Returns contacts of the user, which are members of the supergroup or channel SupergroupMembersFilterContacts { -- | Query to search for query :: T } | -- | Returns the owner and administrators SupergroupMembersFilterAdministrators { } | -- | Used to search for supergroup or channel members via a (string) query SupergroupMembersFilterSearch { -- | Query to search for query :: T } | -- | Returns restricted supergroup members; can be used only by administrators SupergroupMembersFilterRestricted { -- | Query to search for query :: T } | -- | Returns users banned from the supergroup or channel; can be used only by administrators SupergroupMembersFilterBanned { -- | Query to search for query :: T } | -- | Returns bot members of the supergroup or channel SupergroupMembersFilterBots { } deriving (Show, Eq, Generic) data BasicGroup = -- | Represents a basic group of 0-200 users (must be upgraded to a supergroup to accommodate more than 200 users) BasicGroup { -- | Group identifier id :: I32, -- | Number of members in the group memberCount :: I32, -- | Status of the current user in the group status :: ChatMemberStatus, -- | True, if the group is active isActive :: Bool, -- | Identifier of the supergroup to which this group was upgraded; 0 if none upgradedToSupergroupId :: I32 } deriving (Show, Eq, Generic) data BasicGroupFullInfo = -- | Contains full information about a basic group BasicGroupFullInfo { -- | Contains full information about a basic group description :: T, -- | User identifier of the creator of the group; 0 if unknown creatorUserId :: I32, -- | Group members members :: [ChatMember], -- | Invite link for this group; available only after it has been generated at least once and only for the group creator inviteLink :: T } deriving (Show, Eq, Generic) data Supergroup = -- | Represents a supergroup or channel with zero or more members (subscribers in the case of channels). From the point of view of the system, a channel is a special kind of a supergroup: only administrators can post and see the list of members, and posts from all administrators use the name and photo of the channel instead of individual names and profile photos. Unlike supergroups, channels can have an unlimited number of subscribers Supergroup { -- | Supergroup or channel identifier id :: I32, -- | Username of the supergroup or channel; empty for private supergroups or channels username :: T, -- | Point in time (Unix timestamp) when the current user joined, or the point in time when the supergroup or channel was created, in case the user is not a member date :: I32, -- | Status of the current user in the supergroup or channel; custom title will be always empty status :: ChatMemberStatus, -- | Number of members in the supergroup or channel; 0 if unknown. Currently it is guaranteed to be known only if the supergroup or channel was found through SearchPublicChats memberCount :: I32, -- | True, if the channel has a discussion group, or the supergroup is the designated discussion group for a channel hasLinkedChat :: Bool, -- | True, if the supergroup is connected to a location, i.e. the supergroup is a location-based supergroup hasLocation :: Bool, -- | True, if messages sent to the channel should contain information about the sender. This field is only applicable to channels signMessages :: Bool, -- | True, if the slow mode is enabled in the supergroup isSlowModeEnabled :: Bool, -- | True, if the supergroup is a channel isChannel :: Bool, -- | True, if the supergroup or channel is verified isVerified :: Bool, -- | If non-empty, contains a human-readable description of the reason why access to this supergroup or channel must be restricted restrictionReason :: T, -- | True, if many users reported this supergroup as a scam isScam :: Bool } deriving (Show, Eq, Generic) data SupergroupFullInfo = -- | Contains full information about a supergroup or channel SupergroupFullInfo { -- | Contains full information about a supergroup or channel description :: T, -- | Number of members in the supergroup or channel; 0 if unknown memberCount :: I32, -- | Number of privileged users in the supergroup or channel; 0 if unknown administratorCount :: I32, -- | Number of restricted users in the supergroup; 0 if unknown restrictedCount :: I32, -- | Number of users banned from chat; 0 if unknown bannedCount :: I32, -- | Chat identifier of a discussion group for the channel, or a channel, for which the supergroup is the designated discussion group; 0 if none or unknown linkedChatId :: I53, -- | Delay between consecutive sent messages for non-administrator supergroup members, in seconds slowModeDelay :: I32, -- | Time left before next message can be sent in the supergroup, in seconds. An updateSupergroupFullInfo update is not triggered when value of this field changes, but both new and old values are non-zero slowModeDelayExpiresIn :: Double, -- | True, if members of the chat can be retrieved canGetMembers :: Bool, -- | True, if the chat username can be changed canSetUsername :: Bool, -- | True, if the supergroup sticker set can be changed canSetStickerSet :: Bool, -- | True, if the supergroup location can be changed canSetLocation :: Bool, -- | True, if the channel statistics is available canViewStatistics :: Bool, -- | True, if new chat members will have access to old messages. In public or discussion groups and both public and private channels, old messages are always available, so this option affects only private supergroups without a linked chat. The value of this field is only available for chat administrators isAllHistoryAvailable :: Bool, -- | Identifier of the supergroup sticker set; 0 if none stickerSetId :: I64, -- | Location to which the supergroup is connected; may be null location :: (Maybe) (ChatLocation), -- | Invite link for this chat inviteLink :: T, -- | Identifier of the basic group from which supergroup was upgraded; 0 if none upgradedFromBasicGroupId :: I32, -- | Identifier of the last message in the basic group from which supergroup was upgraded; 0 if none upgradedFromMaxMessageId :: I53 } deriving (Show, Eq, Generic) -- | Describes the current secret chat state data SecretChatState = -- | The secret chat is not yet created; waiting for the other user to get online SecretChatStatePending { } | -- | The secret chat is ready to use SecretChatStateReady { } | -- | The secret chat is closed SecretChatStateClosed { } deriving (Show, Eq, Generic) data SecretChat = -- | Represents a secret chat SecretChat { -- | Secret chat identifier id :: I32, -- | Identifier of the chat partner userId :: I32, -- | State of the secret chat state :: SecretChatState, -- | True, if the chat was created by the current user; otherwise false isOutbound :: Bool, -- | Current message Time To Live setting (self-destruct timer) for the chat, in seconds ttl :: I32, -- | Hash of the currently used key for comparison with the hash of the chat partner's key. This is a string of 36 little-endian bytes, which must be split into groups of 2 bits, each denoting a pixel of one of 4 colors FFFFFF, D5E6F3, 2D5775, and 2F99C9. keyHash :: ByteString64, -- | Secret chat layer; determines features supported by the other client. Video notes are supported if the layer >= 66; nested text entities and underline and strikethrough entities are supported if the layer >= 101 layer :: I32 } deriving (Show, Eq, Generic) -- | Contains information about the origin of a forwarded message data MessageForwardOrigin = -- | The message was originally written by a known user MessageForwardOriginUser { -- | Identifier of the user that originally sent the message senderUserId :: I32 } | -- | The message was originally written by a user, which is hidden by their privacy settings MessageForwardOriginHiddenUser { -- | Name of the sender senderName :: T } | -- | The message was originally a post in a channel MessageForwardOriginChannel { -- | Identifier of the chat from which the message was originally forwarded chatId :: I53, -- | Message identifier of the original message; 0 if unknown messageId :: I53, -- | Original post author signature authorSignature :: T } deriving (Show, Eq, Generic) data MessageForwardInfo = -- | Contains information about a forwarded message MessageForwardInfo { -- | Origin of a forwarded message origin :: MessageForwardOrigin, -- | Point in time (Unix timestamp) when the message was originally sent date :: I32, -- | The type of a public service announcement for the forwarded message publicServiceAnnouncementType :: T, -- | For messages forwarded to the chat with the current user (Saved Messages) or to the channel's discussion group, the identifier of the chat from which the message was forwarded last time; 0 if unknown fromChatId :: I53, -- | For messages forwarded to the chat with the current user (Saved Messages) or to the channel's discussion group, the identifier of the original message from which the new message was forwarded last time; 0 if unknown fromMessageId :: I53 } deriving (Show, Eq, Generic) -- | Contains information about the sending state of the message data MessageSendingState = -- | The message is being sent now, but has not yet been delivered to the server MessageSendingStatePending { } | -- | The message failed to be sent MessageSendingStateFailed { -- | An error code; 0 if unknown errorCode :: I32, -- | Error message errorMessage :: T, -- | True, if the message can be re-sent canRetry :: Bool, -- | Time left before the message can be re-sent, in seconds. No update is sent when this field changes retryAfter :: Double } deriving (Show, Eq, Generic) data Message = -- | Describes a message Message { -- | Message identifier, unique for the chat to which the message belongs id :: I53, -- | Identifier of the user who sent the message; 0 if unknown. Currently, it is unknown for channel posts and for channel posts automatically forwarded to discussion group senderUserId :: I32, -- | Chat identifier chatId :: I53, -- | Information about the sending state of the message; may be null sendingState :: (Maybe) (MessageSendingState), -- | Information about the scheduling state of the message; may be null schedulingState :: (Maybe) (MessageSchedulingState), -- | True, if the message is outgoing isOutgoing :: Bool, -- | True, if the message can be edited. For live location and poll messages this fields shows whether editMessageLiveLocation or stopPoll can be used with this message by the client canBeEdited :: Bool, -- | True, if the message can be forwarded canBeForwarded :: Bool, -- | True, if the message can be deleted only for the current user while other users will continue to see it canBeDeletedOnlyForSelf :: Bool, -- | True, if the message can be deleted for all users canBeDeletedForAllUsers :: Bool, -- | True, if the message is a channel post. All messages to channels are channel posts, all other messages are not channel posts isChannelPost :: Bool, -- | True, if the message contains an unread mention for the current user containsUnreadMention :: Bool, -- | Point in time (Unix timestamp) when the message was sent date :: I32, -- | Point in time (Unix timestamp) when the message was last edited editDate :: I32, -- | Information about the initial message sender; may be null forwardInfo :: (Maybe) (MessageForwardInfo), -- | If non-zero, the identifier of the message this message is replying to; can be the identifier of a deleted message replyToMessageId :: I53, -- | For self-destructing messages, the message's TTL (Time To Live), in seconds; 0 if none. TDLib will send updateDeleteMessages or updateMessageContent once the TTL expires ttl :: I32, -- | Time left before the message expires, in seconds ttlExpiresIn :: Double, -- | If non-zero, the user identifier of the bot through which this message was sent viaBotUserId :: I32, -- | For channel posts, optional author signature authorSignature :: T, -- | Number of times this message was viewed views :: I32, -- | Unique identifier of an album this message belongs to. Only photos and videos can be grouped together in albums mediaAlbumId :: I64, -- | If non-empty, contains a human-readable description of the reason why access to this message must be restricted restrictionReason :: T, -- | Content of the message content :: MessageContent, -- | Reply markup for the message; may be null replyMarkup :: (Maybe) (ReplyMarkup) } deriving (Show, Eq, Generic) data Messages = -- | Contains a list of messages Messages { -- | Approximate total count of messages found totalCount :: I32, -- | List of messages; messages may be null messages :: [(Maybe) (Message)] } deriving (Show, Eq, Generic) data FoundMessages = -- | Contains a list of messages found by a search FoundMessages { -- | List of messages messages :: [Message], -- | Value to pass as from_search_id to get more results nextFromSearchId :: I64 } deriving (Show, Eq, Generic) -- | Describes the types of chats to which notification settings are applied data NotificationSettingsScope = -- | Notification settings applied to all private and secret chats when the corresponding chat setting has a default value NotificationSettingsScopePrivateChats { } | -- | Notification settings applied to all basic groups and supergroups when the corresponding chat setting has a default value NotificationSettingsScopeGroupChats { } | -- | Notification settings applied to all channels when the corresponding chat setting has a default value NotificationSettingsScopeChannelChats { } deriving (Show, Eq, Generic) data ChatNotificationSettings = -- | Contains information about notification settings for a chat ChatNotificationSettings { -- | If true, mute_for is ignored and the value for the relevant type of chat is used instead useDefaultMuteFor :: Bool, -- | Time left before notifications will be unmuted, in seconds muteFor :: I32, -- | If true, sound is ignored and the value for the relevant type of chat is used instead useDefaultSound :: Bool, -- | The name of an audio file to be used for notification sounds; only applies to iOS applications sound :: T, -- | If true, show_preview is ignored and the value for the relevant type of chat is used instead useDefaultShowPreview :: Bool, -- | True, if message content should be displayed in notifications showPreview :: Bool, -- | If true, disable_pinned_message_notifications is ignored and the value for the relevant type of chat is used instead useDefaultDisablePinnedMessageNotifications :: Bool, -- | If true, notifications for incoming pinned messages will be created as for an ordinary unread message disablePinnedMessageNotifications :: Bool, -- | If true, disable_mention_notifications is ignored and the value for the relevant type of chat is used instead useDefaultDisableMentionNotifications :: Bool, -- | If true, notifications for messages with mentions will be created as for an ordinary unread message disableMentionNotifications :: Bool } deriving (Show, Eq, Generic) data ScopeNotificationSettings = -- | Contains information about notification settings for several chats ScopeNotificationSettings { -- | Time left before notifications will be unmuted, in seconds muteFor :: I32, -- | The name of an audio file to be used for notification sounds; only applies to iOS applications sound :: T, -- | True, if message content should be displayed in notifications showPreview :: Bool, -- | True, if notifications for incoming pinned messages will be created as for an ordinary unread message disablePinnedMessageNotifications :: Bool, -- | True, if notifications for messages with mentions will be created as for an ordinary unread message disableMentionNotifications :: Bool } deriving (Show, Eq, Generic) data DraftMessage = -- | Contains information about a message draft DraftMessage { -- | Identifier of the message to reply to; 0 if none replyToMessageId :: I53, -- | Point in time (Unix timestamp) when the draft was created date :: I32, -- | Content of the message draft; this should always be of type inputMessageText inputMessageText :: InputMessageContent } deriving (Show, Eq, Generic) -- | Describes the type of a chat data ChatType = -- | An ordinary chat with a user ChatTypePrivate { -- | User identifier userId :: I32 } | -- | A basic group (i.e., a chat with 0-200 other users) ChatTypeBasicGroup { -- | Basic group identifier basicGroupId :: I32 } | -- | A supergroup (i.e. a chat with up to GetOption("supergroup_max_size") other users), or channel (with unlimited members) ChatTypeSupergroup { -- | Supergroup or channel identifier supergroupId :: I32, -- | True, if the supergroup is a channel isChannel :: Bool } | -- | A secret chat with a user ChatTypeSecret { -- | Secret chat identifier secretChatId :: I32, -- | User identifier of the secret chat peer userId :: I32 } deriving (Show, Eq, Generic) data ChatFilter = -- | Represents a filter of user chats ChatFilter { -- | The title of the filter; 1-12 characters without line feeds title :: T, -- | The icon name for short filter representation. If non-empty, must be one of "All", "Unread", "Unmuted", "Bots", "Channels", "Groups", "Private", "Custom", "Setup", "Cat", "Crown", "Favorite", "Flower", "Game", "Home", "Love", "Mask", "Party", "Sport", "Study", "Trade", "Travel", "Work". iconName :: T, -- | The chat identifiers of pinned chats in the filtered chat list pinnedChatIds :: [I53], -- | The chat identifiers of always included chats in the filtered chat list includedChatIds :: [I53], -- | The chat identifiers of always excluded chats in the filtered chat list excludedChatIds :: [I53], -- | True, if the muted chats need to be excluded excludeMuted :: Bool, -- | True, if read chats need to be excluded excludeRead :: Bool, -- | True, if archived chats need to be excluded excludeArchived :: Bool, -- | True, if contacts need to be included includeContacts :: Bool, -- | True, if non-contact users need to be included includeNonContacts :: Bool, -- | True, if bots need to be included includeBots :: Bool, -- | True, if basic groups and supergroups need to be included includeGroups :: Bool, -- | True, if channels need to be included includeChannels :: Bool } deriving (Show, Eq, Generic) data ChatFilterInfo = -- | Contains basic information about a chat filter ChatFilterInfo { -- | Unique chat filter identifier id :: I32, -- | The title of the filter; 1-12 characters without line feeds title :: T, -- | The icon name for short filter representation. One of "All", "Unread", "Unmuted", "Bots", "Channels", "Groups", "Private", "Custom", "Setup", "Cat", "Crown", "Favorite", "Flower", "Game", "Home", "Love", "Mask", "Party", "Sport", "Study", "Trade", "Travel", "Work" iconName :: T } deriving (Show, Eq, Generic) data RecommendedChatFilter = -- | Describes a recommended chat filter RecommendedChatFilter { -- | The chat filter filter :: ChatFilter, -- | Describes a recommended chat filter description :: T } deriving (Show, Eq, Generic) data RecommendedChatFilters = -- | Contains a list of recommended chat filters RecommendedChatFilters { -- | List of recommended chat filters chatFilters :: [RecommendedChatFilter] } deriving (Show, Eq, Generic) -- | Describes a list of chats data ChatList = -- | A main list of chats ChatListMain { } | -- | A list of chats usually located at the top of the main chat list. Unmuted chats are automatically moved from the Archive to the Main chat list when a new message arrives ChatListArchive { } | -- | A list of chats belonging to a chat filter ChatListFilter { -- | Chat filter identifier chatFilterId :: I32 } deriving (Show, Eq, Generic) data ChatLists = -- | Contains a list of chat lists ChatLists { -- | List of chat lists chatLists :: [ChatList] } deriving (Show, Eq, Generic) -- | Describes a reason why an external chat is shown in a chat list data ChatSource = -- | The chat is sponsored by the user's MTProxy server ChatSourceMtprotoProxy { } | -- | The chat contains a public service announcement ChatSourcePublicServiceAnnouncement { -- | The type of the announcement type_ :: T, -- | The text of the announcement text :: T } deriving (Show, Eq, Generic) data ChatPosition = -- | Describes a position of a chat in a chat list ChatPosition { -- | The chat list list :: ChatList, -- | A parameter used to determine order of the chat in the chat list. Chats must be sorted by the pair (order, chat.id) in descending order order :: I64, -- | True, if the chat is pinned in the chat list isPinned :: Bool, -- | Source of the chat in the chat list; may be null source :: (Maybe) (ChatSource) } deriving (Show, Eq, Generic) data Chat = -- | A chat. (Can be a private chat, basic group, supergroup, or secret chat) Chat { -- | Chat unique identifier id :: I53, -- | Type of the chat type_ :: ChatType, -- | Chat title title :: T, -- | Chat photo; may be null photo :: (Maybe) (ChatPhoto), -- | Actions that non-administrator chat members are allowed to take in the chat permissions :: ChatPermissions, -- | Last message in the chat; may be null lastMessage :: (Maybe) (Message), -- | Positions of the chat in chat lists positions :: [ChatPosition], -- | True, if the chat is marked as unread isMarkedAsUnread :: Bool, -- | True, if the chat has scheduled messages hasScheduledMessages :: Bool, -- | True, if the chat messages can be deleted only for the current user while other users will continue to see the messages canBeDeletedOnlyForSelf :: Bool, -- | True, if the chat messages can be deleted for all users canBeDeletedForAllUsers :: Bool, -- | True, if the chat can be reported to Telegram moderators through reportChat canBeReported :: Bool, -- | Default value of the disable_notification parameter, used when a message is sent to the chat defaultDisableNotification :: Bool, -- | Number of unread messages in the chat unreadCount :: I32, -- | Identifier of the last read incoming message lastReadInboxMessageId :: I53, -- | Identifier of the last read outgoing message lastReadOutboxMessageId :: I53, -- | Number of unread messages with a mention/reply in the chat unreadMentionCount :: I32, -- | Notification settings for this chat notificationSettings :: ChatNotificationSettings, -- | Describes actions which should be possible to do through a chat action bar; may be null actionBar :: (Maybe) (ChatActionBar), -- | Identifier of the pinned message in the chat; 0 if none pinnedMessageId :: I53, -- | Identifier of the message from which reply markup needs to be used; 0 if there is no default custom reply markup in the chat replyMarkupMessageId :: I53, -- | A draft of a message in the chat; may be null draftMessage :: (Maybe) (DraftMessage), -- | Contains client-specific data associated with the chat. (For example, the chat scroll position or local chat notification settings can be stored here.) Persistent if the message database is used clientData :: T } deriving (Show, Eq, Generic) data Chats = -- | Represents a list of chats Chats { -- | List of chat identifiers chatIds :: [I53] } deriving (Show, Eq, Generic) data ChatNearby = -- | Describes a chat located nearby ChatNearby { -- | Chat identifier chatId :: I53, -- | Distance to the chat location in meters distance :: I32 } deriving (Show, Eq, Generic) data ChatsNearby = -- | Represents a list of chats located nearby ChatsNearby { -- | List of users nearby usersNearby :: [ChatNearby], -- | List of location-based supergroups nearby supergroupsNearby :: [ChatNearby] } deriving (Show, Eq, Generic) data ChatInviteLink = -- | Contains a chat invite link ChatInviteLink { -- | Chat invite link inviteLink :: T } deriving (Show, Eq, Generic) data ChatInviteLinkInfo = -- | Contains information about a chat invite link ChatInviteLinkInfo { -- | Chat identifier of the invite link; 0 if the user is not a member of this chat chatId :: I53, -- | Contains information about the type of the chat type_ :: ChatType, -- | Title of the chat title :: T, -- | Chat photo; may be null photo :: (Maybe) (ChatPhoto), -- | Number of members in the chat memberCount :: I32, -- | User identifiers of some chat members that may be known to the current user memberUserIds :: [I32], -- | True, if the chat is a public supergroup or channel, i.e. it has a username or it is a location-based supergroup isPublic :: Bool } deriving (Show, Eq, Generic) -- | Describes a type of public chats data PublicChatType = -- | The chat is public, because it has username PublicChatTypeHasUsername { } | -- | The chat is public, because it is a location-based supergroup PublicChatTypeIsLocationBased { } deriving (Show, Eq, Generic) -- | Describes actions which should be possible to do through a chat action bar data ChatActionBar = -- | The chat can be reported as spam using the method reportChat with the reason chatReportReasonSpam ChatActionBarReportSpam { } | -- | The chat is a location-based supergroup, which can be reported as having unrelated location using the method reportChat with the reason chatReportReasonUnrelatedLocation ChatActionBarReportUnrelatedLocation { } | -- | The chat is a private or secret chat, which can be reported using the method reportChat, or the other user can be added to the contact list using the method addContact, or the other user can be blocked using the method blockUser ChatActionBarReportAddBlock { } | -- | The chat is a private or secret chat and the other user can be added to the contact list using the method addContact ChatActionBarAddContact { } | -- | The chat is a private or secret chat with a mutual contact and the user's phone number can be shared with the other user using the method sharePhoneNumber ChatActionBarSharePhoneNumber { } deriving (Show, Eq, Generic) -- | Describes a keyboard button type data KeyboardButtonType = -- | A simple button, with text that should be sent when the button is pressed KeyboardButtonTypeText { } | -- | A button that sends the user's phone number when pressed; available only in private chats KeyboardButtonTypeRequestPhoneNumber { } | -- | A button that sends the user's location when pressed; available only in private chats KeyboardButtonTypeRequestLocation { } | -- | A button that allows the user to create and send a poll when pressed; available only in private chats KeyboardButtonTypeRequestPoll { -- | If true, only regular polls must be allowed to create forceRegular :: Bool, -- | If true, only polls in quiz mode must be allowed to create forceQuiz :: Bool } deriving (Show, Eq, Generic) data KeyboardButton = -- | Represents a single button in a bot keyboard KeyboardButton { -- | Text of the button text :: T, -- | Type of the button type_ :: KeyboardButtonType } deriving (Show, Eq, Generic) -- | Describes the type of an inline keyboard button data InlineKeyboardButtonType = -- | A button that opens a specified URL InlineKeyboardButtonTypeUrl { -- | HTTP or tg:// URL to open url :: T } | -- | A button that opens a specified URL and automatically logs in in current user if they allowed to do that InlineKeyboardButtonTypeLoginUrl { -- | An HTTP URL to open url :: T, -- | Unique button identifier id :: I32, -- | If non-empty, new text of the button in forwarded messages forwardText :: T } | -- | A button that sends a special callback query to a bot InlineKeyboardButtonTypeCallback { -- | Data to be sent to the bot via a callback query data_ :: ByteString64 } | -- | A button with a game that sends a special callback query to a bot. This button must be in the first column and row of the keyboard and can be attached only to a message with content of the type messageGame InlineKeyboardButtonTypeCallbackGame { } | -- | A button that forces an inline query to the bot to be inserted in the input field InlineKeyboardButtonTypeSwitchInline { -- | Inline query to be sent to the bot query :: T, -- | True, if the inline query should be sent from the current chat inCurrentChat :: Bool } | -- | A button to buy something. This button must be in the first column and row of the keyboard and can be attached only to a message with content of the type messageInvoice InlineKeyboardButtonTypeBuy { } deriving (Show, Eq, Generic) data InlineKeyboardButton = -- | Represents a single button in an inline keyboard InlineKeyboardButton { -- | Text of the button text :: T, -- | Type of the button type_ :: InlineKeyboardButtonType } deriving (Show, Eq, Generic) -- | Contains a description of a custom keyboard and actions that can be done with it to quickly reply to bots data ReplyMarkup = -- | Instructs clients to remove the keyboard once this message has been received. This kind of keyboard can't be received in an incoming message; instead, UpdateChatReplyMarkup with message_id == 0 will be sent ReplyMarkupRemoveKeyboard { -- | True, if the keyboard is removed only for the mentioned users or the target user of a reply isPersonal :: Bool } | -- | Instructs clients to force a reply to this message ReplyMarkupForceReply { -- | True, if a forced reply must automatically be shown to the current user. For outgoing messages, specify true to show the forced reply only for the mentioned users and for the target user of a reply isPersonal :: Bool } | -- | Contains a custom keyboard layout to quickly reply to bots ReplyMarkupShowKeyboard { -- | A list of rows of bot keyboard buttons rows_2 :: [[KeyboardButton]], -- | True, if the client needs to resize the keyboard vertically resizeKeyboard :: Bool, -- | True, if the client needs to hide the keyboard after use oneTime :: Bool, -- | True, if the keyboard must automatically be shown to the current user. For outgoing messages, specify true to show the keyboard only for the mentioned users and for the target user of a reply isPersonal :: Bool } | -- | Contains an inline keyboard layout ReplyMarkupInlineKeyboard { -- | A list of rows of inline keyboard buttons rows :: [[InlineKeyboardButton]] } deriving (Show, Eq, Generic) -- | Contains information about an inline button of type inlineKeyboardButtonTypeLoginUrl data LoginUrlInfo = -- | An HTTP url needs to be open LoginUrlInfoOpen { -- | The URL to open url :: T, -- | True, if there is no need to show an ordinary open URL confirm skipConfirm :: Bool } | -- | An authorization confirmation dialog needs to be shown to the user LoginUrlInfoRequestConfirmation { -- | An HTTP URL to be opened url :: T, -- | A domain of the URL domain :: T, -- | User identifier of a bot linked with the website botUserId :: I32, -- | True, if the user needs to be requested to give the permission to the bot to send them messages requestWriteAccess :: Bool } deriving (Show, Eq, Generic) -- | Describes a text object inside an instant-view web page data RichText = -- | A plain text RichTextPlain { -- | Text text_2 :: T } | -- | A bold rich text RichTextBold { -- | Text text :: RichText } | -- | An italicized rich text RichTextItalic { -- | Text text :: RichText } | -- | An underlined rich text RichTextUnderline { -- | Text text :: RichText } | -- | A strikethrough rich text RichTextStrikethrough { -- | Text text :: RichText } | -- | A fixed-width rich text RichTextFixed { -- | Text text :: RichText } | -- | A rich text URL link RichTextUrl { -- | Text text :: RichText, -- | URL url :: T, -- | True, if the URL has cached instant view server-side isCached :: Bool } | -- | A rich text email link RichTextEmailAddress { -- | Text text :: RichText, -- | Email address emailAddress :: T } | -- | A subscript rich text RichTextSubscript { -- | Text text :: RichText } | -- | A superscript rich text RichTextSuperscript { -- | Text text :: RichText } | -- | A marked rich text RichTextMarked { -- | Text text :: RichText } | -- | A rich text phone number RichTextPhoneNumber { -- | Text text :: RichText, -- | Phone number phoneNumber :: T } | -- | A small image inside the text RichTextIcon { -- | The image represented as a document. The image can be in GIF, JPEG or PNG format document :: Document, -- | Width of a bounding box in which the image should be shown; 0 if unknown width :: I32, -- | Height of a bounding box in which the image should be shown; 0 if unknown height :: I32 } | -- | A rich text reference of a text on the same web page RichTextReference { -- | The text text :: RichText, -- | The text to show on click referenceText :: RichText, -- | An HTTP URL, opening the reference url :: T } | -- | An anchor RichTextAnchor { -- | Anchor name name :: T } | -- | A link to an anchor on the same web page RichTextAnchorLink { -- | The link text text :: RichText, -- | The anchor name. If the name is empty, the link should bring back to top name :: T, -- | An HTTP URL, opening the anchor url :: T } | -- | A concatenation of rich texts RichTexts { -- | Texts texts :: [RichText] } deriving (Show, Eq, Generic) data PageBlockCaption = -- | Contains a caption of an instant view web page block, consisting of a text and a trailing credit PageBlockCaption { -- | Content of the caption text :: RichText, -- | Block credit (like HTML tag ) credit :: RichText } deriving (Show, Eq, Generic) data PageBlockListItem = -- | Describes an item of a list page block PageBlockListItem { -- | Item label label :: T, -- | Item blocks pageBlocks :: [PageBlock] } deriving (Show, Eq, Generic) -- | Describes a horizontal alignment of a table cell content data PageBlockHorizontalAlignment = -- | The content should be left-aligned PageBlockHorizontalAlignmentLeft { } | -- | The content should be center-aligned PageBlockHorizontalAlignmentCenter { } | -- | The content should be right-aligned PageBlockHorizontalAlignmentRight { } deriving (Show, Eq, Generic) -- | Describes a Vertical alignment of a table cell content data PageBlockVerticalAlignment = -- | The content should be top-aligned PageBlockVerticalAlignmentTop { } | -- | The content should be middle-aligned PageBlockVerticalAlignmentMiddle { } | -- | The content should be bottom-aligned PageBlockVerticalAlignmentBottom { } deriving (Show, Eq, Generic) data PageBlockTableCell = -- | Represents a cell of a table PageBlockTableCell { -- | Cell text; may be null. If the text is null, then the cell should be invisible text :: (Maybe) (RichText), -- | True, if it is a header cell isHeader :: Bool, -- | The number of columns the cell should span colspan :: I32, -- | The number of rows the cell should span rowspan :: I32, -- | Horizontal cell content alignment align :: PageBlockHorizontalAlignment, -- | Vertical cell content alignment valign :: PageBlockVerticalAlignment } deriving (Show, Eq, Generic) data PageBlockRelatedArticle = -- | Contains information about a related article PageBlockRelatedArticle { -- | Related article URL url :: T, -- | Article title; may be empty title :: T, -- | Contains information about a related article description :: T, -- | Article photo; may be null photo :: (Maybe) (Photo), -- | Article author; may be empty author :: T, -- | Point in time (Unix timestamp) when the article was published; 0 if unknown publishDate :: I32 } deriving (Show, Eq, Generic) -- | Describes a block of an instant view web page data PageBlock = -- | The title of a page PageBlockTitle { -- | Title title_2 :: RichText } | -- | The subtitle of a page PageBlockSubtitle { -- | Subtitle subtitle :: RichText } | -- | The author and publishing date of a page PageBlockAuthorDate { -- | Author author_2 :: RichText, -- | Point in time (Unix timestamp) when the article was published; 0 if unknown publishDate :: I32 } | -- | A header PageBlockHeader { -- | Header header :: RichText } | -- | A subheader PageBlockSubheader { -- | Subheader subheader :: RichText } | -- | A kicker PageBlockKicker { -- | Kicker kicker :: RichText } | -- | A text paragraph PageBlockParagraph { -- | Paragraph text text :: RichText } | -- | A preformatted text paragraph PageBlockPreformatted { -- | Paragraph text text :: RichText, -- | Programming language for which the text should be formatted language :: T } | -- | The footer of a page PageBlockFooter { -- | Footer footer :: RichText } | -- | An empty block separating a page PageBlockDivider { } | -- | An invisible anchor on a page, which can be used in a URL to open the page from the specified anchor PageBlockAnchor { -- | Name of the anchor name :: T } | -- | A list of data blocks PageBlockList { -- | The items of the list items :: [PageBlockListItem] } | -- | A block quote PageBlockBlockQuote { -- | Quote text text :: RichText, -- | Quote credit credit :: RichText } | -- | A pull quote PageBlockPullQuote { -- | Quote text text :: RichText, -- | Quote credit credit :: RichText } | -- | An animation PageBlockAnimation { -- | Animation file; may be null animation :: (Maybe) (Animation), -- | Animation caption caption :: PageBlockCaption, -- | True, if the animation should be played automatically needAutoplay :: Bool } | -- | An audio file PageBlockAudio { -- | Audio file; may be null audio :: (Maybe) (Audio), -- | Audio file caption caption :: PageBlockCaption } | -- | A photo PageBlockPhoto { -- | Photo file; may be null photo_2 :: (Maybe) (Photo), -- | Photo caption caption :: PageBlockCaption, -- | URL that needs to be opened when the photo is clicked url :: T } | -- | A video PageBlockVideo { -- | Video file; may be null video :: (Maybe) (Video), -- | Video caption caption :: PageBlockCaption, -- | True, if the video should be played automatically needAutoplay :: Bool, -- | True, if the video should be looped isLooped :: Bool } | -- | A voice note PageBlockVoiceNote { -- | Voice note; may be null voiceNote :: (Maybe) (VoiceNote), -- | Voice note caption caption :: PageBlockCaption } | -- | A page cover PageBlockCover { -- | Cover cover :: PageBlock } | -- | An embedded web page PageBlockEmbedded { -- | Web page URL, if available url :: T, -- | HTML-markup of the embedded page html :: T, -- | Poster photo, if available; may be null posterPhoto :: (Maybe) (Photo), -- | Block width; 0 if unknown width :: I32, -- | Block height; 0 if unknown height :: I32, -- | Block caption caption :: PageBlockCaption, -- | True, if the block should be full width isFullWidth :: Bool, -- | True, if scrolling should be allowed allowScrolling :: Bool } | -- | An embedded post PageBlockEmbeddedPost { -- | Web page URL url :: T, -- | Post author author :: T, -- | Post author photo; may be null authorPhoto :: (Maybe) (Photo), -- | Point in time (Unix timestamp) when the post was created; 0 if unknown date :: I32, -- | Post content pageBlocks :: [PageBlock], -- | Post caption caption :: PageBlockCaption } | -- | A collage PageBlockCollage { -- | Collage item contents pageBlocks :: [PageBlock], -- | Block caption caption :: PageBlockCaption } | -- | A slideshow PageBlockSlideshow { -- | Slideshow item contents pageBlocks :: [PageBlock], -- | Block caption caption :: PageBlockCaption } | -- | A link to a chat PageBlockChatLink { -- | Chat title title :: T, -- | Chat photo; may be null photo :: (Maybe) (ChatPhoto), -- | Chat username, by which all other information about the chat should be resolved username :: T } | -- | A table PageBlockTable { -- | Table caption caption_2 :: RichText, -- | Table cells cells :: [[PageBlockTableCell]], -- | True, if the table is bordered isBordered :: Bool, -- | True, if the table is striped isStriped :: Bool } | -- | A collapsible block PageBlockDetails { -- | Always visible heading for the block header :: RichText, -- | Block contents pageBlocks :: [PageBlock], -- | True, if the block is open by default isOpen :: Bool } | -- | Related articles PageBlockRelatedArticles { -- | Block header header :: RichText, -- | List of related articles articles :: [PageBlockRelatedArticle] } | -- | A map PageBlockMap { -- | Location of the map center location :: Location, -- | Map zoom level zoom :: I32, -- | Map width width :: I32, -- | Map height height :: I32, -- | Block caption caption :: PageBlockCaption } deriving (Show, Eq, Generic) data WebPageInstantView = -- | Describes an instant view page for a web page WebPageInstantView { -- | Content of the web page pageBlocks :: [PageBlock], -- | Number of the instant view views; 0 if unknown viewCount :: I32, -- | Version of the instant view, currently can be 1 or 2 version :: I32, -- | True, if the instant view must be shown from right to left isRtl :: Bool, -- | True, if the instant view contains the full page. A network request might be needed to get the full web page instant view isFull :: Bool } deriving (Show, Eq, Generic) data WebPage = -- | Describes a web page preview WebPage { -- | Original URL of the link url :: T, -- | URL to display displayUrl :: T, -- | Type of the web page. Can be: article, photo, audio, video, document, profile, app, or something else type_ :: T, -- | Short name of the site (e.g., Google Docs, App Store) siteName :: T, -- | Title of the content title :: T, -- | Describes a web page preview description :: FormattedText, -- | Image representing the content; may be null photo :: (Maybe) (Photo), -- | URL to show in the embedded preview embedUrl :: T, -- | MIME type of the embedded preview, (e.g., text/html or video/mp4) embedType :: T, -- | Width of the embedded preview embedWidth :: I32, -- | Height of the embedded preview embedHeight :: I32, -- | Duration of the content, in seconds duration :: I32, -- | Author of the content author :: T, -- | Preview of the content as an animation, if available; may be null animation :: (Maybe) (Animation), -- | Preview of the content as an audio file, if available; may be null audio :: (Maybe) (Audio), -- | Preview of the content as a document, if available (currently only available for small PDF files and ZIP archives); may be null document :: (Maybe) (Document), -- | Preview of the content as a sticker for small WEBP files, if available; may be null sticker :: (Maybe) (Sticker), -- | Preview of the content as a video, if available; may be null video :: (Maybe) (Video), -- | Preview of the content as a video note, if available; may be null videoNote :: (Maybe) (VideoNote), -- | Preview of the content as a voice note, if available; may be null voiceNote :: (Maybe) (VoiceNote), -- | Version of instant view, available for the web page (currently can be 1 or 2), 0 if none instantViewVersion :: I32 } deriving (Show, Eq, Generic) data BankCardActionOpenUrl = -- | Describes an action associated with a bank card number BankCardActionOpenUrl { -- | Action text text :: T, -- | The URL to be opened url :: T } deriving (Show, Eq, Generic) data BankCardInfo = -- | Information about a bank card BankCardInfo { -- | Title of the bank card description title :: T, -- | Actions that can be done with the bank card number actions :: [BankCardActionOpenUrl] } deriving (Show, Eq, Generic) data Address = -- | Describes an address Address { -- | A two-letter ISO 3166-1 alpha-2 country code countryCode :: T, -- | State, if applicable state :: T, -- | City city :: T, -- | First line of the address streetLine1 :: T, -- | Second line of the address streetLine2 :: T, -- | Address postal code postalCode :: T } deriving (Show, Eq, Generic) data LabeledPricePart = -- | Portion of the price of a product (e.g., "delivery cost", "tax amount") LabeledPricePart { -- | Label for this portion of the product price label :: T, -- | Currency amount in minimal quantity of the currency amount :: I53 } deriving (Show, Eq, Generic) data Invoice = -- | Product invoice Invoice { -- | ISO 4217 currency code currency :: T, -- | A list of objects used to calculate the total price of the product priceParts :: [LabeledPricePart], -- | True, if the payment is a test payment isTest :: Bool, -- | True, if the user's name is needed for payment needName :: Bool, -- | True, if the user's phone number is needed for payment needPhoneNumber :: Bool, -- | True, if the user's email address is needed for payment needEmailAddress :: Bool, -- | True, if the user's shipping address is needed for payment needShippingAddress :: Bool, -- | True, if the user's phone number will be sent to the provider sendPhoneNumberToProvider :: Bool, -- | True, if the user's email address will be sent to the provider sendEmailAddressToProvider :: Bool, -- | True, if the total price depends on the shipping method isFlexible :: Bool } deriving (Show, Eq, Generic) data OrderInfo = -- | Order information OrderInfo { -- | Name of the user name :: T, -- | Phone number of the user phoneNumber :: T, -- | Email address of the user emailAddress :: T, -- | Shipping address for this order; may be null shippingAddress :: (Maybe) (Address) } deriving (Show, Eq, Generic) data ShippingOption = -- | One shipping option ShippingOption { -- | Shipping option identifier id :: T, -- | Option title title :: T, -- | A list of objects used to calculate the total shipping costs priceParts :: [LabeledPricePart] } deriving (Show, Eq, Generic) data SavedCredentials = -- | Contains information about saved card credentials SavedCredentials { -- | Unique identifier of the saved credentials id :: T, -- | Title of the saved credentials title :: T } deriving (Show, Eq, Generic) -- | Contains information about the payment method chosen by the user data InputCredentials = -- | Applies if a user chooses some previously saved payment credentials. To use their previously saved credentials, the user must have a valid temporary password InputCredentialsSaved { -- | Identifier of the saved credentials savedCredentialsId :: T } | -- | Applies if a user enters new credentials on a payment provider website InputCredentialsNew { -- | Contains JSON-encoded data with a credential identifier from the payment provider data_ :: T, -- | True, if the credential identifier can be saved on the server side allowSave :: Bool } | -- | Applies if a user enters new credentials using Android Pay InputCredentialsAndroidPay { -- | JSON-encoded data with the credential identifier data_ :: T } | -- | Applies if a user enters new credentials using Apple Pay InputCredentialsApplePay { -- | JSON-encoded data with the credential identifier data_ :: T } deriving (Show, Eq, Generic) data PaymentsProviderStripe = -- | Stripe payment provider PaymentsProviderStripe { -- | Stripe API publishable key publishableKey :: T, -- | True, if the user country must be provided needCountry :: Bool, -- | True, if the user ZIP/postal code must be provided needPostalCode :: Bool, -- | True, if the cardholder name must be provided needCardholderName :: Bool } deriving (Show, Eq, Generic) data PaymentForm = -- | Contains information about an invoice payment form PaymentForm { -- | Full information of the invoice invoice :: Invoice, -- | Payment form URL url :: T, -- | Contains information about the payment provider, if available, to support it natively without the need for opening the URL; may be null paymentsProvider :: (Maybe) (PaymentsProviderStripe), -- | Saved server-side order information; may be null savedOrderInfo :: (Maybe) (OrderInfo), -- | Contains information about saved card credentials; may be null savedCredentials :: (Maybe) (SavedCredentials), -- | True, if the user can choose to save credentials canSaveCredentials :: Bool, -- | True, if the user will be able to save credentials protected by a password they set up needPassword :: Bool } deriving (Show, Eq, Generic) data ValidatedOrderInfo = -- | Contains a temporary identifier of validated order information, which is stored for one hour. Also contains the available shipping options ValidatedOrderInfo { -- | Temporary identifier of the order information orderInfoId :: T, -- | Available shipping options shippingOptions :: [ShippingOption] } deriving (Show, Eq, Generic) data PaymentResult = -- | Contains the result of a payment request PaymentResult { -- | True, if the payment request was successful; otherwise the verification_url will be not empty success :: Bool, -- | URL for additional payment credentials verification verificationUrl :: T } deriving (Show, Eq, Generic) data PaymentReceipt = -- | Contains information about a successful payment PaymentReceipt { -- | Point in time (Unix timestamp) when the payment was made date :: I32, -- | User identifier of the payment provider bot paymentsProviderUserId :: I32, -- | Contains information about the invoice invoice :: Invoice, -- | Contains order information; may be null orderInfo :: (Maybe) (OrderInfo), -- | Chosen shipping option; may be null shippingOption :: (Maybe) (ShippingOption), -- | Title of the saved credentials credentialsTitle :: T } deriving (Show, Eq, Generic) data DatedFile = -- | File with the date it was uploaded DatedFile { -- | The file file :: File, -- | Point in time (Unix timestamp) when the file was uploaded date :: I32 } deriving (Show, Eq, Generic) -- | Contains the type of a Telegram Passport element data PassportElementType = -- | A Telegram Passport element containing the user's personal details PassportElementTypePersonalDetails { } | -- | A Telegram Passport element containing the user's passport PassportElementTypePassport { } | -- | A Telegram Passport element containing the user's driver license PassportElementTypeDriverLicense { } | -- | A Telegram Passport element containing the user's identity card PassportElementTypeIdentityCard { } | -- | A Telegram Passport element containing the user's internal passport PassportElementTypeInternalPassport { } | -- | A Telegram Passport element containing the user's address PassportElementTypeAddress { } | -- | A Telegram Passport element containing the user's utility bill PassportElementTypeUtilityBill { } | -- | A Telegram Passport element containing the user's bank statement PassportElementTypeBankStatement { } | -- | A Telegram Passport element containing the user's rental agreement PassportElementTypeRentalAgreement { } | -- | A Telegram Passport element containing the registration page of the user's passport PassportElementTypePassportRegistration { } | -- | A Telegram Passport element containing the user's temporary registration PassportElementTypeTemporaryRegistration { } | -- | A Telegram Passport element containing the user's phone number PassportElementTypePhoneNumber { } | -- | A Telegram Passport element containing the user's email address PassportElementTypeEmailAddress { } deriving (Show, Eq, Generic) data Date = -- | Represents a date according to the Gregorian calendar Date { -- | Day of the month, 1-31 day :: I32, -- | Month, 1-12 month :: I32, -- | Year, 1-9999 year :: I32 } deriving (Show, Eq, Generic) data PersonalDetails = -- | Contains the user's personal details PersonalDetails { -- | First name of the user written in English; 1-255 characters firstName :: T, -- | Middle name of the user written in English; 0-255 characters middleName :: T, -- | Last name of the user written in English; 1-255 characters lastName :: T, -- | Native first name of the user; 1-255 characters nativeFirstName :: T, -- | Native middle name of the user; 0-255 characters nativeMiddleName :: T, -- | Native last name of the user; 1-255 characters nativeLastName :: T, -- | Birthdate of the user birthdate :: Date, -- | Gender of the user, "male" or "female" gender :: T, -- | A two-letter ISO 3166-1 alpha-2 country code of the user's country countryCode :: T, -- | A two-letter ISO 3166-1 alpha-2 country code of the user's residence country residenceCountryCode :: T } deriving (Show, Eq, Generic) data IdentityDocument = -- | An identity document IdentityDocument { -- | Document number; 1-24 characters number :: T, -- | Document expiry date; may be null expiryDate :: (Maybe) (Date), -- | Front side of the document frontSide :: DatedFile, -- | Reverse side of the document; only for driver license and identity card reverseSide :: DatedFile, -- | Selfie with the document; may be null selfie :: (Maybe) (DatedFile), -- | List of files containing a certified English translation of the document translation :: [DatedFile] } deriving (Show, Eq, Generic) data InputIdentityDocument = -- | An identity document to be saved to Telegram Passport InputIdentityDocument { -- | Document number; 1-24 characters number :: T, -- | Document expiry date, if available expiryDate :: Date, -- | Front side of the document frontSide :: InputFile, -- | Reverse side of the document; only for driver license and identity card reverseSide :: InputFile, -- | Selfie with the document, if available selfie :: InputFile, -- | List of files containing a certified English translation of the document translation :: [InputFile] } deriving (Show, Eq, Generic) data PersonalDocument = -- | A personal document, containing some information about a user PersonalDocument { -- | List of files containing the pages of the document files :: [DatedFile], -- | List of files containing a certified English translation of the document translation :: [DatedFile] } deriving (Show, Eq, Generic) data InputPersonalDocument = -- | A personal document to be saved to Telegram Passport InputPersonalDocument { -- | List of files containing the pages of the document files :: [InputFile], -- | List of files containing a certified English translation of the document translation :: [InputFile] } deriving (Show, Eq, Generic) -- | Contains information about a Telegram Passport element data PassportElement = -- | A Telegram Passport element containing the user's personal details PassportElementPersonalDetails { -- | Personal details of the user personalDetails :: PersonalDetails } | -- | A Telegram Passport element containing the user's passport PassportElementPassport { -- | Passport passport :: IdentityDocument } | -- | A Telegram Passport element containing the user's driver license PassportElementDriverLicense { -- | Driver license driverLicense :: IdentityDocument } | -- | A Telegram Passport element containing the user's identity card PassportElementIdentityCard { -- | Identity card identityCard :: IdentityDocument } | -- | A Telegram Passport element containing the user's internal passport PassportElementInternalPassport { -- | Internal passport internalPassport :: IdentityDocument } | -- | A Telegram Passport element containing the user's address PassportElementAddress { -- | Address address :: Address } | -- | A Telegram Passport element containing the user's utility bill PassportElementUtilityBill { -- | Utility bill utilityBill :: PersonalDocument } | -- | A Telegram Passport element containing the user's bank statement PassportElementBankStatement { -- | Bank statement bankStatement :: PersonalDocument } | -- | A Telegram Passport element containing the user's rental agreement PassportElementRentalAgreement { -- | Rental agreement rentalAgreement :: PersonalDocument } | -- | A Telegram Passport element containing the user's passport registration pages PassportElementPassportRegistration { -- | Passport registration pages passportRegistration :: PersonalDocument } | -- | A Telegram Passport element containing the user's temporary registration PassportElementTemporaryRegistration { -- | Temporary registration temporaryRegistration :: PersonalDocument } | -- | A Telegram Passport element containing the user's phone number PassportElementPhoneNumber { -- | Phone number phoneNumber :: T } | -- | A Telegram Passport element containing the user's email address PassportElementEmailAddress { -- | Email address emailAddress :: T } deriving (Show, Eq, Generic) -- | Contains information about a Telegram Passport element to be saved data InputPassportElement = -- | A Telegram Passport element to be saved containing the user's personal details InputPassportElementPersonalDetails { -- | Personal details of the user personalDetails :: PersonalDetails } | -- | A Telegram Passport element to be saved containing the user's passport InputPassportElementPassport { -- | The passport to be saved passport :: InputIdentityDocument } | -- | A Telegram Passport element to be saved containing the user's driver license InputPassportElementDriverLicense { -- | The driver license to be saved driverLicense :: InputIdentityDocument } | -- | A Telegram Passport element to be saved containing the user's identity card InputPassportElementIdentityCard { -- | The identity card to be saved identityCard :: InputIdentityDocument } | -- | A Telegram Passport element to be saved containing the user's internal passport InputPassportElementInternalPassport { -- | The internal passport to be saved internalPassport :: InputIdentityDocument } | -- | A Telegram Passport element to be saved containing the user's address InputPassportElementAddress { -- | The address to be saved address :: Address } | -- | A Telegram Passport element to be saved containing the user's utility bill InputPassportElementUtilityBill { -- | The utility bill to be saved utilityBill :: InputPersonalDocument } | -- | A Telegram Passport element to be saved containing the user's bank statement InputPassportElementBankStatement { -- | The bank statement to be saved bankStatement :: InputPersonalDocument } | -- | A Telegram Passport element to be saved containing the user's rental agreement InputPassportElementRentalAgreement { -- | The rental agreement to be saved rentalAgreement :: InputPersonalDocument } | -- | A Telegram Passport element to be saved containing the user's passport registration InputPassportElementPassportRegistration { -- | The passport registration page to be saved passportRegistration :: InputPersonalDocument } | -- | A Telegram Passport element to be saved containing the user's temporary registration InputPassportElementTemporaryRegistration { -- | The temporary registration document to be saved temporaryRegistration :: InputPersonalDocument } | -- | A Telegram Passport element to be saved containing the user's phone number InputPassportElementPhoneNumber { -- | The phone number to be saved phoneNumber :: T } | -- | A Telegram Passport element to be saved containing the user's email address InputPassportElementEmailAddress { -- | The email address to be saved emailAddress :: T } deriving (Show, Eq, Generic) data PassportElements = -- | Contains information about saved Telegram Passport elements PassportElements { -- | Telegram Passport elements elements :: [PassportElement] } deriving (Show, Eq, Generic) -- | Contains the description of an error in a Telegram Passport element data PassportElementErrorSource = -- | The element contains an error in an unspecified place. The error will be considered resolved when new data is added PassportElementErrorSourceUnspecified { } | -- | One of the data fields contains an error. The error will be considered resolved when the value of the field changes PassportElementErrorSourceDataField { -- | Field name fieldName :: T } | -- | The front side of the document contains an error. The error will be considered resolved when the file with the front side changes PassportElementErrorSourceFrontSide { } | -- | The reverse side of the document contains an error. The error will be considered resolved when the file with the reverse side changes PassportElementErrorSourceReverseSide { } | -- | The selfie with the document contains an error. The error will be considered resolved when the file with the selfie changes PassportElementErrorSourceSelfie { } | -- | One of files with the translation of the document contains an error. The error will be considered resolved when the file changes PassportElementErrorSourceTranslationFile { -- | Index of a file with the error fileIndex :: I32 } | -- | The translation of the document contains an error. The error will be considered resolved when the list of translation files changes PassportElementErrorSourceTranslationFiles { } | -- | The file contains an error. The error will be considered resolved when the file changes PassportElementErrorSourceFile { -- | Index of a file with the error fileIndex :: I32 } | -- | The list of attached files contains an error. The error will be considered resolved when the list of files changes PassportElementErrorSourceFiles { } deriving (Show, Eq, Generic) data PassportElementError = -- | Contains the description of an error in a Telegram Passport element PassportElementError { -- | Type of the Telegram Passport element which has the error type_ :: PassportElementType, -- | Error message message :: T, -- | Error source source :: PassportElementErrorSource } deriving (Show, Eq, Generic) data PassportSuitableElement = -- | Contains information about a Telegram Passport element that was requested by a service PassportSuitableElement { -- | Type of the element type_ :: PassportElementType, -- | True, if a selfie is required with the identity document isSelfieRequired :: Bool, -- | True, if a certified English translation is required with the document isTranslationRequired :: Bool, -- | True, if personal details must include the user's name in the language of their country of residence isNativeNameRequired :: Bool } deriving (Show, Eq, Generic) data PassportRequiredElement = -- | Contains a description of the required Telegram Passport element that was requested by a service PassportRequiredElement { -- | List of Telegram Passport elements any of which is enough to provide suitableElements :: [PassportSuitableElement] } deriving (Show, Eq, Generic) data PassportAuthorizationForm = -- | Contains information about a Telegram Passport authorization form that was requested PassportAuthorizationForm { -- | Unique identifier of the authorization form id :: I32, -- | Information about the Telegram Passport elements that need to be provided to complete the form requiredElements :: [PassportRequiredElement], -- | URL for the privacy policy of the service; may be empty privacyPolicyUrl :: T } deriving (Show, Eq, Generic) data PassportElementsWithErrors = -- | Contains information about a Telegram Passport elements and corresponding errors PassportElementsWithErrors { -- | Telegram Passport elements elements :: [PassportElement], -- | Errors in the elements that are already available errors :: [PassportElementError] } deriving (Show, Eq, Generic) data EncryptedCredentials = -- | Contains encrypted Telegram Passport data credentials EncryptedCredentials { -- | The encrypted credentials data_ :: ByteString64, -- | The decrypted data hash hash :: ByteString64, -- | Secret for data decryption, encrypted with the service's public key secret :: ByteString64 } deriving (Show, Eq, Generic) data EncryptedPassportElement = -- | Contains information about an encrypted Telegram Passport element; for bots only EncryptedPassportElement { -- | Type of Telegram Passport element type_ :: PassportElementType, -- | Encrypted JSON-encoded data about the user data_ :: ByteString64, -- | The front side of an identity document frontSide :: DatedFile, -- | The reverse side of an identity document; may be null reverseSide :: (Maybe) (DatedFile), -- | Selfie with the document; may be null selfie :: (Maybe) (DatedFile), -- | List of files containing a certified English translation of the document translation :: [DatedFile], -- | List of attached files files :: [DatedFile], -- | Unencrypted data, phone number or email address value :: T, -- | Hash of the entire element hash :: T } deriving (Show, Eq, Generic) -- | Contains the description of an error in a Telegram Passport element; for bots only data InputPassportElementErrorSource = -- | The element contains an error in an unspecified place. The error will be considered resolved when new data is added InputPassportElementErrorSourceUnspecified { -- | Current hash of the entire element elementHash :: ByteString64 } | -- | A data field contains an error. The error is considered resolved when the field's value changes InputPassportElementErrorSourceDataField { -- | Field name fieldName :: T, -- | Current data hash dataHash :: ByteString64 } | -- | The front side of the document contains an error. The error is considered resolved when the file with the front side of the document changes InputPassportElementErrorSourceFrontSide { -- | Current hash of the file containing the front side fileHash :: ByteString64 } | -- | The reverse side of the document contains an error. The error is considered resolved when the file with the reverse side of the document changes InputPassportElementErrorSourceReverseSide { -- | Current hash of the file containing the reverse side fileHash :: ByteString64 } | -- | The selfie contains an error. The error is considered resolved when the file with the selfie changes InputPassportElementErrorSourceSelfie { -- | Current hash of the file containing the selfie fileHash :: ByteString64 } | -- | One of the files containing the translation of the document contains an error. The error is considered resolved when the file with the translation changes InputPassportElementErrorSourceTranslationFile { -- | Current hash of the file containing the translation fileHash :: ByteString64 } | -- | The translation of the document contains an error. The error is considered resolved when the list of files changes InputPassportElementErrorSourceTranslationFiles { -- | Current hashes of all files with the translation fileHashes :: [ByteString64] } | -- | The file contains an error. The error is considered resolved when the file changes InputPassportElementErrorSourceFile { -- | Current hash of the file which has the error fileHash :: ByteString64 } | -- | The list of attached files contains an error. The error is considered resolved when the file list changes InputPassportElementErrorSourceFiles { -- | Current hashes of all attached files fileHashes :: [ByteString64] } deriving (Show, Eq, Generic) data InputPassportElementError = -- | Contains the description of an error in a Telegram Passport element; for bots only InputPassportElementError { -- | Type of Telegram Passport element that has the error type_ :: PassportElementType, -- | Error message message :: T, -- | Error source source :: InputPassportElementErrorSource } deriving (Show, Eq, Generic) -- | Contains the content of a message data MessageContent = -- | A text message MessageText { -- | Text of the message text_2 :: FormattedText, -- | A preview of the web page that's mentioned in the text; may be null webPage :: (Maybe) (WebPage) } | -- | An animation message (GIF-style). MessageAnimation { -- | The animation description animation :: Animation, -- | Animation caption caption :: FormattedText, -- | True, if the animation thumbnail must be blurred and the animation must be shown only while tapped isSecret :: Bool } | -- | An audio message MessageAudio { -- | The audio description audio :: Audio, -- | Audio caption caption :: FormattedText } | -- | A document message (general file) MessageDocument { -- | The document description document :: Document, -- | Document caption caption :: FormattedText } | -- | A photo message MessagePhoto { -- | The photo description photo :: Photo, -- | Photo caption caption :: FormattedText, -- | True, if the photo must be blurred and must be shown only while tapped isSecret :: Bool } | -- | An expired photo message (self-destructed after TTL has elapsed) MessageExpiredPhoto { } | -- | A sticker message MessageSticker { -- | The sticker description sticker :: Sticker } | -- | A video message MessageVideo { -- | The video description video :: Video, -- | Video caption caption :: FormattedText, -- | True, if the video thumbnail must be blurred and the video must be shown only while tapped isSecret :: Bool } | -- | An expired video message (self-destructed after TTL has elapsed) MessageExpiredVideo { } | -- | A video note message MessageVideoNote { -- | The video note description videoNote :: VideoNote, -- | True, if at least one of the recipients has viewed the video note isViewed :: Bool, -- | True, if the video note thumbnail must be blurred and the video note must be shown only while tapped isSecret :: Bool } | -- | A voice note message MessageVoiceNote { -- | The voice note description voiceNote :: VoiceNote, -- | Voice note caption caption :: FormattedText, -- | True, if at least one of the recipients has listened to the voice note isListened :: Bool } | -- | A message with a location MessageLocation { -- | The location description location :: Location, -- | Time relative to the message sent date until which the location can be updated, in seconds livePeriod :: I32, -- | Left time for which the location can be updated, in seconds. updateMessageContent is not sent when this field changes expiresIn :: I32 } | -- | A message with information about a venue MessageVenue { -- | The venue description venue :: Venue } | -- | A message with a user contact MessageContact { -- | The contact description contact :: Contact } | -- | A dice message. The dice value is randomly generated by the server MessageDice { -- | The animated sticker with the initial dice animation; may be null if unknown. updateMessageContent will be sent when the sticker became known initialStateSticker :: (Maybe) (Sticker), -- | The animated sticker with the final dice animation; may be null if unknown. updateMessageContent will be sent when the sticker became known finalStateSticker :: (Maybe) (Sticker), -- | Emoji on which the dice throw animation is based emoji :: T, -- | The dice value. If the value is 0, the dice don't have final state yet value :: I32, -- | Number of frame after which a success animation like a shower of confetti needs to be shown on updateMessageSendSucceeded successAnimationFrameNumber :: I32 } | -- | A message with a game MessageGame { -- | The game description game :: Game } | -- | A message with a poll MessagePoll { -- | The poll description poll :: Poll } | -- | A message with an invoice from a bot MessageInvoice { -- | Product title title :: T, -- | A message with an invoice from a bot description :: T, -- | Product photo; may be null photo_2 :: (Maybe) (Photo), -- | Currency for the product price currency :: T, -- | Product total price in the minimal quantity of the currency totalAmount :: I53, -- | Unique invoice bot start_parameter. To share an invoice use the URL https://t.me/{bot_username}?start={start_parameter} startParameter :: T, -- | True, if the invoice is a test invoice isTest :: Bool, -- | True, if the shipping address should be specified needShippingAddress :: Bool, -- | The identifier of the message with the receipt, after the product has been purchased receiptMessageId :: I53 } | -- | A message with information about an ended call MessageCall { -- | Reason why the call was discarded discardReason :: CallDiscardReason, -- | Call duration, in seconds duration :: I32 } | -- | A newly created basic group MessageBasicGroupChatCreate { -- | Title of the basic group title :: T, -- | User identifiers of members in the basic group memberUserIds :: [I32] } | -- | A newly created supergroup or channel MessageSupergroupChatCreate { -- | Title of the supergroup or channel title :: T } | -- | An updated chat title MessageChatChangeTitle { -- | New chat title title :: T } | -- | An updated chat photo MessageChatChangePhoto { -- | New chat photo photo :: Photo } | -- | A deleted chat photo MessageChatDeletePhoto { } | -- | New chat members were added MessageChatAddMembers { -- | User identifiers of the new members memberUserIds :: [I32] } | -- | A new member joined the chat by invite link MessageChatJoinByLink { } | -- | A chat member was deleted MessageChatDeleteMember { -- | User identifier of the deleted chat member userId :: I32 } | -- | A basic group was upgraded to a supergroup and was deactivated as the result MessageChatUpgradeTo { -- | Identifier of the supergroup to which the basic group was upgraded supergroupId :: I32 } | -- | A supergroup has been created from a basic group MessageChatUpgradeFrom { -- | Title of the newly created supergroup title :: T, -- | The identifier of the original basic group basicGroupId :: I32 } | -- | A message has been pinned MessagePinMessage { -- | Identifier of the pinned message, can be an identifier of a deleted message or 0 messageId :: I53 } | -- | A screenshot of a message in the chat has been taken MessageScreenshotTaken { } | -- | The TTL (Time To Live) setting messages in a secret chat has been changed MessageChatSetTtl { -- | New TTL ttl :: I32 } | -- | A non-standard action has happened in the chat MessageCustomServiceAction { -- | Message text to be shown in the chat text :: T } | -- | A new high score was achieved in a game MessageGameScore { -- | Identifier of the message with the game, can be an identifier of a deleted message gameMessageId :: I53, -- | Identifier of the game; may be different from the games presented in the message with the game gameId :: I64, -- | New score score :: I32 } | -- | A payment has been completed MessagePaymentSuccessful { -- | Identifier of the message with the corresponding invoice; can be an identifier of a deleted message invoiceMessageId :: I53, -- | Currency for the price of the product currency :: T, -- | Total price for the product, in the minimal quantity of the currency totalAmount :: I53 } | -- | A payment has been completed; for bots only MessagePaymentSuccessfulBot { -- | Identifier of the message with the corresponding invoice; can be an identifier of a deleted message invoiceMessageId :: I53, -- | Currency for price of the product currency :: T, -- | Total price for the product, in the minimal quantity of the currency totalAmount :: I53, -- | Invoice payload invoicePayload :: ByteString64, -- | Identifier of the shipping option chosen by the user; may be empty if not applicable shippingOptionId :: T, -- | Information about the order; may be null orderInfo :: (Maybe) (OrderInfo), -- | Telegram payment identifier telegramPaymentChargeId :: T, -- | Provider payment identifier providerPaymentChargeId :: T } | -- | A contact has registered with Telegram MessageContactRegistered { } | -- | The current user has connected a website by logging in using Telegram Login Widget on it MessageWebsiteConnected { -- | Domain name of the connected website domainName :: T } | -- | Telegram Passport data has been sent MessagePassportDataSent { -- | List of Telegram Passport element types sent types :: [PassportElementType] } | -- | Telegram Passport data has been received; for bots only MessagePassportDataReceived { -- | List of received Telegram Passport elements elements :: [EncryptedPassportElement], -- | Encrypted data credentials credentials :: EncryptedCredentials } | -- | Message content that is not supported by the client MessageUnsupported { } deriving (Show, Eq, Generic) -- | Represents a part of the text which must be formatted differently data TextEntityType = -- | A mention of a user by their username TextEntityTypeMention { } | -- | A hashtag text, beginning with "#" TextEntityTypeHashtag { } | -- | A cashtag text, beginning with "$" and consisting of capital english letters (i.e. "$USD") TextEntityTypeCashtag { } | -- | A bot command, beginning with "/". This shouldn't be highlighted if there are no bots in the chat TextEntityTypeBotCommand { } | -- | An HTTP URL TextEntityTypeUrl { } | -- | An email address TextEntityTypeEmailAddress { } | -- | A phone number TextEntityTypePhoneNumber { } | -- | A bank card number. The getBankCardInfo method can be used to get information about the bank card TextEntityTypeBankCardNumber { } | -- | A bold text TextEntityTypeBold { } | -- | An italic text TextEntityTypeItalic { } | -- | An underlined text TextEntityTypeUnderline { } | -- | A strikethrough text TextEntityTypeStrikethrough { } | -- | Text that must be formatted as if inside a code HTML tag TextEntityTypeCode { } | -- | Text that must be formatted as if inside a pre HTML tag TextEntityTypePre { } | -- | Text that must be formatted as if inside pre, and code HTML tags TextEntityTypePreCode { -- | Programming language of the code; as defined by the sender language :: T } | -- | A text description shown instead of a raw URL TextEntityTypeTextUrl { -- | HTTP or tg:// URL to be opened when the link is clicked url :: T } | -- | A text shows instead of a raw mention of the user (e.g., when the user has no username) TextEntityTypeMentionName { -- | Identifier of the mentioned user userId :: I32 } deriving (Show, Eq, Generic) data InputThumbnail = -- | A thumbnail to be sent along with a file; should be in JPEG or WEBP format for stickers, and less than 200 KB in size InputThumbnail { -- | Thumbnail file to send. Sending thumbnails by file_id is currently not supported thumbnail :: InputFile, -- | Thumbnail width, usually shouldn't exceed 320. Use 0 if unknown width :: I32, -- | Thumbnail height, usually shouldn't exceed 320. Use 0 if unknown height :: I32 } deriving (Show, Eq, Generic) -- | Contains information about the time when a scheduled message will be sent data MessageSchedulingState = -- | The message will be sent at the specified date MessageSchedulingStateSendAtDate { -- | Date the message will be sent. The date must be within 367 days in the future sendDate :: I32 } | -- | The message will be sent when the peer will be online. Applicable to private chats only and when the exact online status of the peer is known MessageSchedulingStateSendWhenOnline { } deriving (Show, Eq, Generic) data SendMessageOptions = -- | Options to be used when a message is send SendMessageOptions { -- | Pass true to disable notification for the message. Must be false if the message is sent to a secret chat disableNotification :: Bool, -- | Pass true if the message is sent from the background fromBackground :: Bool, -- | Message scheduling state. Messages sent to a secret chat, live location messages and self-destructing messages can't be scheduled schedulingState :: MessageSchedulingState } deriving (Show, Eq, Generic) -- | The content of a message to send data InputMessageContent = -- | A text message InputMessageText { -- | Formatted text to be sent; 1-GetOption("message_text_length_max") characters. Only Bold, Italic, Underline, Strikethrough, Code, Pre, PreCode, TextUrl and MentionName entities are allowed to be specified manually text :: FormattedText, -- | True, if rich web page previews for URLs in the message text should be disabled disableWebPagePreview :: Bool, -- | True, if a chat message draft should be deleted clearDraft :: Bool } | -- | An animation message (GIF-style). InputMessageAnimation { -- | Animation file to be sent animation :: InputFile, -- | Animation thumbnail, if available thumbnail :: InputThumbnail, -- | File identifiers of the stickers added to the animation, if applicable addedStickerFileIds :: [I32], -- | Duration of the animation, in seconds duration :: I32, -- | Width of the animation; may be replaced by the server width :: I32, -- | Height of the animation; may be replaced by the server height :: I32, -- | Animation caption; 0-GetOption("message_caption_length_max") characters caption :: FormattedText } | -- | An audio message InputMessageAudio { -- | Audio file to be sent audio :: InputFile, -- | Thumbnail of the cover for the album, if available albumCoverThumbnail :: InputThumbnail, -- | Duration of the audio, in seconds; may be replaced by the server duration :: I32, -- | Title of the audio; 0-64 characters; may be replaced by the server title :: T, -- | Performer of the audio; 0-64 characters, may be replaced by the server performer :: T, -- | Audio caption; 0-GetOption("message_caption_length_max") characters caption :: FormattedText } | -- | A document message (general file) InputMessageDocument { -- | Document to be sent document :: InputFile, -- | Document thumbnail, if available thumbnail :: InputThumbnail, -- | Document caption; 0-GetOption("message_caption_length_max") characters caption :: FormattedText } | -- | A photo message InputMessagePhoto { -- | Photo to send photo :: InputFile, -- | Photo thumbnail to be sent, this is sent to the other party in secret chats only thumbnail :: InputThumbnail, -- | File identifiers of the stickers added to the photo, if applicable addedStickerFileIds :: [I32], -- | Photo width width :: I32, -- | Photo height height :: I32, -- | Photo caption; 0-GetOption("message_caption_length_max") characters caption :: FormattedText, -- | Photo TTL (Time To Live), in seconds (0-60). A non-zero TTL can be specified only in private chats ttl :: I32 } | -- | A sticker message InputMessageSticker { -- | Sticker to be sent sticker :: InputFile, -- | Sticker thumbnail, if available thumbnail :: InputThumbnail, -- | Sticker width width :: I32, -- | Sticker height height :: I32 } | -- | A video message InputMessageVideo { -- | Video to be sent video :: InputFile, -- | Video thumbnail, if available thumbnail :: InputThumbnail, -- | File identifiers of the stickers added to the video, if applicable addedStickerFileIds :: [I32], -- | Duration of the video, in seconds duration :: I32, -- | Video width width :: I32, -- | Video height height :: I32, -- | True, if the video should be tried to be streamed supportsStreaming :: Bool, -- | Video caption; 0-GetOption("message_caption_length_max") characters caption :: FormattedText, -- | Video TTL (Time To Live), in seconds (0-60). A non-zero TTL can be specified only in private chats ttl :: I32 } | -- | A video note message InputMessageVideoNote { -- | Video note to be sent videoNote :: InputFile, -- | Video thumbnail, if available thumbnail :: InputThumbnail, -- | Duration of the video, in seconds duration :: I32, -- | Video width and height; must be positive and not greater than 640 length :: I32 } | -- | A voice note message InputMessageVoiceNote { -- | Voice note to be sent voiceNote :: InputFile, -- | Duration of the voice note, in seconds duration :: I32, -- | Waveform representation of the voice note, in 5-bit format waveform :: ByteString64, -- | Voice note caption; 0-GetOption("message_caption_length_max") characters caption :: FormattedText } | -- | A message with a location InputMessageLocation { -- | Location to be sent location :: Location, -- | Period for which the location can be updated, in seconds; should be between 60 and 86400 for a live location and 0 otherwise livePeriod :: I32 } | -- | A message with information about a venue InputMessageVenue { -- | Venue to send venue :: Venue } | -- | A message containing a user contact InputMessageContact { -- | Contact to send contact :: Contact } | -- | A dice message InputMessageDice { -- | Emoji on which the dice throw animation is based emoji :: T, -- | True, if a chat message draft should be deleted clearDraft :: Bool } | -- | A message with a game; not supported for channels or secret chats InputMessageGame { -- | User identifier of the bot that owns the game botUserId :: I32, -- | Short name of the game gameShortName :: T } | -- | A message with an invoice; can be used only by bots and only in private chats InputMessageInvoice { -- | Invoice invoice :: Invoice, -- | Product title; 1-32 characters title :: T, -- | A message with an invoice; can be used only by bots and only in private chats description :: T, -- | Product photo URL; optional photoUrl :: T, -- | Product photo size photoSize :: I32, -- | Product photo width photoWidth :: I32, -- | Product photo height photoHeight :: I32, -- | The invoice payload payload :: ByteString64, -- | Payment provider token providerToken :: T, -- | JSON-encoded data about the invoice, which will be shared with the payment provider providerData :: T, -- | Unique invoice bot start_parameter for the generation of this invoice startParameter :: T } | -- | A message with a poll. Polls can't be sent to secret chats. Polls can be sent only to a private chat with a bot InputMessagePoll { -- | Poll question, 1-255 characters question :: T, -- | List of poll answer options, 2-10 strings 1-100 characters each options :: [T], -- | True, if the poll voters are anonymous. Non-anonymous polls can't be sent or forwarded to channels isAnonymous :: Bool, -- | Type of the poll type_ :: PollType, -- | Amount of time the poll will be active after creation, in seconds; for bots only openPeriod :: I32, -- | Point in time (Unix timestamp) when the poll will be automatically closed; for bots only closeDate :: I32, -- | True, if the poll needs to be sent already closed; for bots only isClosed :: Bool } | -- | A forwarded message InputMessageForwarded { -- | Identifier for the chat this forwarded message came from fromChatId :: I53, -- | Identifier of the message to forward messageId :: I53, -- | True, if a game message should be shared within a launched game; applies only to game messages inGameShare :: Bool, -- | True, if content of the message needs to be copied without a link to the original message. Always true if the message is forwarded to a secret chat sendCopy :: Bool, -- | True, if media caption of the message copy needs to be removed. Ignored if send_copy is false removeCaption :: Bool } deriving (Show, Eq, Generic) -- | Represents a filter for message search results data SearchMessagesFilter = -- | Returns all found messages, no filter is applied SearchMessagesFilterEmpty { } | -- | Returns only animation messages SearchMessagesFilterAnimation { } | -- | Returns only audio messages SearchMessagesFilterAudio { } | -- | Returns only document messages SearchMessagesFilterDocument { } | -- | Returns only photo messages SearchMessagesFilterPhoto { } | -- | Returns only video messages SearchMessagesFilterVideo { } | -- | Returns only voice note messages SearchMessagesFilterVoiceNote { } | -- | Returns only photo and video messages SearchMessagesFilterPhotoAndVideo { } | -- | Returns only messages containing URLs SearchMessagesFilterUrl { } | -- | Returns only messages containing chat photos SearchMessagesFilterChatPhoto { } | -- | Returns only call messages SearchMessagesFilterCall { } | -- | Returns only incoming call messages with missed/declined discard reasons SearchMessagesFilterMissedCall { } | -- | Returns only video note messages SearchMessagesFilterVideoNote { } | -- | Returns only voice and video note messages SearchMessagesFilterVoiceAndVideoNote { } | -- | Returns only messages with mentions of the current user, or messages that are replies to their messages SearchMessagesFilterMention { } | -- | Returns only messages with unread mentions of the current user, or messages that are replies to their messages. When using this filter the results can't be additionally filtered by a query or by the sending user SearchMessagesFilterUnreadMention { } | -- | Returns only failed to send messages. This filter can be used only if the message database is used SearchMessagesFilterFailedToSend { } deriving (Show, Eq, Generic) -- | Describes the different types of activity in a chat data ChatAction = -- | The user is typing a message ChatActionTyping { } | -- | The user is recording a video ChatActionRecordingVideo { } | -- | The user is uploading a video ChatActionUploadingVideo { -- | Upload progress, as a percentage progress :: I32 } | -- | The user is recording a voice note ChatActionRecordingVoiceNote { } | -- | The user is uploading a voice note ChatActionUploadingVoiceNote { -- | Upload progress, as a percentage progress :: I32 } | -- | The user is uploading a photo ChatActionUploadingPhoto { -- | Upload progress, as a percentage progress :: I32 } | -- | The user is uploading a document ChatActionUploadingDocument { -- | Upload progress, as a percentage progress :: I32 } | -- | The user is picking a location or venue to send ChatActionChoosingLocation { } | -- | The user is picking a contact to send ChatActionChoosingContact { } | -- | The user has started to play a game ChatActionStartPlayingGame { } | -- | The user is recording a video note ChatActionRecordingVideoNote { } | -- | The user is uploading a video note ChatActionUploadingVideoNote { -- | Upload progress, as a percentage progress :: I32 } | -- | The user has cancelled the previous action ChatActionCancel { } deriving (Show, Eq, Generic) -- | Describes the last time the user was online data UserStatus = -- | The user status was never changed UserStatusEmpty { } | -- | The user is online UserStatusOnline { -- | Point in time (Unix timestamp) when the user's online status will expire expires :: I32 } | -- | The user is offline UserStatusOffline { -- | Point in time (Unix timestamp) when the user was last online wasOnline :: I32 } | -- | The user was online recently UserStatusRecently { } | -- | The user is offline, but was online last week UserStatusLastWeek { } | -- | The user is offline, but was online last month UserStatusLastMonth { } deriving (Show, Eq, Generic) data Stickers = -- | Represents a list of stickers Stickers { -- | List of stickers stickers :: [Sticker] } deriving (Show, Eq, Generic) data Emojis = -- | Represents a list of emoji Emojis { -- | List of emojis emojis :: [T] } deriving (Show, Eq, Generic) data StickerSet = -- | Represents a sticker set StickerSet { -- | Identifier of the sticker set id :: I64, -- | Title of the sticker set title :: T, -- | Name of the sticker set name :: T, -- | Sticker set thumbnail in WEBP or TGS format with width and height 100; may be null. The file can be downloaded only before the thumbnail is changed thumbnail :: (Maybe) (Thumbnail), -- | True, if the sticker set has been installed by the current user isInstalled :: Bool, -- | True, if the sticker set has been archived. A sticker set can't be installed and archived simultaneously isArchived :: Bool, -- | True, if the sticker set is official isOfficial :: Bool, -- | True, is the stickers in the set are animated isAnimated :: Bool, -- | True, if the stickers in the set are masks isMasks :: Bool, -- | True for already viewed trending sticker sets isViewed :: Bool, -- | List of stickers in this set stickers :: [Sticker], -- | A list of emoji corresponding to the stickers in the same order. The list is only for informational purposes, because a sticker is always sent with a fixed emoji from the corresponding Sticker object emojis :: [Emojis] } deriving (Show, Eq, Generic) data StickerSetInfo = -- | Represents short information about a sticker set StickerSetInfo { -- | Identifier of the sticker set id :: I64, -- | Title of the sticker set title :: T, -- | Name of the sticker set name :: T, -- | Sticker set thumbnail in WEBP or TGS format with width and height 100; may be null thumbnail :: (Maybe) (Thumbnail), -- | True, if the sticker set has been installed by current user isInstalled :: Bool, -- | True, if the sticker set has been archived. A sticker set can't be installed and archived simultaneously isArchived :: Bool, -- | True, if the sticker set is official isOfficial :: Bool, -- | True, is the stickers in the set are animated isAnimated :: Bool, -- | True, if the stickers in the set are masks isMasks :: Bool, -- | True for already viewed trending sticker sets isViewed :: Bool, -- | Total number of stickers in the set size :: I32, -- | Contains up to the first 5 stickers from the set, depending on the context. If the client needs more stickers the full set should be requested covers :: [Sticker] } deriving (Show, Eq, Generic) data StickerSets = -- | Represents a list of sticker sets StickerSets { -- | Approximate total number of sticker sets found totalCount :: I32, -- | List of sticker sets sets :: [StickerSetInfo] } deriving (Show, Eq, Generic) -- | Describes the reason why a call was discarded data CallDiscardReason = -- | The call wasn't discarded, or the reason is unknown CallDiscardReasonEmpty { } | -- | The call was ended before the conversation started. It was cancelled by the caller or missed by the other party CallDiscardReasonMissed { } | -- | The call was ended before the conversation started. It was declined by the other party CallDiscardReasonDeclined { } | -- | The call was ended during the conversation because the users were disconnected CallDiscardReasonDisconnected { } | -- | The call was ended because one of the parties hung up CallDiscardReasonHungUp { } deriving (Show, Eq, Generic) data CallProtocol = -- | Specifies the supported call protocols CallProtocol { -- | True, if UDP peer-to-peer connections are supported udpP2p :: Bool, -- | True, if connection through UDP reflectors is supported udpReflector :: Bool, -- | The minimum supported API layer; use 65 minLayer :: I32, -- | The maximum supported API layer; use 65 maxLayer :: I32, -- | List of supported libtgvoip versions libraryVersions :: [T] } deriving (Show, Eq, Generic) data CallConnection = -- | Describes the address of UDP reflectors CallConnection { -- | Reflector identifier id :: I64, -- | IPv4 reflector address ip :: T, -- | IPv6 reflector address ipv6 :: T, -- | Reflector port number port :: I32, -- | Connection peer tag peerTag :: ByteString64 } deriving (Show, Eq, Generic) data CallId = -- | Contains the call identifier CallId { -- | Call identifier id :: I32 } deriving (Show, Eq, Generic) -- | Describes the current call state data CallState = -- | The call is pending, waiting to be accepted by a user CallStatePending { -- | True, if the call has already been created by the server isCreated :: Bool, -- | True, if the call has already been received by the other party isReceived :: Bool } | -- | The call has been answered and encryption keys are being exchanged CallStateExchangingKeys { } | -- | The call is ready to use CallStateReady { -- | Call protocols supported by the peer protocol :: CallProtocol, -- | Available UDP reflectors connections :: [CallConnection], -- | A JSON-encoded call config config :: T, -- | Call encryption key encryptionKey :: ByteString64, -- | Encryption key emojis fingerprint emojis :: [T], -- | True, if peer-to-peer connection is allowed by users privacy settings allowP2p :: Bool } | -- | The call is hanging up after discardCall has been called CallStateHangingUp { } | -- | The call has ended successfully CallStateDiscarded { -- | The reason, why the call has ended reason :: CallDiscardReason, -- | True, if the call rating should be sent to the server needRating :: Bool, -- | True, if the call debug information should be sent to the server needDebugInformation :: Bool } | -- | The call has ended with an error CallStateError { -- | Error. An error with the code 4005000 will be returned if an outgoing call is missed because of an expired timeout error :: Error } deriving (Show, Eq, Generic) -- | Describes the exact type of a problem with a call data CallProblem = -- | The user heard their own voice CallProblemEcho { } | -- | The user heard background noise CallProblemNoise { } | -- | The other side kept disappearing CallProblemInterruptions { } | -- | The speech was distorted CallProblemDistortedSpeech { } | -- | The user couldn't hear the other side CallProblemSilentLocal { } | -- | The other side couldn't hear the user CallProblemSilentRemote { } | -- | The call ended unexpectedly CallProblemDropped { } deriving (Show, Eq, Generic) data Call = -- | Describes a call Call { -- | Call identifier, not persistent id :: I32, -- | Peer user identifier userId :: I32, -- | True, if the call is outgoing isOutgoing :: Bool, -- | Call state state :: CallState } deriving (Show, Eq, Generic) data PhoneNumberAuthenticationSettings = -- | Contains settings for the authentication of the user's phone number PhoneNumberAuthenticationSettings { -- | Pass true if the authentication code may be sent via flash call to the specified phone number allowFlashCall :: Bool, -- | Pass true if the authenticated phone number is used on the current device isCurrentPhoneNumber :: Bool, -- | For official applications only. True, if the app can use Android SMS Retriever API (requires Google Play Services >= 10.2) to automatically receive the authentication code from the SMS. See https://developers.google.com/identity/sms-retriever/ for more details allowSmsRetrieverApi :: Bool } deriving (Show, Eq, Generic) data Animations = -- | Represents a list of animations Animations { -- | List of animations animations :: [Animation] } deriving (Show, Eq, Generic) data ImportedContacts = -- | Represents the result of an ImportContacts request ImportedContacts { -- | User identifiers of the imported contacts in the same order as they were specified in the request; 0 if the contact is not yet a registered user userIds :: [I32], -- | The number of users that imported the corresponding contact; 0 for already registered users or if unavailable importerCount :: [I32] } deriving (Show, Eq, Generic) data HttpUrl = -- | Contains an HTTP URL HttpUrl { -- | The URL url :: T } deriving (Show, Eq, Generic) -- | Represents a single result of an inline query; for bots only data InputInlineQueryResult = -- | Represents a link to an animated GIF or an animated (i.e. without sound) H.264/MPEG-4 AVC video InputInlineQueryResultAnimation { -- | Unique identifier of the query result id :: T, -- | Title of the query result title :: T, -- | URL of the result thumbnail (JPEG, GIF, or MPEG4), if it exists thumbnailUrl :: T, -- | MIME type of the video thumbnail. If non-empty, must be one of "image/jpeg", "image/gif" and "video/mp4" thumbnailMimeType :: T, -- | The URL of the video file (file size must not exceed 1MB) videoUrl :: T, -- | MIME type of the video file. Must be one of "image/gif" and "video/mp4" videoMimeType :: T, -- | Duration of the video, in seconds videoDuration :: I32, -- | Width of the video videoWidth :: I32, -- | Height of the video videoHeight :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageAnimation, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents a link to an article or web page InputInlineQueryResultArticle { -- | Unique identifier of the query result id :: T, -- | URL of the result, if it exists url :: T, -- | True, if the URL must be not shown hideUrl :: Bool, -- | Title of the result title :: T, -- | Represents a link to an article or web page description :: T, -- | URL of the result thumbnail, if it exists thumbnailUrl :: T, -- | Thumbnail width, if known thumbnailWidth :: I32, -- | Thumbnail height, if known thumbnailHeight :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents a link to an MP3 audio file InputInlineQueryResultAudio { -- | Unique identifier of the query result id :: T, -- | Title of the audio file title :: T, -- | Performer of the audio file performer :: T, -- | The URL of the audio file audioUrl :: T, -- | Audio file duration, in seconds audioDuration :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageAudio, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents a user contact InputInlineQueryResultContact { -- | Unique identifier of the query result id :: T, -- | User contact contact :: Contact, -- | URL of the result thumbnail, if it exists thumbnailUrl :: T, -- | Thumbnail width, if known thumbnailWidth :: I32, -- | Thumbnail height, if known thumbnailHeight :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents a link to a file InputInlineQueryResultDocument { -- | Unique identifier of the query result id :: T, -- | Title of the resulting file title :: T, -- | Represents a link to a file description :: T, -- | URL of the file documentUrl :: T, -- | MIME type of the file content; only "application/pdf" and "application/zip" are currently allowed mimeType :: T, -- | The URL of the file thumbnail, if it exists thumbnailUrl :: T, -- | Width of the thumbnail thumbnailWidth :: I32, -- | Height of the thumbnail thumbnailHeight :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageDocument, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents a game InputInlineQueryResultGame { -- | Unique identifier of the query result id :: T, -- | Short name of the game gameShortName :: T, -- | Message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup } | -- | Represents a point on the map InputInlineQueryResultLocation { -- | Unique identifier of the query result id :: T, -- | Location result location :: Location, -- | Amount of time relative to the message sent time until the location can be updated, in seconds livePeriod :: I32, -- | Title of the result title :: T, -- | URL of the result thumbnail, if it exists thumbnailUrl :: T, -- | Thumbnail width, if known thumbnailWidth :: I32, -- | Thumbnail height, if known thumbnailHeight :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents link to a JPEG image InputInlineQueryResultPhoto { -- | Unique identifier of the query result id :: T, -- | Title of the result, if known title :: T, -- | Represents link to a JPEG image description :: T, -- | URL of the photo thumbnail, if it exists thumbnailUrl :: T, -- | The URL of the JPEG photo (photo size must not exceed 5MB) photoUrl :: T, -- | Width of the photo photoWidth :: I32, -- | Height of the photo photoHeight :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessagePhoto, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents a link to a WEBP or TGS sticker InputInlineQueryResultSticker { -- | Unique identifier of the query result id :: T, -- | URL of the sticker thumbnail, if it exists thumbnailUrl :: T, -- | The URL of the WEBP or TGS sticker (sticker file size must not exceed 5MB) stickerUrl :: T, -- | Width of the sticker stickerWidth :: I32, -- | Height of the sticker stickerHeight :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, inputMessageSticker, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents information about a venue InputInlineQueryResultVenue { -- | Unique identifier of the query result id :: T, -- | Venue result venue :: Venue, -- | URL of the result thumbnail, if it exists thumbnailUrl :: T, -- | Thumbnail width, if known thumbnailWidth :: I32, -- | Thumbnail height, if known thumbnailHeight :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents a link to a page containing an embedded video player or a video file InputInlineQueryResultVideo { -- | Unique identifier of the query result id :: T, -- | Title of the result title :: T, -- | Represents a link to a page containing an embedded video player or a video file description :: T, -- | The URL of the video thumbnail (JPEG), if it exists thumbnailUrl :: T, -- | URL of the embedded video player or video file videoUrl :: T, -- | MIME type of the content of the video URL, only "text/html" or "video/mp4" are currently supported mimeType :: T, -- | Width of the video videoWidth :: I32, -- | Height of the video videoHeight :: I32, -- | Video duration, in seconds videoDuration :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageVideo, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } | -- | Represents a link to an opus-encoded audio file within an OGG container, single channel audio InputInlineQueryResultVoiceNote { -- | Unique identifier of the query result id :: T, -- | Title of the voice note title :: T, -- | The URL of the voice note file voiceNoteUrl :: T, -- | Duration of the voice note, in seconds voiceNoteDuration :: I32, -- | The message reply markup. Must be of type replyMarkupInlineKeyboard or null replyMarkup :: ReplyMarkup, -- | The content of the message to be sent. Must be one of the following types: InputMessageText, InputMessageVoiceNote, InputMessageLocation, InputMessageVenue or InputMessageContact inputMessageContent :: InputMessageContent } deriving (Show, Eq, Generic) -- | Represents a single result of an inline query data InlineQueryResult = -- | Represents a link to an article or web page InlineQueryResultArticle { -- | Unique identifier of the query result id :: T, -- | URL of the result, if it exists url :: T, -- | True, if the URL must be not shown hideUrl :: Bool, -- | Title of the result title :: T, -- | Represents a link to an article or web page description :: T, -- | Result thumbnail in JPEG format; may be null thumbnail :: (Maybe) (Thumbnail) } | -- | Represents a user contact InlineQueryResultContact { -- | Unique identifier of the query result id :: T, -- | A user contact contact :: Contact, -- | Result thumbnail in JPEG format; may be null thumbnail :: (Maybe) (Thumbnail) } | -- | Represents a point on the map InlineQueryResultLocation { -- | Unique identifier of the query result id :: T, -- | Location result location :: Location, -- | Title of the result title :: T, -- | Result thumbnail in JPEG format; may be null thumbnail :: (Maybe) (Thumbnail) } | -- | Represents information about a venue InlineQueryResultVenue { -- | Unique identifier of the query result id :: T, -- | Venue result venue :: Venue, -- | Result thumbnail in JPEG format; may be null thumbnail :: (Maybe) (Thumbnail) } | -- | Represents information about a game InlineQueryResultGame { -- | Unique identifier of the query result id :: T, -- | Game result game :: Game } | -- | Represents an animation file InlineQueryResultAnimation { -- | Unique identifier of the query result id :: T, -- | Animation file animation :: Animation, -- | Animation title title :: T } | -- | Represents an audio file InlineQueryResultAudio { -- | Unique identifier of the query result id :: T, -- | Audio file audio :: Audio } | -- | Represents a document InlineQueryResultDocument { -- | Unique identifier of the query result id :: T, -- | Document document :: Document, -- | Document title title :: T, -- | Represents a document description :: T } | -- | Represents a photo InlineQueryResultPhoto { -- | Unique identifier of the query result id :: T, -- | Photo photo :: Photo, -- | Title of the result, if known title :: T, -- | Represents a photo description :: T } | -- | Represents a sticker InlineQueryResultSticker { -- | Unique identifier of the query result id :: T, -- | Sticker sticker :: Sticker } | -- | Represents a video InlineQueryResultVideo { -- | Unique identifier of the query result id :: T, -- | Video video :: Video, -- | Title of the video title :: T, -- | Represents a video description :: T } | -- | Represents a voice note InlineQueryResultVoiceNote { -- | Unique identifier of the query result id :: T, -- | Voice note voiceNote :: VoiceNote, -- | Title of the voice note title :: T } deriving (Show, Eq, Generic) data InlineQueryResults = -- | Represents the results of the inline query. Use sendInlineQueryResultMessage to send the result of the query InlineQueryResults { -- | Unique identifier of the inline query inlineQueryId :: I64, -- | The offset for the next request. If empty, there are no more results nextOffset :: T, -- | Results of the query results :: [InlineQueryResult], -- | If non-empty, this text should be shown on the button, which opens a private chat with the bot and sends the bot a start message with the switch_pm_parameter switchPmText :: T, -- | Parameter for the bot start message switchPmParameter :: T } deriving (Show, Eq, Generic) -- | Represents a payload of a callback query data CallbackQueryPayload = -- | The payload from a general callback button CallbackQueryPayloadData { -- | Data that was attached to the callback button data_ :: ByteString64 } | -- | The payload from a game callback button CallbackQueryPayloadGame { -- | A short name of the game that was attached to the callback button gameShortName :: T } deriving (Show, Eq, Generic) data CallbackQueryAnswer = -- | Contains a bot's answer to a callback query CallbackQueryAnswer { -- | Text of the answer text :: T, -- | True, if an alert should be shown to the user instead of a toast notification showAlert :: Bool, -- | URL to be opened url :: T } deriving (Show, Eq, Generic) data CustomRequestResult = -- | Contains the result of a custom request CustomRequestResult { -- | A JSON-serialized result result :: T } deriving (Show, Eq, Generic) data GameHighScore = -- | Contains one row of the game high score table GameHighScore { -- | Position in the high score table position :: I32, -- | User identifier userId :: I32, -- | User score score :: I32 } deriving (Show, Eq, Generic) data GameHighScores = -- | Contains a list of game high scores GameHighScores { -- | A list of game high scores scores :: [GameHighScore] } deriving (Show, Eq, Generic) -- | Represents a chat event data ChatEventAction = -- | A message was edited ChatEventMessageEdited { -- | The original message before the edit oldMessage :: Message, -- | The message after it was edited newMessage :: Message } | -- | A message was deleted ChatEventMessageDeleted { -- | Deleted message message :: Message } | -- | A poll in a message was stopped ChatEventPollStopped { -- | The message with the poll message :: Message } | -- | A message was pinned ChatEventMessagePinned { -- | Pinned message message :: Message } | -- | A message was unpinned ChatEventMessageUnpinned { } | -- | A new member joined the chat ChatEventMemberJoined { } | -- | A member left the chat ChatEventMemberLeft { } | -- | A new chat member was invited ChatEventMemberInvited { -- | New member user identifier userId :: I32, -- | New member status status :: ChatMemberStatus } | -- | A chat member has gained/lost administrator status, or the list of their administrator privileges has changed ChatEventMemberPromoted { -- | Chat member user identifier userId :: I32, -- | Previous status of the chat member oldStatus :: ChatMemberStatus, -- | New status of the chat member newStatus :: ChatMemberStatus } | -- | A chat member was restricted/unrestricted or banned/unbanned, or the list of their restrictions has changed ChatEventMemberRestricted { -- | Chat member user identifier userId :: I32, -- | Previous status of the chat member oldStatus :: ChatMemberStatus, -- | New status of the chat member newStatus :: ChatMemberStatus } | -- | The chat title was changed ChatEventTitleChanged { -- | Previous chat title oldTitle :: T, -- | New chat title newTitle :: T } | -- | The chat permissions was changed ChatEventPermissionsChanged { -- | Previous chat permissions oldPermissions :: ChatPermissions, -- | New chat permissions newPermissions :: ChatPermissions } | -- | The chat description was changed ChatEventDescriptionChanged { -- | Previous chat description oldDescription :: T, -- | New chat description newDescription :: T } | -- | The chat username was changed ChatEventUsernameChanged { -- | Previous chat username oldUsername :: T, -- | New chat username newUsername :: T } | -- | The chat photo was changed ChatEventPhotoChanged { -- | Previous chat photo value; may be null oldPhoto :: (Maybe) (Photo), -- | New chat photo value; may be null newPhoto :: (Maybe) (Photo) } | -- | The can_invite_users permission of a supergroup chat was toggled ChatEventInvitesToggled { -- | New value of can_invite_users permission canInviteUsers :: Bool } | -- | The linked chat of a supergroup was changed ChatEventLinkedChatChanged { -- | Previous supergroup linked chat identifier oldLinkedChatId :: I53, -- | New supergroup linked chat identifier newLinkedChatId :: I53 } | -- | The slow_mode_delay setting of a supergroup was changed ChatEventSlowModeDelayChanged { -- | Previous value of slow_mode_delay oldSlowModeDelay :: I32, -- | New value of slow_mode_delay newSlowModeDelay :: I32 } | -- | The sign_messages setting of a channel was toggled ChatEventSignMessagesToggled { -- | New value of sign_messages signMessages :: Bool } | -- | The supergroup sticker set was changed ChatEventStickerSetChanged { -- | Previous identifier of the chat sticker set; 0 if none oldStickerSetId :: I64, -- | New identifier of the chat sticker set; 0 if none newStickerSetId :: I64 } | -- | The supergroup location was changed ChatEventLocationChanged { -- | Previous location; may be null oldLocation :: (Maybe) (ChatLocation), -- | New location; may be null newLocation :: (Maybe) (ChatLocation) } | -- | The is_all_history_available setting of a supergroup was toggled ChatEventIsAllHistoryAvailableToggled { -- | New value of is_all_history_available isAllHistoryAvailable :: Bool } deriving (Show, Eq, Generic) data ChatEvent = -- | Represents a chat event ChatEvent { -- | Chat event identifier id :: I64, -- | Point in time (Unix timestamp) when the event happened date :: I32, -- | Identifier of the user who performed the action that triggered the event userId :: I32, -- | Action performed by the user action :: ChatEventAction } deriving (Show, Eq, Generic) data ChatEvents = -- | Contains a list of chat events ChatEvents { -- | List of events events :: [ChatEvent] } deriving (Show, Eq, Generic) data ChatEventLogFilters = -- | Represents a set of filters used to obtain a chat event log ChatEventLogFilters { -- | True, if message edits should be returned messageEdits :: Bool, -- | True, if message deletions should be returned messageDeletions :: Bool, -- | True, if pin/unpin events should be returned messagePins :: Bool, -- | True, if members joining events should be returned memberJoins :: Bool, -- | True, if members leaving events should be returned memberLeaves :: Bool, -- | True, if invited member events should be returned memberInvites :: Bool, -- | True, if member promotion/demotion events should be returned memberPromotions :: Bool, -- | True, if member restricted/unrestricted/banned/unbanned events should be returned memberRestrictions :: Bool, -- | True, if changes in chat information should be returned infoChanges :: Bool, -- | True, if changes in chat settings should be returned settingChanges :: Bool } deriving (Show, Eq, Generic) -- | Represents the value of a string in a language pack data LanguagePackStringValue = -- | An ordinary language pack string LanguagePackStringValueOrdinary { -- | String value value :: T } | -- | A language pack string which has different forms based on the number of some object it mentions. See https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html for more info LanguagePackStringValuePluralized { -- | Value for zero objects zeroValue :: T, -- | Value for one object oneValue :: T, -- | Value for two objects twoValue :: T, -- | Value for few objects fewValue :: T, -- | Value for many objects manyValue :: T, -- | Default value otherValue :: T } | -- | A deleted language pack string, the value should be taken from the built-in english language pack LanguagePackStringValueDeleted { } deriving (Show, Eq, Generic) data LanguagePackString = -- | Represents one language pack string LanguagePackString { -- | String key key :: T, -- | String value value :: LanguagePackStringValue } deriving (Show, Eq, Generic) data LanguagePackStrings = -- | Contains a list of language pack strings LanguagePackStrings { -- | A list of language pack strings strings :: [LanguagePackString] } deriving (Show, Eq, Generic) data LanguagePackInfo = -- | Contains information about a language pack LanguagePackInfo { -- | Unique language pack identifier id :: T, -- | Identifier of a base language pack; may be empty. If a string is missed in the language pack, then it should be fetched from base language pack. Unsupported in custom language packs baseLanguagePackId :: T, -- | Language name name :: T, -- | Name of the language in that language nativeName :: T, -- | A language code to be used to apply plural forms. See https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html for more info pluralCode :: T, -- | True, if the language pack is official isOfficial :: Bool, -- | True, if the language pack strings are RTL isRtl :: Bool, -- | True, if the language pack is a beta language pack isBeta :: Bool, -- | True, if the language pack is installed by the current user isInstalled :: Bool, -- | Total number of non-deleted strings from the language pack totalStringCount :: I32, -- | Total number of translated strings from the language pack translatedStringCount :: I32, -- | Total number of non-deleted strings from the language pack available locally localStringCount :: I32, -- | Link to language translation interface; empty for custom local language packs translationUrl :: T } deriving (Show, Eq, Generic) data LocalizationTargetInfo = -- | Contains information about the current localization target LocalizationTargetInfo { -- | List of available language packs for this application languagePacks :: [LanguagePackInfo] } deriving (Show, Eq, Generic) -- | Represents a data needed to subscribe for push notifications through registerDevice method. To use specific push notification service, you must specify the correct application platform and upload valid server authentication data at https://my.telegram.org data DeviceToken = -- | A token for Firebase Cloud Messaging DeviceTokenFirebaseCloudMessaging { -- | Device registration token; may be empty to de-register a device token :: T, -- | True, if push notifications should be additionally encrypted encrypt :: Bool } | -- | A token for Apple Push Notification service DeviceTokenApplePush { -- | Device token; may be empty to de-register a device deviceToken :: T, -- | True, if App Sandbox is enabled isAppSandbox :: Bool } | -- | A token for Apple Push Notification service VoIP notifications DeviceTokenApplePushVoIP { -- | Device token; may be empty to de-register a device deviceToken :: T, -- | True, if App Sandbox is enabled isAppSandbox :: Bool, -- | True, if push notifications should be additionally encrypted encrypt :: Bool } | -- | A token for Windows Push Notification Services DeviceTokenWindowsPush { -- | The access token that will be used to send notifications; may be empty to de-register a device accessToken :: T } | -- | A token for Microsoft Push Notification Service DeviceTokenMicrosoftPush { -- | Push notification channel URI; may be empty to de-register a device channelUri :: T } | -- | A token for Microsoft Push Notification Service VoIP channel DeviceTokenMicrosoftPushVoIP { -- | Push notification channel URI; may be empty to de-register a device channelUri :: T } | -- | A token for web Push API DeviceTokenWebPush { -- | Absolute URL exposed by the push service where the application server can send push messages; may be empty to de-register a device endpoint :: T, -- | Base64url-encoded P-256 elliptic curve Diffie-Hellman public key p256dhBase64url :: T, -- | Base64url-encoded authentication secret authBase64url :: T } | -- | A token for Simple Push API for Firefox OS DeviceTokenSimplePush { -- | Absolute URL exposed by the push service where the application server can send push messages; may be empty to de-register a device endpoint :: T } | -- | A token for Ubuntu Push Client service DeviceTokenUbuntuPush { -- | Token; may be empty to de-register a device token :: T } | -- | A token for BlackBerry Push Service DeviceTokenBlackBerryPush { -- | Token; may be empty to de-register a device token :: T } | -- | A token for Tizen Push Service DeviceTokenTizenPush { -- | Push service registration identifier; may be empty to de-register a device regId :: T } deriving (Show, Eq, Generic) data PushReceiverId = -- | Contains a globally unique push receiver identifier, which can be used to identify which account has received a push notification PushReceiverId { -- | The globally unique identifier of push notification subscription id :: I64 } deriving (Show, Eq, Generic) -- | Describes a fill of a background data BackgroundFill = -- | Describes a solid fill of a background BackgroundFillSolid { -- | A color of the background in the RGB24 format color :: I32 } | -- | Describes a gradient fill of a background BackgroundFillGradient { -- | A top color of the background in the RGB24 format topColor :: I32, -- | A bottom color of the background in the RGB24 format bottomColor :: I32, -- | Clockwise rotation angle of the gradient, in degrees; 0-359. Should be always divisible by 45 rotationAngle :: I32 } deriving (Show, Eq, Generic) -- | Describes the type of a background data BackgroundType = -- | A wallpaper in JPEG format BackgroundTypeWallpaper { -- | True, if the wallpaper must be downscaled to fit in 450x450 square and then box-blurred with radius 12 isBlurred :: Bool, -- | True, if the background needs to be slightly moved when device is tilted isMoving :: Bool } | -- | A PNG or TGV (gzipped subset of SVG with MIME type "application/x-tgwallpattern") pattern to be combined with the background fill chosen by the user BackgroundTypePattern { -- | Description of the background fill fill :: BackgroundFill, -- | Intensity of the pattern when it is shown above the filled background, 0-100 intensity :: I32, -- | True, if the background needs to be slightly moved when device is tilted isMoving :: Bool } | -- | A filled background BackgroundTypeFill { -- | Description of the background fill fill :: BackgroundFill } deriving (Show, Eq, Generic) data Background = -- | Describes a chat background Background { -- | Unique background identifier id :: I64, -- | True, if this is one of default backgrounds isDefault :: Bool, -- | True, if the background is dark and is recommended to be used with dark theme isDark :: Bool, -- | Unique background name name :: T, -- | Document with the background; may be null. Null only for filled backgrounds document :: (Maybe) (Document), -- | Type of the background type_ :: BackgroundType } deriving (Show, Eq, Generic) data Backgrounds = -- | Contains a list of backgrounds Backgrounds { -- | A list of backgrounds backgrounds :: [Background] } deriving (Show, Eq, Generic) -- | Contains information about background to set data InputBackground = -- | A background from a local file InputBackgroundLocal { -- | Background file to use. Only inputFileLocal and inputFileGenerated are supported. The file must be in JPEG format for wallpapers and in PNG format for patterns background :: InputFile } | -- | A background from the server InputBackgroundRemote { -- | The background identifier backgroundId :: I64 } deriving (Show, Eq, Generic) data Hashtags = -- | Contains a list of hashtags Hashtags { -- | A list of hashtags hashtags :: [T] } deriving (Show, Eq, Generic) -- | Represents result of checking whether the current session can be used to transfer a chat ownership to another user data CanTransferOwnershipResult = -- | The session can be used CanTransferOwnershipResultOk { } | -- | The 2-step verification needs to be enabled first CanTransferOwnershipResultPasswordNeeded { } | -- | The 2-step verification was enabled recently, user needs to wait CanTransferOwnershipResultPasswordTooFresh { -- | Time left before the session can be used to transfer ownership of a chat, in seconds retryAfter :: I32 } | -- | The session was created recently, user needs to wait CanTransferOwnershipResultSessionTooFresh { -- | Time left before the session can be used to transfer ownership of a chat, in seconds retryAfter :: I32 } deriving (Show, Eq, Generic) -- | Represents result of checking whether a username can be set for a chat data CheckChatUsernameResult = -- | The username can be set CheckChatUsernameResultOk { } | -- | The username is invalid CheckChatUsernameResultUsernameInvalid { } | -- | The username is occupied CheckChatUsernameResultUsernameOccupied { } | -- | The user has too much chats with username, one of them should be made private first CheckChatUsernameResultPublicChatsTooMuch { } | -- | The user can't be a member of a public supergroup CheckChatUsernameResultPublicGroupsUnavailable { } deriving (Show, Eq, Generic) -- | Contains content of a push message notification data PushMessageContent = -- | A general message with hidden content PushMessageContentHidden { -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | An animation message (GIF-style). PushMessageContentAnimation { -- | Message content; may be null animation :: (Maybe) (Animation), -- | Animation caption caption :: T, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | An audio message PushMessageContentAudio { -- | Message content; may be null audio :: (Maybe) (Audio), -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A message with a user contact PushMessageContentContact { -- | Contact's name name :: T, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A contact has registered with Telegram PushMessageContentContactRegistered { } | -- | A document message (a general file) PushMessageContentDocument { -- | Message content; may be null document :: (Maybe) (Document), -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A message with a game PushMessageContentGame { -- | Game title, empty for pinned game message title :: T, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A new high score was achieved in a game PushMessageContentGameScore { -- | Game title, empty for pinned message title :: T, -- | New score, 0 for pinned message score :: I32, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A message with an invoice from a bot PushMessageContentInvoice { -- | Product price price :: T, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A message with a location PushMessageContentLocation { -- | True, if the location is live isLive :: Bool, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A photo message PushMessageContentPhoto { -- | Message content; may be null photo :: (Maybe) (Photo), -- | Photo caption caption :: T, -- | True, if the photo is secret isSecret :: Bool, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A message with a poll PushMessageContentPoll { -- | Poll question question :: T, -- | True, if the poll is regular and not in quiz mode isRegular :: Bool, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A screenshot of a message in the chat has been taken PushMessageContentScreenshotTaken { } | -- | A message with a sticker PushMessageContentSticker { -- | Message content; may be null sticker :: (Maybe) (Sticker), -- | Emoji corresponding to the sticker; may be empty emoji :: T, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A text message PushMessageContentText { -- | Message text text :: T, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A video message PushMessageContentVideo { -- | Message content; may be null video :: (Maybe) (Video), -- | Video caption caption :: T, -- | True, if the video is secret isSecret :: Bool, -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A video note message PushMessageContentVideoNote { -- | Message content; may be null videoNote :: (Maybe) (VideoNote), -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A voice note message PushMessageContentVoiceNote { -- | Message content; may be null voiceNote :: (Maybe) (VoiceNote), -- | True, if the message is a pinned message with the specified content isPinned :: Bool } | -- | A newly created basic group PushMessageContentBasicGroupChatCreate { } | -- | New chat members were invited to a group PushMessageContentChatAddMembers { -- | Name of the added member memberName :: T, -- | True, if the current user was added to the group isCurrentUser :: Bool, -- | True, if the user has returned to the group themself isReturned :: Bool } | -- | A chat photo was edited PushMessageContentChatChangePhoto { } | -- | A chat title was edited PushMessageContentChatChangeTitle { -- | New chat title title :: T } | -- | A chat member was deleted PushMessageContentChatDeleteMember { -- | Name of the deleted member memberName :: T, -- | True, if the current user was deleted from the group isCurrentUser :: Bool, -- | True, if the user has left the group themself isLeft :: Bool } | -- | A new member joined the chat by invite link PushMessageContentChatJoinByLink { } | -- | A forwarded messages PushMessageContentMessageForwards { -- | Number of forwarded messages totalCount :: I32 } | -- | A media album PushMessageContentMediaAlbum { -- | Number of messages in the album totalCount :: I32, -- | True, if the album has at least one photo hasPhotos :: Bool, -- | True, if the album has at least one video hasVideos :: Bool } deriving (Show, Eq, Generic) -- | Contains detailed information about a notification data NotificationType = -- | New message was received NotificationTypeNewMessage { -- | The message message :: Message } | -- | New secret chat was created NotificationTypeNewSecretChat { } | -- | New call was received NotificationTypeNewCall { -- | Call identifier callId :: I32 } | -- | New message was received through a push notification NotificationTypeNewPushMessage { -- | The message identifier. The message will not be available in the chat history, but the ID can be used in viewMessages and as reply_to_message_id messageId :: I53, -- | Sender of the message; 0 if unknown. Corresponding user may be inaccessible senderUserId :: I32, -- | Name of the sender; can be different from the name of the sender user senderName :: T, -- | True, if the message is outgoing isOutgoing :: Bool, -- | Push message content content :: PushMessageContent } deriving (Show, Eq, Generic) -- | Describes the type of notifications in a notification group data NotificationGroupType = -- | A group containing notifications of type notificationTypeNewMessage and notificationTypeNewPushMessage with ordinary unread messages NotificationGroupTypeMessages { } | -- | A group containing notifications of type notificationTypeNewMessage and notificationTypeNewPushMessage with unread mentions of the current user, replies to their messages, or a pinned message NotificationGroupTypeMentions { } | -- | A group containing a notification of type notificationTypeNewSecretChat NotificationGroupTypeSecretChat { } | -- | A group containing notifications of type notificationTypeNewCall NotificationGroupTypeCalls { } deriving (Show, Eq, Generic) data Notification = -- | Contains information about a notification Notification { -- | Unique persistent identifier of this notification id :: I32, -- | Notification date date :: I32, -- | True, if the notification was initially silent isSilent :: Bool, -- | Notification type type_ :: NotificationType } deriving (Show, Eq, Generic) data NotificationGroup = -- | Describes a group of notifications NotificationGroup { -- | Unique persistent auto-incremented from 1 identifier of the notification group id :: I32, -- | Type of the group type_ :: NotificationGroupType, -- | Identifier of a chat to which all notifications in the group belong chatId :: I53, -- | Total number of active notifications in the group totalCount :: I32, -- | The list of active notifications notifications :: [Notification] } deriving (Show, Eq, Generic) -- | Represents the value of an option data OptionValue = -- | Represents a boolean option OptionValueBoolean { -- | The value of the option value_3 :: Bool } | -- | Represents an unknown option or an option which has a default value OptionValueEmpty { } | -- | Represents an integer option OptionValueInteger { -- | The value of the option value_2 :: I32 } | -- | Represents a string option OptionValueString { -- | The value of the option value :: T } deriving (Show, Eq, Generic) data JsonObjectMember = -- | Represents one member of a JSON object JsonObjectMember { -- | Member's key key :: T, -- | Member's value value :: JsonValue } deriving (Show, Eq, Generic) -- | Represents a JSON value data JsonValue = -- | Represents a null JSON value JsonValueNull { } | -- | Represents a boolean JSON value JsonValueBoolean { -- | The value value_3 :: Bool } | -- | Represents a numeric JSON value JsonValueNumber { -- | The value value_2 :: Double } | -- | Represents a string JSON value JsonValueString { -- | The value value :: T } | -- | Represents a JSON array JsonValueArray { -- | The list of array elements values :: [JsonValue] } | -- | Represents a JSON object JsonValueObject { -- | The list of object members members :: [JsonObjectMember] } deriving (Show, Eq, Generic) -- | Represents a single rule for managing privacy settings data UserPrivacySettingRule = -- | A rule to allow all users to do something UserPrivacySettingRuleAllowAll { } | -- | A rule to allow all of a user's contacts to do something UserPrivacySettingRuleAllowContacts { } | -- | A rule to allow certain specified users to do something UserPrivacySettingRuleAllowUsers { -- | The user identifiers, total number of users in all rules must not exceed 1000 userIds :: [I32] } | -- | A rule to allow all members of certain specified basic groups and supergroups to doing something UserPrivacySettingRuleAllowChatMembers { -- | The chat identifiers, total number of chats in all rules must not exceed 20 chatIds :: [I53] } | -- | A rule to restrict all users from doing something UserPrivacySettingRuleRestrictAll { } | -- | A rule to restrict all contacts of a user from doing something UserPrivacySettingRuleRestrictContacts { } | -- | A rule to restrict all specified users from doing something UserPrivacySettingRuleRestrictUsers { -- | The user identifiers, total number of users in all rules must not exceed 1000 userIds :: [I32] } | -- | A rule to restrict all members of specified basic groups and supergroups from doing something UserPrivacySettingRuleRestrictChatMembers { -- | The chat identifiers, total number of chats in all rules must not exceed 20 chatIds :: [I53] } deriving (Show, Eq, Generic) data UserPrivacySettingRules = -- | A list of privacy rules. Rules are matched in the specified order. The first matched rule defines the privacy setting for a given user. If no rule matches, the action is not allowed UserPrivacySettingRules { -- | A list of rules rules :: [UserPrivacySettingRule] } deriving (Show, Eq, Generic) -- | Describes available user privacy settings data UserPrivacySetting = -- | A privacy setting for managing whether the user's online status is visible UserPrivacySettingShowStatus { } | -- | A privacy setting for managing whether the user's profile photo is visible UserPrivacySettingShowProfilePhoto { } | -- | A privacy setting for managing whether a link to the user's account is included in forwarded messages UserPrivacySettingShowLinkInForwardedMessages { } | -- | A privacy setting for managing whether the user's phone number is visible UserPrivacySettingShowPhoneNumber { } | -- | A privacy setting for managing whether the user can be invited to chats UserPrivacySettingAllowChatInvites { } | -- | A privacy setting for managing whether the user can be called UserPrivacySettingAllowCalls { } | -- | A privacy setting for managing whether peer-to-peer connections can be used for calls UserPrivacySettingAllowPeerToPeerCalls { } | -- | A privacy setting for managing whether the user can be found by their phone number. Checked only if the phone number is not known to the other user. Can be set only to "Allow contacts" or "Allow all" UserPrivacySettingAllowFindingByPhoneNumber { } deriving (Show, Eq, Generic) data AccountTtl = -- | Contains information about the period of inactivity after which the current user's account will automatically be deleted AccountTtl { -- | Number of days of inactivity before the account will be flagged for deletion; should range from 30-366 days days :: I32 } deriving (Show, Eq, Generic) data Session = -- | Contains information about one session in a Telegram application used by the current user. Sessions should be shown to the user in the returned order Session { -- | Session identifier id :: I64, -- | True, if this session is the current session isCurrent :: Bool, -- | True, if a password is needed to complete authorization of the session isPasswordPending :: Bool, -- | Telegram API identifier, as provided by the application apiId :: I32, -- | Name of the application, as provided by the application applicationName :: T, -- | The version of the application, as provided by the application applicationVersion :: T, -- | True, if the application is an official application or uses the api_id of an official application isOfficialApplication :: Bool, -- | Model of the device the application has been run or is running on, as provided by the application deviceModel :: T, -- | Operating system the application has been run or is running on, as provided by the application platform :: T, -- | Version of the operating system the application has been run or is running on, as provided by the application systemVersion :: T, -- | Point in time (Unix timestamp) when the user has logged in logInDate :: I32, -- | Point in time (Unix timestamp) when the session was last used lastActiveDate :: I32, -- | IP address from which the session was created, in human-readable format ip :: T, -- | A two-letter country code for the country from which the session was created, based on the IP address country :: T, -- | Region code from which the session was created, based on the IP address region :: T } deriving (Show, Eq, Generic) data Sessions = -- | Contains a list of sessions Sessions { -- | List of sessions sessions :: [Session] } deriving (Show, Eq, Generic) data ConnectedWebsite = -- | Contains information about one website the current user is logged in with Telegram ConnectedWebsite { -- | Website identifier id :: I64, -- | The domain name of the website domainName :: T, -- | User identifier of a bot linked with the website botUserId :: I32, -- | The version of a browser used to log in browser :: T, -- | Operating system the browser is running on platform :: T, -- | Point in time (Unix timestamp) when the user was logged in logInDate :: I32, -- | Point in time (Unix timestamp) when obtained authorization was last used lastActiveDate :: I32, -- | IP address from which the user was logged in, in human-readable format ip :: T, -- | Human-readable description of a country and a region, from which the user was logged in, based on the IP address location :: T } deriving (Show, Eq, Generic) data ConnectedWebsites = -- | Contains a list of websites the current user is logged in with Telegram ConnectedWebsites { -- | List of connected websites websites :: [ConnectedWebsite] } deriving (Show, Eq, Generic) -- | Describes the reason why a chat is reported data ChatReportReason = -- | The chat contains spam messages ChatReportReasonSpam { } | -- | The chat promotes violence ChatReportReasonViolence { } | -- | The chat contains pornographic messages ChatReportReasonPornography { } | -- | The chat has child abuse related content ChatReportReasonChildAbuse { } | -- | The chat contains copyrighted content ChatReportReasonCopyright { } | -- | The location-based chat is unrelated to its stated location ChatReportReasonUnrelatedLocation { } | -- | A custom reason provided by the user ChatReportReasonCustom { -- | Report text text :: T } deriving (Show, Eq, Generic) data PublicMessageLink = -- | Contains a public HTTPS link to a message in a supergroup or channel with a username PublicMessageLink { -- | Message link link :: T, -- | HTML-code for embedding the message html :: T } deriving (Show, Eq, Generic) data MessageLinkInfo = -- | Contains information about a link to a message in a chat MessageLinkInfo { -- | True, if the link is a public link for a message in a chat isPublic :: Bool, -- | If found, identifier of the chat to which the message belongs, 0 otherwise chatId :: I53, -- | If found, the linked message; may be null message :: (Maybe) (Message), -- | True, if the whole media album to which the message belongs is linked forAlbum :: Bool } deriving (Show, Eq, Generic) data FilePart = -- | Contains a part of a file FilePart { -- | File bytes data_ :: ByteString64 } deriving (Show, Eq, Generic) -- | Represents the type of a file data FileType = -- | The data is not a file FileTypeNone { } | -- | The file is an animation FileTypeAnimation { } | -- | The file is an audio file FileTypeAudio { } | -- | The file is a document FileTypeDocument { } | -- | The file is a photo FileTypePhoto { } | -- | The file is a profile photo FileTypeProfilePhoto { } | -- | The file was sent to a secret chat (the file type is not known to the server) FileTypeSecret { } | -- | The file is a thumbnail of a file from a secret chat FileTypeSecretThumbnail { } | -- | The file is a file from Secure storage used for storing Telegram Passport files FileTypeSecure { } | -- | The file is a sticker FileTypeSticker { } | -- | The file is a thumbnail of another file FileTypeThumbnail { } | -- | The file type is not yet known FileTypeUnknown { } | -- | The file is a video FileTypeVideo { } | -- | The file is a video note FileTypeVideoNote { } | -- | The file is a voice note FileTypeVoiceNote { } | -- | The file is a wallpaper or a background pattern FileTypeWallpaper { } deriving (Show, Eq, Generic) data StorageStatisticsByFileType = -- | Contains the storage usage statistics for a specific file type StorageStatisticsByFileType { -- | File type fileType :: FileType, -- | Total size of the files size :: I53, -- | Total number of files count :: I32 } deriving (Show, Eq, Generic) data StorageStatisticsByChat = -- | Contains the storage usage statistics for a specific chat StorageStatisticsByChat { -- | Chat identifier; 0 if none chatId :: I53, -- | Total size of the files in the chat size :: I53, -- | Total number of files in the chat count :: I32, -- | Statistics split by file types byFileType :: [StorageStatisticsByFileType] } deriving (Show, Eq, Generic) data StorageStatistics = -- | Contains the exact storage usage statistics split by chats and file type StorageStatistics { -- | Total size of files size :: I53, -- | Total number of files count :: I32, -- | Statistics split by chats byChat :: [StorageStatisticsByChat] } deriving (Show, Eq, Generic) data StorageStatisticsFast = -- | Contains approximate storage usage statistics, excluding files of unknown file type StorageStatisticsFast { -- | Approximate total size of files filesSize :: I53, -- | Approximate number of files fileCount :: I32, -- | Size of the database databaseSize :: I53, -- | Size of the language pack database languagePackDatabaseSize :: I53, -- | Size of the TDLib internal log logSize :: I53 } deriving (Show, Eq, Generic) data DatabaseStatistics = -- | Contains database statistics DatabaseStatistics { -- | Database statistics in an unspecified human-readable format statistics :: T } deriving (Show, Eq, Generic) -- | Represents the type of a network data NetworkType = -- | The network is not available NetworkTypeNone { } | -- | A mobile network NetworkTypeMobile { } | -- | A mobile roaming network NetworkTypeMobileRoaming { } | -- | A Wi-Fi network NetworkTypeWiFi { } | -- | A different network type (e.g., Ethernet network) NetworkTypeOther { } deriving (Show, Eq, Generic) -- | Contains statistics about network usage data NetworkStatisticsEntry = -- | Contains information about the total amount of data that was used to send and receive files NetworkStatisticsEntryFile { -- | Type of the file the data is part of fileType :: FileType, -- | Type of the network the data was sent through. Call setNetworkType to maintain the actual network type networkType :: NetworkType, -- | Total number of bytes sent sentBytes :: I53, -- | Total number of bytes received receivedBytes :: I53 } | -- | Contains information about the total amount of data that was used for calls NetworkStatisticsEntryCall { -- | Type of the network the data was sent through. Call setNetworkType to maintain the actual network type networkType :: NetworkType, -- | Total number of bytes sent sentBytes :: I53, -- | Total number of bytes received receivedBytes :: I53, -- | Total call duration, in seconds duration :: Double } deriving (Show, Eq, Generic) data NetworkStatistics = -- | A full list of available network statistic entries NetworkStatistics { -- | Point in time (Unix timestamp) when the app began collecting statistics sinceDate :: I32, -- | Network statistics entries entries :: [NetworkStatisticsEntry] } deriving (Show, Eq, Generic) data AutoDownloadSettings = -- | Contains auto-download settings AutoDownloadSettings { -- | True, if the auto-download is enabled isAutoDownloadEnabled :: Bool, -- | The maximum size of a photo file to be auto-downloaded maxPhotoFileSize :: I32, -- | The maximum size of a video file to be auto-downloaded maxVideoFileSize :: I32, -- | The maximum size of other file types to be auto-downloaded maxOtherFileSize :: I32, -- | The maximum suggested bitrate for uploaded videos videoUploadBitrate :: I32, -- | True, if the beginning of videos needs to be preloaded for instant playback preloadLargeVideos :: Bool, -- | True, if the next audio track needs to be preloaded while the user is listening to an audio file preloadNextAudio :: Bool, -- | True, if "use less data for calls" option needs to be enabled useLessDataForCalls :: Bool } deriving (Show, Eq, Generic) data AutoDownloadSettingsPresets = -- | Contains auto-download settings presets for the user AutoDownloadSettingsPresets { -- | Preset with lowest settings; supposed to be used by default when roaming low :: AutoDownloadSettings, -- | Preset with medium settings; supposed to be used by default when using mobile data medium :: AutoDownloadSettings, -- | Preset with highest settings; supposed to be used by default when connected on Wi-Fi high :: AutoDownloadSettings } deriving (Show, Eq, Generic) -- | Describes the current state of the connection to Telegram servers data ConnectionState = -- | Currently waiting for the network to become available. Use setNetworkType to change the available network type ConnectionStateWaitingForNetwork { } | -- | Currently establishing a connection with a proxy server ConnectionStateConnectingToProxy { } | -- | Currently establishing a connection to the Telegram servers ConnectionStateConnecting { } | -- | Downloading data received while the client was offline ConnectionStateUpdating { } | -- | There is a working connection to the Telegram servers ConnectionStateReady { } deriving (Show, Eq, Generic) -- | Represents the categories of chats for which a list of frequently used chats can be retrieved data TopChatCategory = -- | A category containing frequently used private chats with non-bot users TopChatCategoryUsers { } | -- | A category containing frequently used private chats with bot users TopChatCategoryBots { } | -- | A category containing frequently used basic groups and supergroups TopChatCategoryGroups { } | -- | A category containing frequently used channels TopChatCategoryChannels { } | -- | A category containing frequently used chats with inline bots sorted by their usage in inline mode TopChatCategoryInlineBots { } | -- | A category containing frequently used chats used for calls TopChatCategoryCalls { } | -- | A category containing frequently used chats used to forward messages TopChatCategoryForwardChats { } deriving (Show, Eq, Generic) -- | Describes the type of a URL linking to an internal Telegram entity data TMeUrlType = -- | A URL linking to a user TMeUrlTypeUser { -- | Identifier of the user userId :: I32 } | -- | A URL linking to a public supergroup or channel TMeUrlTypeSupergroup { -- | Identifier of the supergroup or channel supergroupId :: I53 } | -- | A chat invite link TMeUrlTypeChatInvite { -- | Chat invite link info info :: ChatInviteLinkInfo } | -- | A URL linking to a sticker set TMeUrlTypeStickerSet { -- | Identifier of the sticker set stickerSetId :: I64 } deriving (Show, Eq, Generic) data TMeUrl = -- | Represents a URL linking to an internal Telegram entity TMeUrl { -- | URL url :: T, -- | Type of the URL type_ :: TMeUrlType } deriving (Show, Eq, Generic) data TMeUrls = -- | Contains a list of t.me URLs TMeUrls { -- | List of URLs urls :: [TMeUrl] } deriving (Show, Eq, Generic) data Count = -- | Contains a counter Count { -- | Count count :: I32 } deriving (Show, Eq, Generic) data Text = -- | Contains some text Text { -- | Text text :: T } deriving (Show, Eq, Generic) data Seconds = -- | Contains a value representing a number of seconds Seconds { -- | Number of seconds seconds :: Double } deriving (Show, Eq, Generic) data DeepLinkInfo = -- | Contains information about a tg:// deep link DeepLinkInfo { -- | Text to be shown to the user text :: FormattedText, -- | True, if user should be asked to update the application needUpdateApplication :: Bool } deriving (Show, Eq, Generic) -- | Describes the way the text should be parsed for TextEntities data TextParseMode = -- | The text uses Markdown-style formatting TextParseModeMarkdown { -- | Version of the parser: 0 or 1 - Telegram Bot API "Markdown" parse mode, 2 - Telegram Bot API "MarkdownV2" parse mode version :: I32 } | -- | The text uses HTML-style formatting. The same as Telegram Bot API "HTML" parse mode TextParseModeHTML { } deriving (Show, Eq, Generic) -- | Describes the type of a proxy server data ProxyType = -- | A SOCKS5 proxy server ProxyTypeSocks5 { -- | Username for logging in; may be empty username :: T, -- | Password for logging in; may be empty password :: T } | -- | A HTTP transparent proxy server ProxyTypeHttp { -- | Username for logging in; may be empty username :: T, -- | Password for logging in; may be empty password :: T, -- | Pass true if the proxy supports only HTTP requests and doesn't support transparent TCP connections via HTTP CONNECT method httpOnly :: Bool } | -- | An MTProto proxy server ProxyTypeMtproto { -- | The proxy's secret in hexadecimal encoding secret :: T } deriving (Show, Eq, Generic) data Proxy = -- | Contains information about a proxy server Proxy { -- | Unique identifier of the proxy id :: I32, -- | Proxy server IP address server :: T, -- | Proxy server port port :: I32, -- | Point in time (Unix timestamp) when the proxy was last used; 0 if never lastUsedDate :: I32, -- | True, if the proxy is enabled now isEnabled :: Bool, -- | Type of the proxy type_ :: ProxyType } deriving (Show, Eq, Generic) data Proxies = -- | Represents a list of proxy servers Proxies { -- | List of proxy servers proxies :: [Proxy] } deriving (Show, Eq, Generic) -- | Describes a sticker that needs to be added to a sticker set data InputSticker = -- | A static sticker in PNG format, which will be converted to WEBP server-side InputStickerStatic { -- | PNG image with the sticker; must be up to 512 KB in size and fit in a 512x512 square sticker :: InputFile, -- | Emojis corresponding to the sticker emojis :: T, -- | For masks, position where the mask should be placed; may be null maskPosition :: (Maybe) (MaskPosition) } | -- | An animated sticker in TGS format InputStickerAnimated { -- | File with the animated sticker. Only local or uploaded within a week files are supported. See https://core.telegram.org/animated_stickers#technical-requirements for technical requirements sticker :: InputFile, -- | Emojis corresponding to the sticker emojis :: T } deriving (Show, Eq, Generic) data DateRange = -- | Represents a date range DateRange { -- | Point in time (Unix timestamp) at which the date range begins startDate :: I32, -- | Point in time (Unix timestamp) at which the date range ends endDate :: I32 } deriving (Show, Eq, Generic) data StatisticsValue = -- | A statistics value StatisticsValue { -- | The value value :: Double, -- | The value for the previous day previousValue :: Double, -- | The growth rate of the value, as a percentage growthRatePercentage :: Double } deriving (Show, Eq, Generic) -- | Describes a statistics graph data StatisticsGraph = -- | A graph data StatisticsGraphData { -- | Graph data in JSON format jsonData :: T, -- | If non-empty, a token which can be used to receive a zoomed in graph zoomToken :: T } | -- | The graph data to be asynchronously loaded through getChatStatisticsGraph StatisticsGraphAsync { -- | The token to use for data loading token :: T } | -- | An error message to be shown to the user instead of the graph StatisticsGraphError { -- | The error message errorMessage :: T } deriving (Show, Eq, Generic) data ChatStatisticsMessageInteractionCounters = -- | Contains statistics about interactions with a message ChatStatisticsMessageInteractionCounters { -- | Message identifier messageId :: I53, -- | Number of times the message was viewed viewCount :: I32, -- | Number of times the message was forwarded forwardCount :: I32 } deriving (Show, Eq, Generic) data ChatStatistics = -- | A detailed statistics about a chat ChatStatistics { -- | A period to which the statistics applies period :: DateRange, -- | Number of members in the chat memberCount :: StatisticsValue, -- | Mean number of times the recently sent messages was viewed meanViewCount :: StatisticsValue, -- | Mean number of times the recently sent messages was shared meanShareCount :: StatisticsValue, -- | A percentage of users with enabled notifications for the chat enabledNotificationsPercentage :: Double, -- | A graph containing number of members in the chat memberCountGraph :: StatisticsGraph, -- | A graph containing number of members joined and left the chat joinGraph :: StatisticsGraph, -- | A graph containing number of members muted and unmuted the chat muteGraph :: StatisticsGraph, -- | A graph containing number of message views in a given hour in the last two weeks viewCountByHourGraph :: StatisticsGraph, -- | A graph containing number of message views per source viewCountBySourceGraph :: StatisticsGraph, -- | A graph containing number of new member joins per source joinBySourceGraph :: StatisticsGraph, -- | A graph containing number of users viewed chat messages per language languageGraph :: StatisticsGraph, -- | A graph containing number of chat message views and shares messageInteractionGraph :: StatisticsGraph, -- | A graph containing number of views of associated with the chat instant views instantViewInteractionGraph :: StatisticsGraph, -- | Detailed statistics about number of views and shares of recently sent messages recentMessageInteractions :: [ChatStatisticsMessageInteractionCounters] } deriving (Show, Eq, Generic) -- | Contains notifications about data changes data Update = -- | The user authorization state has changed UpdateAuthorizationState { -- | New authorization state authorizationState :: AuthorizationState } | -- | A new message was received; can also be an outgoing message UpdateNewMessage { -- | The new message message :: Message } | -- | A request to send a message has reached the Telegram server. This doesn't mean that the message will be sent successfully or even that the send message request will be processed. This update will be sent only if the option "use_quick_ack" is set to true. This update may be sent multiple times for the same message UpdateMessageSendAcknowledged { -- | The chat identifier of the sent message chatId :: I53, -- | A temporary message identifier messageId :: I53 } | -- | A message has been successfully sent UpdateMessageSendSucceeded { -- | Information about the sent message. Usually only the message identifier, date, and content are changed, but almost all other fields can also change message :: Message, -- | The previous temporary message identifier oldMessageId :: I53 } | -- | A message failed to send. Be aware that some messages being sent can be irrecoverably deleted, in which case updateDeleteMessages will be received instead of this update UpdateMessageSendFailed { -- | Contains information about the message which failed to send message :: Message, -- | The previous temporary message identifier oldMessageId :: I53, -- | An error code errorCode :: I32, -- | Error message errorMessage :: T } | -- | The message content has changed UpdateMessageContent { -- | Chat identifier chatId :: I53, -- | Message identifier messageId :: I53, -- | New message content newContent :: MessageContent } | -- | A message was edited. Changes in the message content will come in a separate updateMessageContent UpdateMessageEdited { -- | Chat identifier chatId :: I53, -- | Message identifier messageId :: I53, -- | Point in time (Unix timestamp) when the message was edited editDate :: I32, -- | New message reply markup; may be null replyMarkup :: (Maybe) (ReplyMarkup) } | -- | The view count of the message has changed UpdateMessageViews { -- | Chat identifier chatId :: I53, -- | Message identifier messageId :: I53, -- | New value of the view count views :: I32 } | -- | The message content was opened. Updates voice note messages to "listened", video note messages to "viewed" and starts the TTL timer for self-destructing messages UpdateMessageContentOpened { -- | Chat identifier chatId :: I53, -- | Message identifier messageId :: I53 } | -- | A message with an unread mention was read UpdateMessageMentionRead { -- | Chat identifier chatId :: I53, -- | Message identifier messageId :: I53, -- | The new number of unread mention messages left in the chat unreadMentionCount :: I32 } | -- | A message with a live location was viewed. When the update is received, the client is supposed to update the live location UpdateMessageLiveLocationViewed { -- | Identifier of the chat with the live location message chatId :: I53, -- | Identifier of the message with live location messageId :: I53 } | -- | A new chat has been loaded/created. This update is guaranteed to come before the chat identifier is returned to the client. The chat field changes will be reported through separate updates UpdateNewChat { -- | The chat chat :: Chat } | -- | The title of a chat was changed UpdateChatTitle { -- | Chat identifier chatId :: I53, -- | The new chat title title :: T } | -- | A chat photo was changed UpdateChatPhoto { -- | Chat identifier chatId :: I53, -- | The new chat photo; may be null photo :: (Maybe) (ChatPhoto) } | -- | Chat permissions was changed UpdateChatPermissions { -- | Chat identifier chatId :: I53, -- | The new chat permissions permissions :: ChatPermissions } | -- | The last message of a chat was changed. If last_message is null, then the last message in the chat became unknown. Some new unknown messages might be added to the chat in this case UpdateChatLastMessage { -- | Chat identifier chatId :: I53, -- | The new last message in the chat; may be null lastMessage :: (Maybe) (Message), -- | The new chat positions in the chat lists positions :: [ChatPosition] } | -- | The position of a chat in a chat list has changed. Instead of this update updateChatLastMessage or updateChatDraftMessage might be sent UpdateChatPosition { -- | Chat identifier chatId :: I53, -- | New chat position. If new order is 0, then the chat needs to be removed from the list position :: ChatPosition } | -- | A chat was marked as unread or was read UpdateChatIsMarkedAsUnread { -- | Chat identifier chatId :: I53, -- | New value of is_marked_as_unread isMarkedAsUnread :: Bool } | -- | A chat's has_scheduled_messages field has changed UpdateChatHasScheduledMessages { -- | Chat identifier chatId :: I53, -- | New value of has_scheduled_messages hasScheduledMessages :: Bool } | -- | The value of the default disable_notification parameter, used when a message is sent to the chat, was changed UpdateChatDefaultDisableNotification { -- | Chat identifier chatId :: I53, -- | The new default_disable_notification value defaultDisableNotification :: Bool } | -- | Incoming messages were read or number of unread messages has been changed UpdateChatReadInbox { -- | Chat identifier chatId :: I53, -- | Identifier of the last read incoming message lastReadInboxMessageId :: I53, -- | The number of unread messages left in the chat unreadCount :: I32 } | -- | Outgoing messages were read UpdateChatReadOutbox { -- | Chat identifier chatId :: I53, -- | Identifier of last read outgoing message lastReadOutboxMessageId :: I53 } | -- | The chat unread_mention_count has changed UpdateChatUnreadMentionCount { -- | Chat identifier chatId :: I53, -- | The number of unread mention messages left in the chat unreadMentionCount :: I32 } | -- | Notification settings for a chat were changed UpdateChatNotificationSettings { -- | Chat identifier chatId :: I53, -- | The new notification settings notificationSettings_2 :: ChatNotificationSettings } | -- | Notification settings for some type of chats were updated UpdateScopeNotificationSettings { -- | Types of chats for which notification settings were updated scope :: NotificationSettingsScope, -- | The new notification settings notificationSettings :: ScopeNotificationSettings } | -- | The chat action bar was changed UpdateChatActionBar { -- | Chat identifier chatId :: I53, -- | The new value of the action bar; may be null actionBar :: (Maybe) (ChatActionBar) } | -- | The chat pinned message was changed UpdateChatPinnedMessage { -- | Chat identifier chatId :: I53, -- | The new identifier of the pinned message; 0 if there is no pinned message in the chat pinnedMessageId :: I53 } | -- | The default chat reply markup was changed. Can occur because new messages with reply markup were received or because an old reply markup was hidden by the user UpdateChatReplyMarkup { -- | Chat identifier chatId :: I53, -- | Identifier of the message from which reply markup needs to be used; 0 if there is no default custom reply markup in the chat replyMarkupMessageId :: I53 } | -- | A chat draft has changed. Be aware that the update may come in the currently opened chat but with old content of the draft. If the user has changed the content of the draft, this update shouldn't be applied UpdateChatDraftMessage { -- | Chat identifier chatId :: I53, -- | The new draft message; may be null draftMessage :: (Maybe) (DraftMessage), -- | The new chat positions in the chat lists positions :: [ChatPosition] } | -- | The list of chat filters or a chat filter has changed UpdateChatFilters { -- | The new list of chat filters chatFilters :: [ChatFilterInfo] } | -- | The number of online group members has changed. This update with non-zero count is sent only for currently opened chats. There is no guarantee that it will be sent just after the count has changed UpdateChatOnlineMemberCount { -- | Identifier of the chat chatId :: I53, -- | New number of online members in the chat, or 0 if unknown onlineMemberCount :: I32 } | -- | A notification was changed UpdateNotification { -- | Unique notification group identifier notificationGroupId :: I32, -- | Changed notification notification :: Notification } | -- | A list of active notifications in a notification group has changed UpdateNotificationGroup { -- | Unique notification group identifier notificationGroupId :: I32, -- | New type of the notification group type_2 :: NotificationGroupType, -- | Identifier of a chat to which all notifications in the group belong chatId :: I53, -- | Chat identifier, which notification settings must be applied to the added notifications notificationSettingsChatId :: I53, -- | True, if the notifications should be shown without sound isSilent :: Bool, -- | Total number of unread notifications in the group, can be bigger than number of active notifications totalCount :: I32, -- | List of added group notifications, sorted by notification ID addedNotifications :: [Notification], -- | Identifiers of removed group notifications, sorted by notification ID removedNotificationIds :: [I32] } | -- | Contains active notifications that was shown on previous application launches. This update is sent only if the message database is used. In that case it comes once before any updateNotification and updateNotificationGroup update UpdateActiveNotifications { -- | Lists of active notification groups groups :: [NotificationGroup] } | -- | Describes whether there are some pending notification updates. Can be used to prevent application from killing, while there are some pending notifications UpdateHavePendingNotifications { -- | True, if there are some delayed notification updates, which will be sent soon haveDelayedNotifications :: Bool, -- | True, if there can be some yet unreceived notifications, which are being fetched from the server haveUnreceivedNotifications :: Bool } | -- | Some messages were deleted UpdateDeleteMessages { -- | Chat identifier chatId :: I53, -- | Identifiers of the deleted messages messageIds :: [I53], -- | True, if the messages are permanently deleted by a user (as opposed to just becoming inaccessible) isPermanent :: Bool, -- | True, if the messages are deleted only from the cache and can possibly be retrieved again in the future fromCache :: Bool } | -- | User activity in the chat has changed UpdateUserChatAction { -- | Chat identifier chatId :: I53, -- | Identifier of a user performing an action userId :: I32, -- | The action description action :: ChatAction } | -- | The user went online or offline UpdateUserStatus { -- | User identifier userId :: I32, -- | New status of the user status :: UserStatus } | -- | Some data of a user has changed. This update is guaranteed to come before the user identifier is returned to the client UpdateUser { -- | New data about the user user :: User } | -- | Some data of a basic group has changed. This update is guaranteed to come before the basic group identifier is returned to the client UpdateBasicGroup { -- | New data about the group basicGroup :: BasicGroup } | -- | Some data of a supergroup or a channel has changed. This update is guaranteed to come before the supergroup identifier is returned to the client UpdateSupergroup { -- | New data about the supergroup supergroup :: Supergroup } | -- | Some data of a secret chat has changed. This update is guaranteed to come before the secret chat identifier is returned to the client UpdateSecretChat { -- | New data about the secret chat secretChat :: SecretChat } | -- | Some data from userFullInfo has been changed UpdateUserFullInfo { -- | User identifier userId :: I32, -- | New full information about the user userFullInfo :: UserFullInfo } | -- | Some data from basicGroupFullInfo has been changed UpdateBasicGroupFullInfo { -- | Identifier of a basic group basicGroupId :: I32, -- | New full information about the group basicGroupFullInfo :: BasicGroupFullInfo } | -- | Some data from supergroupFullInfo has been changed UpdateSupergroupFullInfo { -- | Identifier of the supergroup or channel supergroupId :: I32, -- | New full information about the supergroup supergroupFullInfo :: SupergroupFullInfo } | -- | Service notification from the server. Upon receiving this the client must show a popup with the content of the notification UpdateServiceNotification { -- | Notification type. If type begins with "AUTH_KEY_DROP_", then two buttons "Cancel" and "Log out" should be shown under notification; if user presses the second, all local data should be destroyed using Destroy method type_ :: T, -- | Notification content content :: MessageContent } | -- | Information about a file was updated UpdateFile { -- | New data about the file file :: File } | -- | The file generation process needs to be started by the client UpdateFileGenerationStart { -- | Unique identifier for the generation process generationId :: I64, -- | The path to a file from which a new file is generated; may be empty originalPath :: T, -- | The path to a file that should be created and where the new file should be generated destinationPath :: T, -- | String specifying the conversion applied to the original file. If conversion is "#url#" than original_path contains an HTTP/HTTPS URL of a file, which should be downloaded by the client conversion :: T } | -- | File generation is no longer needed UpdateFileGenerationStop { -- | Unique identifier for the generation process generationId :: I64 } | -- | New call was created or information about a call was updated UpdateCall { -- | New data about a call call :: Call } | -- | Some privacy setting rules have been changed UpdateUserPrivacySettingRules { -- | The privacy setting setting :: UserPrivacySetting, -- | New privacy rules rules :: UserPrivacySettingRules } | -- | Number of unread messages in a chat list has changed. This update is sent only if the message database is used UpdateUnreadMessageCount { -- | The chat list with changed number of unread messages chatList :: ChatList, -- | Total number of unread messages unreadCount :: I32, -- | Total number of unread messages in unmuted chats unreadUnmutedCount :: I32 } | -- | Number of unread chats, i.e. with unread messages or marked as unread, has changed. This update is sent only if the message database is used UpdateUnreadChatCount { -- | The chat list with changed number of unread messages chatList :: ChatList, -- | Approximate total number of chats in the chat list totalCount :: I32, -- | Total number of unread chats unreadCount :: I32, -- | Total number of unread unmuted chats unreadUnmutedCount :: I32, -- | Total number of chats marked as unread markedAsUnreadCount :: I32, -- | Total number of unmuted chats marked as unread markedAsUnreadUnmutedCount :: I32 } | -- | An option changed its value UpdateOption { -- | The option name name :: T, -- | The new option value value :: OptionValue } | -- | A sticker set has changed UpdateStickerSet { -- | The sticker set stickerSet :: StickerSet } | -- | The list of installed sticker sets was updated UpdateInstalledStickerSets { -- | True, if the list of installed mask sticker sets was updated isMasks :: Bool, -- | The new list of installed ordinary sticker sets stickerSetIds :: [I64] } | -- | The list of trending sticker sets was updated or some of them were viewed UpdateTrendingStickerSets { -- | The prefix of the list of trending sticker sets with the newest trending sticker sets stickerSets :: StickerSets } | -- | The list of recently used stickers was updated UpdateRecentStickers { -- | True, if the list of stickers attached to photo or video files was updated, otherwise the list of sent stickers is updated isAttached :: Bool, -- | The new list of file identifiers of recently used stickers stickerIds :: [I32] } | -- | The list of favorite stickers was updated UpdateFavoriteStickers { -- | The new list of file identifiers of favorite stickers stickerIds :: [I32] } | -- | The list of saved animations was updated UpdateSavedAnimations { -- | The new list of file identifiers of saved animations animationIds :: [I32] } | -- | The selected background has changed UpdateSelectedBackground { -- | True, if background for dark theme has changed forDarkTheme :: Bool, -- | The new selected background; may be null background :: (Maybe) (Background) } | -- | Some language pack strings have been updated UpdateLanguagePackStrings { -- | Localization target to which the language pack belongs localizationTarget :: T, -- | Identifier of the updated language pack languagePackId :: T, -- | List of changed language pack strings strings :: [LanguagePackString] } | -- | The connection state has changed UpdateConnectionState { -- | The new connection state state :: ConnectionState } | -- | New terms of service must be accepted by the user. If the terms of service are declined, then the deleteAccount method should be called with the reason "Decline ToS update" UpdateTermsOfService { -- | Identifier of the terms of service termsOfServiceId :: T, -- | The new terms of service termsOfService :: TermsOfService } | -- | The list of users nearby has changed. The update is sent only 60 seconds after a successful searchChatsNearby request UpdateUsersNearby { -- | The new list of users nearby usersNearby :: [ChatNearby] } | -- | The list of supported dice emojis has changed UpdateDiceEmojis { -- | The new list of supported dice emojis emojis :: [T] } | -- | The parameters of animation search through GetOption("animation_search_bot_username") bot has changed UpdateAnimationSearchParameters { -- | Name of the animation search provider provider :: T, -- | The new list of emojis suggested for searching emojis :: [T] } | -- | A new incoming inline query; for bots only UpdateNewInlineQuery { -- | Unique query identifier id :: I64, -- | Identifier of the user who sent the query senderUserId :: I32, -- | User location, provided by the client; may be null userLocation :: (Maybe) (Location), -- | Text of the query query :: T, -- | Offset of the first entry to return offset :: T } | -- | The user has chosen a result of an inline query; for bots only UpdateNewChosenInlineResult { -- | Identifier of the user who sent the query senderUserId :: I32, -- | User location, provided by the client; may be null userLocation :: (Maybe) (Location), -- | Text of the query query :: T, -- | Identifier of the chosen result resultId :: T, -- | Identifier of the sent inline message, if known inlineMessageId :: T } | -- | A new incoming callback query; for bots only UpdateNewCallbackQuery { -- | Unique query identifier id :: I64, -- | Identifier of the user who sent the query senderUserId :: I32, -- | Identifier of the chat where the query was sent chatId :: I53, -- | Identifier of the message, from which the query originated messageId :: I53, -- | Identifier that uniquely corresponds to the chat to which the message was sent chatInstance :: I64, -- | Query payload payload :: CallbackQueryPayload } | -- | A new incoming callback query from a message sent via a bot; for bots only UpdateNewInlineCallbackQuery { -- | Unique query identifier id :: I64, -- | Identifier of the user who sent the query senderUserId :: I32, -- | Identifier of the inline message, from which the query originated inlineMessageId :: T, -- | An identifier uniquely corresponding to the chat a message was sent to chatInstance :: I64, -- | Query payload payload :: CallbackQueryPayload } | -- | A new incoming shipping query; for bots only. Only for invoices with flexible price UpdateNewShippingQuery { -- | Unique query identifier id :: I64, -- | Identifier of the user who sent the query senderUserId :: I32, -- | Invoice payload invoicePayload_2 :: T, -- | User shipping address shippingAddress :: Address } | -- | A new incoming pre-checkout query; for bots only. Contains full information about a checkout UpdateNewPreCheckoutQuery { -- | Unique query identifier id :: I64, -- | Identifier of the user who sent the query senderUserId :: I32, -- | Currency for the product price currency :: T, -- | Total price for the product, in the minimal quantity of the currency totalAmount :: I53, -- | Invoice payload invoicePayload :: ByteString64, -- | Identifier of a shipping option chosen by the user; may be empty if not applicable shippingOptionId :: T, -- | Information about the order; may be null orderInfo :: (Maybe) (OrderInfo) } | -- | A new incoming event; for bots only UpdateNewCustomEvent { -- | A JSON-serialized event event :: T } | -- | A new incoming query; for bots only UpdateNewCustomQuery { -- | The query identifier id :: I64, -- | JSON-serialized query data data_ :: T, -- | Query timeout timeout :: I32 } | -- | A poll was updated; for bots only UpdatePoll { -- | New data about the poll poll :: Poll } | -- | A user changed the answer to a poll; for bots only UpdatePollAnswer { -- | Unique poll identifier pollId :: I64, -- | The user, who changed the answer to the poll userId :: I32, -- | 0-based identifiers of answer options, chosen by the user optionIds :: [I32] } deriving (Show, Eq, Generic) data Updates = -- | Contains a list of updates Updates { -- | List of updates updates :: [Update] } deriving (Show, Eq, Generic) -- | Describes a stream to which TDLib internal log is written data LogStream = -- | The log is written to stderr or an OS specific log LogStreamDefault { } | -- | The log is written to a file LogStreamFile { -- | Path to the file to where the internal TDLib log will be written path :: T, -- | The maximum size of the file to where the internal TDLib log is written before the file will be auto-rotated maxFileSize :: I53 } | -- | The log is written nowhere LogStreamEmpty { } deriving (Show, Eq, Generic) data LogVerbosityLevel = -- | Contains a TDLib internal log verbosity level LogVerbosityLevel { -- | Log verbosity level verbosityLevel :: I32 } deriving (Show, Eq, Generic) data LogTags = -- | Contains a list of available TDLib internal log tags LogTags { -- | List of log tags tags :: [T] } deriving (Show, Eq, Generic) data TestInt = -- | A simple object containing a number; for testing only TestInt { -- | Number value :: I32 } deriving (Show, Eq, Generic) data TestString = -- | A simple object containing a string; for testing only TestString { -- | String value :: T } deriving (Show, Eq, Generic) data TestBytes = -- | A simple object containing a sequence of bytes; for testing only TestBytes { -- | Bytes value :: ByteString64 } deriving (Show, Eq, Generic) data TestVectorInt = -- | A simple object containing a vector of numbers; for testing only TestVectorInt { -- | Vector of numbers value :: [I32] } deriving (Show, Eq, Generic) data TestVectorIntObject = -- | A simple object containing a vector of objects that hold a number; for testing only TestVectorIntObject { -- | Vector of objects value :: [TestInt] } deriving (Show, Eq, Generic) data TestVectorString = -- | A simple object containing a vector of strings; for testing only TestVectorString { -- | Vector of strings value :: [T] } deriving (Show, Eq, Generic) data TestVectorStringObject = -- | A simple object containing a vector of objects that hold a string; for testing only TestVectorStringObject { -- | Vector of objects value :: [TestString] } deriving (Show, Eq, Generic) typeInstances