tdlight/CHANGELOG.md
2024-02-20 22:46:06 +01:00

116 KiB

Changes in 1.8.0 (29 Dec 2021):

  • Changed the type of user, basic group and supergroup identifiers from int32 to int53.
  • Simplified chat list loading and removed the ability to misuse the method getChats:
    • Renamed the method getChats to loadChats.
    • Removed the parameters offset_order and offset_chat_id from the method loadChats. Chats are now always loaded from the last known chat in the list.
    • Changed the type of the result in the method loadChats to ok. If no chats were loaded, a 404 error is returned. The order of chats in the list must be maintained using the updates updateChatPosition, updateChatLastMessage, and updateChatDraftMessage.
    • Added the convenience method getChats, which returns the requested number of chats from the beginning of a chat list and can be used if the list of chats doesn't need to be maintained in a consistent state.
  • Added the ability to hook TDLib log messages:
    • Added the function td_set_log_message_callback to JSON interface.
    • Added the function set_log_message_callback to the class ClientManager.
    • Added the function SetLogMessageCallback to the UWP native wrapper through C++/CX.
    • Deprecated the function td_set_log_fatal_error_callback in JSON interface in favor of the function td_set_log_message_callback.
    • Deprecated the function Log::set_fatal_error_callback in favor of the function ClientManager::set_log_message_callback.
  • Added support for sending messages on behalf of public channels owned by the user:
    • Added the field message_sender_id to the class chat, containing the identifier of the currently selected message sender.
    • Added the update updateChatMessageSender.
    • Added the method getChatAvailableMessageSenders, returning the list of available message senders for the chat.
    • Added the method setChatMessageSender, changing the currently selected message sender.
    • Added the field need_another_sender to the class messageSendingStateFailed. If it is true, an alert needs to be shown to the user that the message will be re-sent on behalf of another sender.
    • Replaced the method deleteChatMessagesFromUser with the method deleteChatMessagesBySender, expecting a MessageSender instead of a user identifier.
    • Replaced the update updateUserChatAction with the update updateChatAction, containing a MessageSender instead of a user identifier as a source of the chat action.
  • Added the ability to ban supergroups and channels in other supergroups and channels:
    • Replaced the fields user_id with the fields member_id in the classes chatMember and chatEventMemberRestricted.
    • Replaced the parameters user_id with the parameters member_id in the methods setChatMemberStatus and getChatMember.
  • Improved support for animated emoji:
    • Added the class animatedEmoji, containing information about an animated emoji.
    • Added the class messageAnimatedEmoji to the types of message content.
    • Added the method clickAnimatedEmojiMessage to be called when an animated emoji is clicked.
    • Added the update updateAnimatedEmojiMessageClicked, received when a big animated sticker must be played.
    • Added the class chatActionWatchingAnimations to the types of chat action.
    • Added the method getAnimatedEmoji, returning an animated emoji corresponding to a given emoji.
    • Added the writable option "disable_animated_emoji".
    • Removed the option "animated_emoji_sticker_set_name".
  • Added support for automatic message deletion in all chat types:
    • Added the field message_ttl to the class chat.
    • Added the update updateChatMessageTtl.
    • Added the method setChatMessageTtl.
    • Added the class chatEventMessageTtlChanged, representing change of the field message_ttl in the chat event log.
    • Removed the field ttl from the class secretChat in favor of the field message_ttl in the class chat.
    • Removed the method sendChatSetTtlMessage in favor of the method setChatMessageTtl.
  • Improved names of the fields of the type MessageSender:
    • Renamed the fields sender to sender_id in the classes message and notificationTypeNewPushMessage.
    • Renamed the parameter sender to sender_id in the methods searchChatMessages, addLocalMessage, and toggleMessageSenderIsBlocked.
    • Renamed the field recent_repliers to recent_replier_ids in the class messageReplyInfo.
    • Renamed the field traveler to traveler_id in the class messageProximityAlertTriggered.
    • Renamed the field watcher to watcher_id in the class messageProximityAlertTriggered.
  • The field formatted_phone_number in the class phoneNumberInfo now contains the character '-' at the places of expected digits.
  • Added the synchronous method getPhoneNumberInfoSync that can be used instead of the method getPhoneNumberInfo to synchronously receive information about a phone number by its prefix.
  • Replaced the field user_id in the class chatEvent with the field member_id of the type MessageSender.
  • Improved support for bot payments:
    • Allowed sending invoices as results of inline queries by allowing bots to use the class inputMessageInvoice as the value of the field input_message_content in the classes inputInlineQueryResultAnimation, inputInlineQueryResultArticle, inputInlineQueryResultAudio, inputInlineQueryResultContact, inputInlineQueryResultDocument, inputInlineQueryResultLocation, inputInlineQueryResultPhoto, inputInlineQueryResultSticker, inputInlineQueryResultVenue, inputInlineQueryResultVideo, and inputInlineQueryResultVoiceNote.
    • Allowed sending invoice messages to basic group, supergroup and channel chats.
    • Allowed bots to send forwardable invoices by specifying an empty field start_parameter in the class inputMessageInvoice.
    • Added the field invoice_chat_id to the class messagePaymentSuccessful.
    • Added the field id to the class paymentForm, containing a unique payment form identifier.
    • Added the parameter payment_form_id to the method sendPaymentForm.
    • Added the field seller_bot_user_id to the class paymentForm, containing the user identifier of the seller bot.
    • Added the field payments_provider_user_id to the class paymentForm, containing the user identifier of the payment provider bot.
    • Added the fields title, description, photo, and seller_bot_user_id to the class paymentReceipt.
    • Added the fields max_tip_amount and suggested_tip_amounts to the class invoice.
    • Added the parameter tip_amount to the method sendPaymentForm.
    • Added the field tip_amount to the class paymentReceipt.
    • Renamed the class inputCredentialsAndroidPay to inputCredentialsGooglePay.
    • Added the class paymentFormTheme, containing the desired colors for a payment form.
    • Added the parameter theme to the method getPaymentForm.
    • Removed the field invoice_message_id from the class messagePaymentSuccessfulBot.
  • Added the method deleteChat, which can be used to completely delete a chat along with all messages.
  • Removed the method deleteSupergroup in favor of the method deleteChat.
  • Changed the type of the result in the method getProxyLink to the class httpUrl instead of the class text.
  • Removed support for secret chat layers before 73.
  • Added support for sponsored messages:
    • Added the class sponsoredMessage.
    • Added the method getChatSponsoredMessage.
    • Added the ability to pass identifiers of sponsored messages to viewMessages. The method must be called when the entire text of the sponsored message is shown on the screen (excluding the button).
  • Added support for video chats:
    • Added the class groupCall, representing a group call.
    • Added the method getGroupCall for fetching information about a group call.
    • Added the update updateGroupCall.
    • Added the class videoChat, representing a video chat, i.e. group call bound to a chat.
    • Added the field video_chat to the class chat.
    • Added the update updateChatVideoChat.
    • Added the classes messageVideoChatScheduled, messageVideoChatStarted, and messageVideoChatEnded to the types of message content.
    • Added the class messageInviteVideoChatParticipants to the types of message content.
    • Added the field can_manage_video_chats to the class chatMemberStatusAdministrator.
    • Added the class groupCallId.
    • Added the method createVideoChat for video chat creation.
    • Added the method startScheduledGroupCall.
    • Added the method toggleGroupCallEnabledStartNotification.
    • Added the method joinGroupCall.
    • Added the method leaveGroupCall.
    • Added the method endGroupCall.
    • Added the method toggleGroupCallIsMyVideoEnabled.
    • Added the method toggleGroupCallIsMyVideoPaused.
    • Added the methods startGroupCallScreenSharing, toggleGroupCallScreenSharingIsPaused, endGroupCallScreenSharing for managing screen sharing during group calls.
    • Added the method setGroupCallTitle.
    • Added the method toggleGroupCallMuteNewParticipants.
    • Added the classes groupCallVideoSourceGroup and groupCallParticipantVideoInfo, describing available video streams.
    • Added the class groupCallParticipant.
    • Added the update updateGroupCallParticipant.
    • Added the method loadGroupCallParticipants.
    • Added the method toggleGroupCallParticipantIsHandRaised.
    • Added the method setGroupCallParticipantIsSpeaking.
    • Added the methods toggleGroupCallParticipantIsMuted and setGroupCallParticipantVolumeLevel for managing the volume level of group call participants.
    • Added the method inviteGroupCallParticipants.
    • Added the method getGroupCallInviteLink and revokeGroupCallInviteLink for managing group call invite links.
    • Added the methods startGroupCallRecording and endGroupCallRecording for managing group call recordings.
    • Added the method getVideoChatAvailableParticipants, returning the list of participants, on whose behalf a video chat in the chat can be joined.
    • Added the method setVideoChatDefaultParticipant for changing the default participant on whose behalf a video chat will be joined.
    • Added the class GroupCallVideoQuality and the method getGroupCallStreamSegment for downloading segments of live streams.
    • Added the class groupCallRecentSpeaker, representing a group call participant that was recently speaking.
    • Added the field video_chat_changes to the class chatEventLogFilters.
    • Added the class chatEventVideoChatCreated, representing a video chat being created in the chat event log.
    • Added the class chatEventVideoChatEnded, representing a video chat being ended in the chat event log.
    • Added the class chatEventVideoChatMuteNewParticipantsToggled, representing changes of the setting mute_new_participants of a video chat in the chat event log.
    • Added the class chatEventVideoChatParticipantIsMutedToggled, representing a video chat participant being muted or unmuted in the chat event log.
    • Added the class chatEventVideoChatParticipantVolumeLevelChanged, representing a video chat participant's volume level being changed in the chat event log.
  • Added "; pass null" documentation for all TDLib method parameters, for which null is an expected value.
  • Added support for link processing:
    • Added the method getInternalLinkType, which can parse internal links and return the exact link type and actions to be done when the link is clicked.
    • Added the classes internalLinkTypeActiveSessions, internalLinkTypeAuthenticationCode, internalLinkTypeBackground, internalLinkTypeBotStart, internalLinkTypeBotStartInGroup, internalLinkTypeChangePhoneNumber, internalLinkTypeChatInvite, internalLinkTypeFilterSettings, internalLinkTypeGame, internalLinkTypeLanguagePack, internalLinkTypeMessage, internalLinkTypeMessageDraft, internalLinkTypePassportDataRequest, internalLinkTypePhoneNumberConfirmation, internalLinkTypeProxy, internalLinkTypePublicChat, internalLinkTypeQrCodeAuthentication, internalLinkTypeSettings, internalLinkTypeStickerSet, internalLinkTypeTheme, internalLinkTypeThemeSettings, internalLinkTypeUnknownDeepLink, internalLinkTypeUnsupportedProxy, and internalLinkTypeVideoChat to represent different types of internal links.
    • Added the method getExternalLinkInfo, which needs to be called if the clicked link wasn't recognized as an internal link.
    • Added the method getExternalLink, which needs to be called after the method getExternalLinkInfo if the user confirms automatic authorization on the website.
  • Added support for expiring chat invite links:
    • Added the field is_primary to the class chatInviteLink. The primary invite link can't have a name, expiration date, or usage limit. There is exactly one primary invite link for each administrator with the can_invite_users right at any given time.
    • Added the field name to the class chatInviteLink.
    • Added the field creator_user_id to the class chatInviteLink.
    • Added the field date to the class chatInviteLink, containing the link creation date.
    • Added the field edit_date to the class chatInviteLink, containing the date the link was last edited.
    • Added the fields expiration_date and member_limit to the class chatInviteLink, limiting link usage.
    • Added the field member_count to the class chatInviteLink.
    • Added the field is_revoked to the class chatInviteLink.
    • Changed the type of the fields invite_link in the classes basicGroupFullInfo and supergroupFullInfo to chatInviteLink.
    • Added the field description to the class chatInviteLinkInfo, containing the description of the chat.
    • Replaced the method generateChatInviteLink with the method replacePrimaryChatInviteLink.
    • Added the method createChatInviteLink for creating new invite links.
    • Added the method editChatInviteLink for editing non-primary invite links.
    • Added the method revokeChatInviteLink.
    • Added the method deleteRevokedChatInviteLink.
    • Added the method deleteAllRevokedChatInviteLink.
    • Added the method getChatInviteLink.
    • Added the class chatInviteLinks, containing a list of chat invite links.
    • Added the method getChatInviteLinks.
    • Added the classes chatInviteLinkCount and chatInviteLinkCounts.
    • Added the method getChatInviteLinkCounts, returning the number of invite links created by chat administrators.
    • Added the classes chatInviteLinkMember and chatInviteLinkMembers.
    • Added the method getChatInviteLinkMembers.
    • Added the field invite_link_changes to the class chatEventLogFilters.
    • Added the class chatEventMemberJoinedByInviteLink, representing a user joining the chat via invite link in the chat event log.
    • Added the class chatEventInviteLinkEdited to the types of chat event.
    • Added the class chatEventInviteLinkRevoked to the types of chat event.
    • Added the class chatEventInviteLinkDeleted to the types of chat event.
    • Added the class chatActionBarInviteMembers to the types of chat action bar.
  • Added support for chat invite links that create join requests:
    • Added the class messageChatJoinByRequest to the types of message content.
    • Added the class pushMessageContentChatJoinByRequest to the types of push message content.
    • Added the field pending_join_requests to the class chat.
    • Added the class chatJoinRequestsInfo, containing basic information about pending join requests for the chat.
    • Added the update updateChatPendingJoinRequests.
    • Added the fields creates_join_request to the classes chatInviteLink and chatInviteLinkInfo.
    • Added the field pending_join_request_count to the class chatInviteLink.
    • Added the class chatJoinRequest, describing a user that sent a join request.
    • Added the class chatJoinRequests, containing a list of requests to join the chat.
    • Added the method getChatJoinRequests.
    • Added the method processChatJoinRequest for processing a request to join the chat.
    • Added the method processChatJoinRequests for processing all requests to join the chat.
    • Added the class chatActionBarJoinRequest to the types of chat action bar.
    • Added the class chatEventMemberJoinedByRequest, representing a user approved to join the chat after a join request in the chat event log.
    • Added the update updateNewChatJoinRequest for bots.
  • Added the ability to see viewers of outgoing messages in small group chats:
    • Added the method getMessageViewers.
    • Added the field can_get_viewers to the class message.
  • Added the parameter only_preview to the method forwardMessages, which can be used to receive a preview of forwarded messages.
  • Added the method getRecentlyOpenedChats, returning the list of recently opened chats.
  • Increased number of recently found chats that are stored to 50.
  • Added the ability to get information about chat messages, which are split by days:
    • Added the class messageCalendarDay, representing found messages, sent on a specific day.
    • Added the class messageCalendar, representing found messages, split by days.
    • Added the writable option "utc_time_offset", which contains a UTC time offset used for splitting messages by days. The option is reset automatically on each TDLib instance launch, so it needs to be set manually only if the time offset is changed during execution.
    • Added the method getChatMessageCalendar, returning information about chat messages, which are split by days.
  • Added the ability to get messages of the specified type in sparse positions for hyper-speed scrolling implementation:
    • Added the class messagePosition, containing an identifier and send date of a message in a specific chat history position.
    • Added the class messagePositions, containing a list of message positions.
    • Added the method getChatSparseMessagePositions.
  • Added the field can_manage_chat to the class chatMemberStatusAdministrator to allow promoting chat administrators without additional rights.
  • Improved support for bot commands:
    • Bot command entities in chats without bots are now automatically hidden.
    • Added the class botCommands, representing a list of bot commands.
    • Added the field commands to the class userFullInfo, containing the list of commands to be used in the private chat with the bot.
    • Added the fields bot_commands to the classes basicGroupFullInfo and supergroupFullInfo.
    • Removed the class botInfo.
    • Removed the fields bot_info from the classes userFullInfo and chatMember.
    • Added the class BotCommandScope.
    • Added the methods setCommands, deleteCommands, getCommands for bots.
  • Added the read-only options "suggested_video_note_length", "suggested_video_note_video_bitrate", and "suggested_video_note_audio_bitrate", containing suggested video note encoding parameters.
  • Added the read-only option "channel_bot_user_id", containing the identifier of the bot which is shown in outdated clients as the sender of messages sent on behalf of channels.
  • Added the ability to fetch the actual value of the option "is_location_visible" using the method getOption in case the value of the option was changed from another device.
  • Added the field minithumbnail to the class profilePhoto, representing a profile photo minithumbnail.
  • Added the field minithumbnail to the class chatPhotoInfo, representing a chat photo minithumbnail.
  • Added support for sticker outlines:
    • Added the field outline to the class sticker.
    • Added the fields thumbnail_outline to the classes stickerSet and stickerSetInfo.
    • Added the class closedVectorPath, representing a closed vector path.
    • Added the class VectorPathCommand, representing one edge of a closed vector path.
    • Added the class point, representing a point on a Cartesian plane.
  • Added support for chats and messages with protected content:
    • Added the field has_protected_content to the class chat.
    • Added the update updateChatHasProtectedContent.
    • Added the method toggleChatHasProtectedContent.
    • Added the class chatEventHasProtectedContentToggled, representing a change of the setting has_protected_content in the chat event log.
    • Added the field can_be_saved to the class message.
  • Added support for broadcast groups, i.e. supergroups without a limit on the number of members in which only administrators can send messages:
    • Added the field is_broadcast_group to the class supergroup.
    • Added the method toggleSupergroupIsBroadcastGroup. Conversion of a supergroup to a broadcast group can't be undone.
    • Added the class suggestedActionConvertToBroadcastGroup, representing a suggestion to convert a supergroup to a broadcast group.
  • Improved chat reports:
    • Added the parameter text to the method reportChat, allowing to add additional details to all chat reporting reasons.
    • Removed the field text from the class chatReportReasonCustom.
    • Added the method reportChatPhoto for reporting chat photos.
  • Added support for users and chats reported as fake:
    • Added the field is_fake to the class user.
    • Added the field is_fake to the class supergroup.
    • Added the class chatReportReasonFake to the types of chat reporting reasons.
  • Added the class inlineKeyboardButtonTypeUser to the types of inline keyboard buttons.
  • Added the field input_field_placeholder to the classes replyMarkupForceReply and replyMarkupShowKeyboard.
  • Added support for media timestamp entities in messages:
    • Added the class textEntityTypeMediaTimestamp to the types of text entities.
    • Added the field has_timestamped_media to the class message, describing whether media timestamp entities refer to the message itself or to the replied message.
    • Added the parameter media_timestamp to the method getMessageLink to support creating message links with a given media timestamp.
    • Added the field can_get_media_timestamp_links to the class message.
    • Added the field media_timestamp to the class messageLinkInfo for handling of message links with a specified media timestamp.
  • Added the ability to change properties of active sessions:
    • Added the field can_accept_secret_chats to the class session.
    • Added the method toggleSessionCanAcceptSecretChats.
    • Added the field can_accept_calls to the class session.
    • Added the method toggleSessionCanAcceptCalls.
    • Added the field inactive_session_ttl_days to the class sessions.
    • Added the method setInactiveSessionTtl.
  • Added new ways for phone number verification:
    • Added the class authenticationCodeTypeMissedCall, describing an authentication code delivered by a canceled phone call to the given number. The last digits of the phone number that calls are the code that must be entered manually by the user.
    • Added the field allow_missed_call to the class phoneNumberAuthenticationSettings.
    • Added the read-only option "authentication_token", which can be received when logging out and contains an authentication token to be used on subsequent authorizations.
    • Added the field authentication_tokens to the class phoneNumberAuthenticationSettings.
  • Added support for resetting the password from an active session:
    • Added the class ResetPasswordResult and the method resetPassword.
    • Added the method cancelPasswordReset, which can be used to cancel a pending password reset.
    • Added the field pending_reset_date to the class passwordState.
  • Added the ability to set a new 2-step verification password after recovering a lost password using a recovery email address:
    • Added the parameters new_password and new_hint to the methods recoverAuthenticationPassword and recoverPassword.
    • Added the method checkAuthenticationPasswordRecoveryCode.
    • Added the method checkPasswordRecoveryCode.
  • Added the class chatActionChoosingSticker to the types of chat action.
  • Added the class backgroundFillFreeformGradient to the types of background fill.
  • Added the field is_inverted to the class backgroundTypePattern for inverted patterns for dark themes.
  • Added support for chat themes:
    • Added the field theme_name to the class chat.
    • Added the method setChatTheme.
    • Added the update updateChatTheme, received when a theme was changed in a chat.
    • Added the class messageChatSetTheme to the types of message content.
    • Added the class pushMessageContentChatSetTheme to the types of push message content.
    • Added the class themeSettings, representing basic theme settings.
    • Added the class chatTheme, representing a chat theme.
    • Added the update updateChatThemes, received when the list of available chat themes changes.
  • Added the ability for regular users to create sticker sets:
    • Allowed to use the methods uploadStickerFile and createNewStickerSet as regular users.
    • Replaced the parameter png_sticker in the method uploadStickerFile with the parameter sticker of the type InputSticker.
    • Added the parameter source to the method createNewStickerSet.
    • Added the method getSuggestedStickerSetName.
    • Added the class CheckStickerSetNameResult and the method checkStickerSetName for checking a sticker set name before creating a sticker set.
  • Added support for importing chat history from an external source:
    • Added the method importMessages.
    • Added the method getMessageImportConfirmationText.
    • Added the class MessageFileType and the method getMessageFileType, which can be used to check whether the format of a file with exported message history is supported.
    • Added the class messageForwardOriginMessageImport to the types of forwarded message origins for imported messages.
    • Added the parameter for_import to the method createNewSupergroupChat, which needs to be set to true whenever the chat is created for a subsequent message history import.
  • Added new types of suggested actions:
    • Added the class suggestedActionSetPassword, suggesting the user to set a 2-step verification password to be able to log in again before the specified number of days pass.
    • Added the class suggestedActionCheckPassword, suggesting the user to check whether they still remember their 2-step verification password.
    • Added the class suggestedActionViewChecksHint, suggesting the user to see a hint about the meaning of one and two check marks on sent messages.
  • Added the method getSuggestedFileName, which returns a suggested name for saving a file in a given directory.
  • Added the method deleteAllCallMessages.
  • Added the method deleteChatMessagesByDate, which can be used to delete all messages between the specified dates in a chat.
  • Added the field unread_message_count to the class messageThreadInfo.
  • Added the field has_private_forwards to the class userFullInfo.
  • Added the field description to the class userFullInfo, containing description of the bot.
  • Added the field emoji to the class inputMessageSticker, allowing to specify the emoji that was used to choose the sent sticker.
  • Added the method banChatMember that can be used to ban chat members instead of the method setChatMemberStatus and allows to revoke messages from the banned user in basic groups.
  • Allowed to use the method setChatMemberStatus for adding chat members.
  • Removed the parameter user_id from the method reportSupergroupSpam. Messages from different senders can now be reported simultaneously.
  • Added the field feedback_link to the class webPageInstantView.
  • Added the method getApplicationDownloadLink, returning the link for downloading official Telegram applications.
  • Removed unusable search message filters searchMessagesFilterCall and searchMessagesFilterMissedCall.
  • Removed the method getChatStatisticsUrl.
  • Removed the method getInviteText in favor of the method getApplicationDownloadLink.
  • Added the field chat_type to the update updateNewInlineQuery for bots.
  • Added the update updateChatMember for bots.
  • Improved the appearance of the TDLib build instructions generator.
  • Added support for the illumos operating system.
  • Added support for network access on real watchOS devices.
  • Added support for OpenSSL 3.0.
  • Improved the iOS/watchOS/tvOS build example to generate a universal XCFramework.
  • Added support for ARM64 simulators in the iOS/watchOS/tvOS build example.
  • Added the option -release_only to the build script for Universal Windows Platform, allowing to build TDLib SDK for Universal Windows Platform in release-only mode.
  • Rewritten the native .NET binding using the new ClientManager interface:
    • Replaced the method Client.send with a static method that must be called exactly once in a dedicated thread. The callbacks ClientResultHandler will be called in this thread for all clients.
    • Removed the function Client.Dispose() from the C++/CLI native binding. The objects of the type Client don't need to be explicitly disposed anymore.
  • Rewritten the C binding using the new ClientManager interface:
    • Renamed the fields id in the structs TdRequest and TdResponse to request_id.
    • Added the field client_id to the struct TdResponse.
    • Replaced the method TdCClientCreate with the method TdCClientCreateId.
    • Replaced the parameter instance with the parameter client_id in the function TdCClientSend.
    • Added the methods TdCClientReceive and TdCClientExecute.
    • Removed the methods TdCClientSendCommandSync, TdCClientDestroy, and TdCClientSetVerbosity.

Changes in 1.7.0 (28 Nov 2020):

  • Added a new simplified JSON interface in which updates and responses to requests from all TDLib instances are received in the same thread:
    • The TDLib instance is identified by the unique client_id identifier, which is returned by the method td_create_client_id.
    • Use the method td_send to send a request to a specified client. The TDLib instance is created on the first request sent to it.
    • Use the method td_receive to receive updates and request responses from TDLib. The response will contain the identifier of the client from which the event was received in the field "@client_id".
    • Use the method td_execute to synchronously execute suitable TDLib methods.
  • Added support for adding chats to more than one chat list:
    • Added the class chatPosition, describing the position of the chat within a chat list.
    • Replaced the fields chat_list, order, is_sponsored and is_pinned in the class chat with the field positions, containing a list of the chat positions in various chat list.
    • Replaced the field order with the field positions in the updates updateChatLastMessage and updateChatDraftMessage.
    • Added the update updateChatPosition.
    • Removed the superfluous updates updateChatChatList, updateChatIsSponsored, updateChatOrder and updateChatIsPinned.
    • Added the parameter chat_list to the method toggleChatIsPinned.
    • Added the class chatLists, containing a list of chat lists.
    • Added the method getChatListsToAddChat, returning all chat lists to which a chat can be added.
    • Added the method addChatToList, which can be used to add a chat to a chat list.
    • Remove the method setChatChatList.
  • Added support for chat filters:
    • Added the new chat list type chatListFilter.
    • Added the classes chatFilterInfo and chatFilter, describing a filter of user chats.
    • Added the update updateChatFilters, which is sent when the list of chat filters is changed.
    • Added the methods createChatFilter, editChatFilter and deleteChatFilter for managing chat filters.
    • Added the method reorderChatFilters for changing the order of chat filters.
    • Added the method getChatFilter, returning full information about a chat filter.
    • Added the synchronous method getChatFilterDefaultIconName.
    • Added the classes recommendedChatFilter and recommendedChatFilters.
    • Added the method getRecommendedChatFilters, returning a list of recommended chat filters.
  • Added support for messages sent on behalf of chats instead of users:
    • Added the class MessageSender, representing a user or a chat which sent a message.
    • Added the class MessageSenders, representing a list of message senders.
    • Replaced the field sender_user_id with the field sender of the type MessageSender in the classes message and notificationTypeNewPushMessage.
    • Added the class messageForwardOriginChat, which describe a chat as the original sender of a message.
    • Added the ability to search messages sent by a chat by replacing the parameter sender_user_id with the parameter sender of the type MessageSender in the method searchChatMessages.
    • Added the ability to specify a chat as a local message sender by replacing the parameter sender_user_id with the parameter sender of the type MessageSender in the method addLocalMessage.
  • Added support for video calls:
    • Added the class callServer, describing a server for relaying call data.
    • Added the classes callServerTypeTelegramReflector and callServerTypeWebrtc, representing different types of supported call servers.
    • Replaced the field connections with the field servers in the class callStateReady.
    • Removed the class callConnection.
    • Added the update updateNewCallSignalingData.
    • Added the method sendCallSignalingData.
    • Added the field supports_video_calls to the class userFullInfo.
    • Added the field is_video to the class messageCall.
    • Added the field is_video to the class call.
    • Added the parameter is_video to the method createCall.
    • Added the parameter is_video to the method discardCall.
    • Added two new types of call problems callProblemDistortedVideo and callProblemPixelatedVideo.
    • Added the field library_versions to the class callProtocol, which must be used to specify all supported call library versions.
  • Added support for multiple pinned messages and the ability to pin messages in private chats:
    • Added the ability to pin messages in all private chats.
    • Added the ability to pin mutiple messages in all chats.
    • Added the field is_pinned to the class message.
    • Added the update updateMessageIsPinned.
    • Added the parameter only_for_self to the method pinChatMessage, allowing to pin messages in private chats for one side only.
    • Added the ability to find pinned messages in a chat using the filter searchMessagesFilterPinned.
    • Added the parameter message_id to the method unpinChatMessage.
    • Added the field message to the class chatEventMessageUnpinned.
    • Added the method unpinAllChatMessages, which can be used to simultaneously unpin all pinned messages in a chat.
    • Documented that notifications about new pinned messages are always silent in channels and private chats.
    • The method getChatPinnedMessage now returns the newest pinned message in the chat.
    • Removed the field pinned_message_id from the class chat.
    • Removed the update updateChatPinnedMessage.
  • Improved thumbnail representation and added support for animated MPEG4 thumbnails:
    • Added the class ThumbnailFormat, representing the various supported thumbnail formats.
    • Added the class thumbnail, containing information about a thumbnail.
    • Changed the type of all thumbnail fields from photoSize to thumbnail.
    • Added support for thumbnails in the format thumbnailFormatMpeg4 for some animations and videos.
    • Replaced the classes inputInlineQueryResultAnimatedGif and inputInlineQueryResultAnimatedMpeg4 with the generic class inputInlineQueryResultAnimation.
    • Added support for animated thumbnails in the class inputInlineQueryResultAnimation.
    • The class photoSize is now only used for JPEG images.
  • Improved support for user profile photos and chat photos:
    • Added the field photo to the class userFullInfo, containing full information about the user photo.
    • Added the field photo to the class basicGroupFullInfo, containing full information about the group photo.
    • Added the field photo to the class supergroupFullInfo, containing full information about the group photo.
    • Renamed the class chatPhoto to chatPhotoInfo.
    • Added the field has_animation to the classes profilePhoto and chatPhotoInfo, which is set to true for animated chat photos.
    • Added the classes chatPhoto and chatPhotos.
    • Added minithumbnail support via the field minithumbnail in the class chatPhoto.
    • Added the class animatedChatPhoto.
    • Added animated chat photo support via the field animation in the class chatPhoto.
    • Removed the classes userProfilePhoto and userProfilePhotos.
    • Changed the type of the field photo in the class messageChatChangePhoto to chatPhoto.
    • Changed the type of the fields old_photo and new_photo in the class chatEventPhotoChanged to chatPhoto.
    • Changed the return type of the method getUserProfilePhotos to chatPhotos.
    • Added the class InputChatPhoto, representing a chat or a profile photo to set.
    • Changed the type of the parameter photo in the methods setProfilePhoto and setChatPhoto to the InputChatPhoto.
    • Added the ability to explicitly re-use previously set profile photos using the class inputChatPhotoPrevious.
    • Added the ability to set animated chat photos using the class inputChatPhotoAnimated.
  • Added support for message threads in supergroups and channel comments:
    • Added the field message_thread_id to the class message.
    • Added the class messageThreadInfo, containing information about a message thread.
    • Added the class messageReplyInfo, containing information about replies to a message.
    • Added the field reply_info to the class messageInteractionInfo, containing information about message replies.
    • Added the field can_get_message_thread to the class message.
    • Added the method getMessageThread, returning information about the message thread to which a message belongs.
    • Added the method getMessageThreadHistory, returning messages belonging to a message thread.
    • Added the parameter message_thread_id to the methods sendMessage, sendMessageAlbum and sendInlineQueryResultMessage for sending messages within a thread.
    • Added the parameter message_thread_id to the method searchChatMessages to search messages within a thread.
    • Added the parameter message_thread_id to the method viewMessages.
    • Added the parameter message_thread_id to the method setChatDraftMessage.
    • Added the parameter message_thread_id to the method sendChatAction to send chat actions to a thread.
    • Added the field message_thread_id to the update updateUserChatAction.
  • Improved support for message albums:
    • Added support for sending and receiving messages of the types messageAudio and messageDocument as albums.
    • Added automatic grouping into audio or document albums in the method forwardMessages if all forwarded or copied messages are of the same type.
    • Removed the parameter as_album from the method forwardMessages. Forwarded message albums are now determined automatically.
  • Simplified usage of methods generating an HTTP link to a message:
    • Added the class messageLink, representing an HTTP link to a message.
    • Combined the methods getPublicMessageLink and getMessageLink into the method getMessageLink, which now returns a public link to the message if possible and a private link otherwise. The combined method is an offline method now.
    • Added the parameter for_comment to the method getMessageLink, which allows to get a message link to the message that opens it in a thread.
    • Removed the class publicMessageLink.
    • Added the field for_comment to the class messageLinkInfo.
    • Added the separate method getMessageEmbeddingCode, returning an HTML code for embedding a message.
  • Added the ability to block private messages sent via the @replies bot from chats:
    • Added the field is_blocked to the class chat.
    • Added the update updateChatIsBlocked.
    • Added the method blockMessageSenderFromReplies.
    • Replaced the methods blockUser and unblockUser with the method toggleMessageSenderIsBlocked.
    • Replaced the method getBlockedUsers with the method getBlockedMessageSenders.
  • Added support for incoming messages which are replies to messages in different chats:
    • Added the field reply_in_chat_id to the class message.
    • The method getRepliedMessage can now return the replied message in a different chat.
  • Renamed the class sendMessageOptions to messageSendOptions.
  • Added the new tdapi static library, which needs to be additionally linked in when static linking is used.
  • Changed the type of the field value in the class optionValueInteger from int32 to int64.
  • Changed the type of the field description in the class webPage from string to formattedText.
  • Improved Instant View support:
    • Added the field view_count to the class webPageInstantView.
    • Added the class richTextAnchorLink, containing a link to an anchor on the same page.
    • Added the class richTextReference, containing a reference to a text on the same page.
    • Removed the field text from the class richTextAnchor.
    • Removed the field url which is no longer needed from the class webPageInstantView.
  • Allowed the update updateServiceNotification to be sent before authorization is completed.
  • Disallowed to pass messages in non-strictly increasing order to the method forwardMessages.
  • Improved sending copies of messages:
    • Added the class messageCopyOptions and the field copy_options to the class inputMessageForwarded.
    • Removed the fields send_copy and remove_caption from the class inputMessageForwarded.
    • Allowed to replace captions in copied messages using the fields replace_caption and new_caption in the class messageCopyOptions.
    • Allowed to specify reply_to_message_id when sending a copy of a message.
    • Allowed to specify reply_markup when sending a copy of a message.
  • Allowed passing multiple input language codes to searchEmojis by replacing the parameter input_language_code with the parameter input_language_codes.
  • Added support for public service announcements:
    • Added the class ChatSource and the field source to the class chatPosition.
    • Added the new type of chat source chatSourcePublicServiceAnnouncement.
    • Added the field public_service_announcement_type to the class messageForwardInfo.
  • Added support for previewing of private supergroups and channels by their invite link.
    • The field chat_id in the class chatInviteLinkInfo is now non-zero for private supergroups and channels to which the temporary read access is granted.
    • Added the field accessible_for to the class chatInviteLinkInfo, containing the amount of time for which read access to the chat will remain available.
  • Improved methods for message search:
    • Replaced the field next_from_search_id with a string field next_offset in the class foundMessages.
    • Added the field total_count to the class foundMessages; can be -1 if the total count of matching messages is unknown.
    • Replaced the parameter from_search_id with the parameter offset in the method searchSecretMessages.
    • Added the parameter filter to the method searchMessages.
    • Added the parameters min_date and max_date to the method searchMessages to search messages sent only within a particular timeframe.
  • Added pkg-config file generation for all installed libraries.
  • Added automatic operating system version detection. Use an empty field system_version in the class tdlibParameters for the automatic detection.
  • Increased maximum file size from 1500 MB to 2000 MB.
  • Added support for human-friendly Markdown formatting:
    • Added the synchronous method parseMarkdown for human-friendly parsing of text entities.
    • Added the synchronous method getMarkdownText for replacing text entities with a human-friendly Markdown formatting.
    • Added the writable option "always_parse_markdown" which enables automatic parsing of text entities in all inputMessageText objects.
  • Added support for dice with random values in messages:
    • Added the class messageDice to the types of message content; contains a dice.
    • Added the class DiceStickers, containing animated stickers needed to show the dice.
    • Added the class inputMessageDice to the types of new input message content; can be used to send a dice.
    • Added the update updateDiceEmojis, containing information about supported dice emojis.
  • Added support for chat statistics in channels and supergroups:
    • Added the field can_get_statistics to the class supergroupFullInfo.
    • Added the class ChatStatistics, which represents a supergroup or a channel statistics.
    • Added the method getChatStatistics returning detailed statistics about a chat.
    • Added the classes chatStatisticsMessageInteractionInfo, chatStatisticsAdministratorActionsInfo, chatStatisticsMessageSenderInfo and chatStatisticsInviterInfo representing various parts of chat statistics.
    • Added the class statisticalValue describing recent changes of a statistical value.
    • Added the class StatisticalGraph describing a statistical graph.
    • Added the method getStatisticalGraph, which can be used for loading asynchronous or zoomed in statistical graphs.
    • Added the class dateRange representing a date range for which statistics are available.
    • Removed the field can_view_statistics from the class supergroupFullInfo and marked the method getChatStatisticsUrl as disabled and not working.
  • Added support for detailed statistics about interactions with messages:
    • Added the class messageInteractionInfo, containing information about message views, forwards and replies.
    • Added the field interaction_info to the class message.
    • Added the update updateMessageInteractionInfo.
    • Added the field can_get_statistics to the class message.
    • Added the class messageStatistics.
    • Added the method getMessageStatistics.
    • Added the method getMessagePublicForwards, returning all forwards of a message to public channels.
    • Removed the now superfluous field views from the class message.
    • Removed the now superfluous update updateMessageViews.
  • Improved support for native polls:
    • Added the field explanation to the class pollTypeQuiz.
    • Added the fields close_date and open_period to the class poll.
    • Added the fields close_date and open_period to the class inputMessagePoll; for bots only.
    • Increased maximum poll question length to 300 characters for bots.
  • Added support for anonymous administrators in supergroups:
    • Added the field is_anonymous to the classes chatMemberStatusCreator and chatMemberStatusAdministrator.
    • The field author_signature in the class message can now contain a custom title of the anonymous administrator that sent the message.
  • Added support for a new type of inline keyboard buttons, requiring user password entry:
    • Added the class inlineKeyboardButtonTypeCallbackWithPassword, representing a button requiring password entry from a user.
    • Added the class callbackQueryPayloadDataWithPassword, representing new type of callback button payload, which must be used for the buttons of the type inlineKeyboardButtonTypeCallbackWithPassword.
  • Added support for making the location of the user public:
    • Added the writable option "is_location_visible" to allow other users see location of the current user.
    • Added the method setLocation, which should be called if getOption("is_location_visible") is true and location changes by more than 1 kilometer.
  • Improved Notification API:
    • Added the field sender_name to the class notificationTypeNewPushMessage.
    • Added the writable option "disable_sent_scheduled_message_notifications" for disabling notifications about outgoing scheduled messages that were sent.
    • Added the field is_outgoing to the class notificationTypeNewPushMessage for recognizing outgoing scheduled messages that were sent.
    • Added the fields has_audios and has_documents to the class pushMessageContentMediaAlbum.
  • Added the field date to the class draftMessage.
  • Added the update updateStickerSet, which is sent after a sticker set is changed.
  • Added support for pagination in trending sticker sets:
    • Added the parameters offset and limit to the method getTrendingStickerSets.
    • Changed the field sticker_sets in the update updateTrendingStickerSets to contain only the prefix of trending sticker sets.
  • Messages that failed to send can now be found using the filter searchMessagesFilterFailedToSend.
  • Added the ability to disable automatic server-side file type detection using the new field disable_content_type_detection of the class inputMessageDocument.
  • Improved chat action bar:
    • Added the field can_unarchive to the classes chatActionBarReportSpam and chatActionBarReportAddBlock, which is true whenever the chat was automatically archived.
    • Added the field distance to the class chatActionBarReportAddBlock, which denotes the distance between the users.
  • Added support for actions suggested to the user by the server:
    • Added the class SuggestedAction, representing possible actions suggested by the server.
    • Added the update updateSuggestedActions.
    • Added the method hideSuggestedAction, which can be used to dismiss a suggested action.
  • Supported attaching stickers to animations:
    • Added the field has_stickers to the class animation.
    • Added the field added_sticker_file_ids to the class inputMessageAnimation.
  • Added methods for phone number formatting:
    • Added the class countryInfo, describing a country.
    • Added the class countries, containing a list of countries.
    • Added the method getCountries, returning a list of all existing countries.
    • Added the class phonenumberinfo and the method getPhoneNumberInfo, which can be used to format a phone number according to local rules.
  • Improved location support:
    • Added the field horizontal_accuracy to the class location.
    • Added the field heading to the classes messageLocation and inputMessageLocation for live locations.
    • Added the parameter heading to the methods editMessageLiveLocation and editInlineMessageLiveLocation.
  • Added support for proximity alerts in live locations:
    • Added the field proximity_alert_radius to the classes messageLocation and inputMessageLocation.
    • Added the parameter proximity_alert_radius to the methods editMessageLiveLocation and editInlineMessageLiveLocation.
    • Added the new message content messageProximityAlertTriggered, received whenever a proximity alert is triggered.
  • Added CentOS 7 and CentOS 8 operating systems to the TDLib build instructions generator.
  • Added the CMake configuration option TD_ENABLE_MULTI_PROCESSOR_COMPILATION, which can be used to enable parallel build with MSVC.
  • Added support for sending and receiving messages in secret chats with silent notifications.
  • Added the field progressive_sizes to the class photo to allow partial progressive JPEG photo download.
  • Added the field redirect_stderr to the class logStreamFile to allow explicit control over stderr redirection to the log file.
  • Added the read-only option "can_archive_and_mute_new_chats_from_unknown_users", which can be used to check, whether the option "archive_and_mute_new_chats_from_unknown_users" can be changed.
  • Added the writable option "archive_and_mute_new_chats_from_unknown_users", which can be used to automatically archive and mute new chats from non-contacts. The option can be set only if the option "can_archive_and_mute_new_chats_from_unknown_users" is true.
  • Added the writable option "message_unload_delay", which can be used to change the minimum delay before messages are unloaded from the memory.
  • Added the writable option "disable_persistent_network_statistics", which can be used to disable persistent network usage statistics, significantly reducing disk usage.
  • Added the writable option "disable_time_adjustment_protection", which can be used to disable protection from external time adjustment, significantly reducing disk usage.
  • Added the writable option "ignore_default_disable_notification" to allow the application to manually specify the disable_notification option each time when sending messages instead of following the default per-chat settings.
  • Added the read-only option "telegram_service_notifications_chat_id", containing the identifier of the Telegram service notifications chat.
  • Added the read-only option "replies_bot_chat_id", containing the identifier of the @replies bot.
  • Added the read-only option "group_anonymous_bot_user_id", containing the identifier of the bot which is shown as the sender of anonymous group messages when viewed from an outdated client.
  • Added the new venue provider value "gplaces" for Google Places.
  • Added the parameter return_deleted_file_statistics to the method optimizeStorage to return information about the files that were deleted instead of the ones that were not.
  • Added the ability to search for supergroup members to mention by their name and username:
    • Added the new filter supergroupMembersFilterMention for the method getSupergroupMembers.
    • Added the new filter chatMembersFilterMention for the method searchChatMembers.
  • Added support for highlighting bank card numbers:
    • Added the new text entity textEntityTypeBankCardNumber.
    • Added the classes bankCardInfo and bankCardActionOpenUrl, containing information about a bank card.
    • Added the method getBankCardInfo, returning information about a bank card.
  • Improved methods for managing sticker sets by bots:
    • Added the method setStickerSetThumbnail.
    • Added the ability to create new animated sticker sets and add new stickers to them by adding the class inputStickerAnimated.
    • Renamed the class inputSticker to inputStickerStatic.
    • Renamed the field png_sticker to sticker in the class inputStickerStatic.
  • Added the method setCommands for bots.
  • Added the method getCallbackQueryMessage for bots.
  • Added support for starting bots in private chats through sendBotStartMessage.
  • Added the field total_count to the class chats. The field should have a precise value for the responses of the methods getChats, searchChats and getGroupsInCommon.
  • Added the update updateAnimationSearchParameters, containing information about animation search parameters.
  • Documented that getRepliedMessage can be used to get a pinned message, a game message, or an invoice message for messages of the types messagePinMessage, messageGameScore, and messagePaymentSuccessful respectively.
  • Added guarantees that the field member_count in the class supergroup is known if the supergroup was received from the methods searchChatsNearby, getInactiveSupergroupChats, getSuitableDiscussionChats, getGroupsInCommon, or getUserPrivacySettingRules.
  • Updated SQLCipher to 4.4.0.
  • Updated dependencies in the prebuilt TDLib for Android:
    • Updated SDK to SDK 30.
    • Updated NDK to r21d, which dropped support for 32-bit ARM devices without Neon support.
  • Updated recommended emsdk version for tdweb building to the 2.0.6.
  • Removed the ability to change the update handler after client creation in native .NET binding, Java example and prebuilt library for Android.
  • Removed the ability to change the default exception handler after client creation in Java example and prebuilt library for Android.
  • Removed the ability to close Client using close() method in Java example and prebuilt library for Android. Use the method TdApi.close() instead.
  • Changed license of source code in prebuilt library for Android to Boost Software License, Version 1.0.

Changes in 1.6.0 (31 Jan 2020):

  • Added support for multiple chat lists. Currently, only two chat lists Main and Archive are supported:
    • Added the class ChatList, which represents a chat list and could be chatListMain or chatListArchive.
    • Added the field chat_list to the class chat, denoting the chat list to which the chat belongs.
    • Added the parameter chat_list to the methods getChats, searchMessages and setPinnedChats.
    • Added the field chat_list to the updates updateUnreadMessageCount and updateUnreadChatCount.
    • Added the field total_count to the update updateUnreadChatCount, containing the total number of chats in the list.
    • Added the update updateChatChatList, which is sent after a chat is moved to or from a chat list.
    • Added the method setChatChatList, which can be used to move a chat between chat lists.
    • Added the option pinned_archived_chat_count_max for the maximum number of pinned chats in the Archive chat list.
  • Added support for scheduled messages:
    • Added the classes messageSchedulingStateSendAtDate and messageSchedulingStateSendWhenOnline, representing the scheduling state of a message.
    • Added the field scheduling_state to the class message, which allows to distinguish between scheduled and ordinary messages.
    • The update updateNewMessage can now contain a scheduled message and must be handled appropriately.
    • The updates updateMessageContent, updateDeleteMessages, updateMessageViews, updateMessageSendSucceeded, updateMessageSendFailed, and updateMessageSendAcknowledged can now contain identifiers of scheduled messages.
    • Added the class sendMessageOptions, which contains options for sending messages, including the scheduling state of the messages.
    • Replaced the parameters disable_notification and from_background in the methods sendMessage, sendMessageAlbum, sendInlineQueryResultMessage, and forwardMessages with the new field options of the type sendMessageOptions.
    • Added the method editMessageSchedulingState, which can be used to reschedule a message or send it immediately.
    • Added the method getChatScheduledMessages, which returns all scheduled messages in a chat.
    • Added the field has_scheduled_messages to the class chat.
    • Added the update updateChatHasScheduledMessages, which is sent whenever the field has_scheduled_messages changes in a chat.
    • Added support for reminders in Saved Messages and notifications about other sent scheduled messages in the Notification API.
  • Added support for adding users without a known phone number to the list of contacts:
    • Added the method addContact for adding or renaming contacts without a known phone number.
    • Added the field need_phone_number_privacy_exception to the class userFullInfo, containing the default value for the second parameter of the method addContact.
    • Added the fields is_contact and is_mutual_contact to the class user.
    • Removed the class LinkState and the fields outgoing_link and incoming_link from the class user.
  • Improved support for the top chat action bar:
    • Added the class ChatActionBar, representing all possible types of the action bar.
    • Added the field action_bar to the class chat.
    • Removed the legacy class chatReportSpamState.
    • Removed the legacy methods getChatReportSpamState and changeChatReportSpamState.
    • Added the update updateChatActionBar.
    • Added the method removeChatActionBar, which allows to dismiss the action bar.
    • Added the method sharePhoneNumber, allowing to share the phone number of the current user with a mutual contact.
    • Added the new reason chatReportReasonUnrelatedLocation for reporting location-based groups unrelated to their stated location.
  • Improved support for text entities:
    • Added the new types of text entities textEntityTypeUnderline and textEntityTypeStrikethrough.
    • Added support for nested entities. Entities can be nested, but must not mutually intersect with each other. Pre, Code and PreCode entities can't contain other entities. Bold, Italic, Underline and Strikethrough entities can contain and be contained in all other entities. All other entities can't contain each other.
    • Added the field version to the method textParseModeMarkdown. Versions 0 and 1 correspond to Bot API Markdown parse mode, version 2 to Bot API MarkdownV2 parse mode with underline, strikethrough and nested entities support.
    • The new entity types and nested entities are supported in secret chats also if its layer is at least 101.
  • Added support for native non-anonymous, multiple answer, and quiz-style polls:
    • Added support for quiz-style polls, which has exactly one correct answer option and can be answered only once.
    • Added support for regular polls, which allows multiple answers.
    • Added the classes pollTypeRegular and pollTypeQuiz, representing the possible types of a poll.
    • Added the field type to the classes poll and inputMessagePoll.
    • Added support for non-anonymous polls with visible votes by adding the field is_anonymous to the classes poll and inputMessagePoll.
    • Added the method getPollVoters returning users that voted for the specified option in a non-anonymous poll.
    • Added the new reply markup keyboard button keyboardButtonTypeRequestPoll.
    • Added the field is_regular to the class pushMessageContentPoll.
    • Added the update updatePollAnswer for bots only.
    • Added the field is_closed to the class inputMessagePoll, which can be used by bots to send a closed poll.
  • Clarified in the documentation that file remote ID is guaranteed to be usable only if the corresponding file is still accessible to the user and is known to TDLib. For example, if the file is from a message, then the message must be not deleted and accessible to the user. If the file database is disabled, then the corresponding object with the file must be preloaded by the client.
  • Added support for administrator custom titles:
    • Added the field custom_title to chatMemberStatusCreator and chatMemberStatusAdministrator classes.
    • Added the classes chatAdministrator and chatAdministrators, containing user identifiers along with their custom administrator title and owner status.
    • Replaced the result type of the method getChatAdministrators with chatAdministrators.
  • Improved Instant View support:
    • Added the new web page block pageBlockVoiceNote.
    • Changed value of invisible cells in pageBlockTableCell to null.
    • Added the field is_cached to the class richTextUrl.
  • Improved support for chat backgrounds:
    • Added the classes backgroundFillSolid for solid color backgrounds and backgroundFillGradient for gradient backgrounds.
    • Added support for TGV (gzipped subset of SVG with MIME type "application/x-tgwallpattern") background patterns in addition to PNG patterns. Background pattern thumbnails are still always in PNG format.
    • Replaced the field color in the class backgroundTypePattern with the field fill of type BackgroundFill.
    • Replaced the class backgroundTypeSolid with the class backgroundTypeFill.
  • Added support for discussion groups for channel chats:
    • Added the field linked_chat_id to the class supergroupFullInfo containing the identifier of a discussion supergroup for the channel, or a channel, for which the supergroup is the designated discussion supergroup.
    • Added the field has_linked_chat to the class supergroup.
    • Added the method getSuitableDiscussionChats, which returns a list of chats which can be assigned as a discussion group for a channel by the current user.
    • Added the method setChatDiscussionGroup, which can be used to add or remove a discussion group from a channel.
    • Added the class chatEventLinkedChatChanged representing a change of the linked chat in the chat event log.
  • Added support for slow mode in supergroups:
    • Added the field is_slow_mode_enabled to the class supergroup.
    • Added the field slow_mode_delay to the class supergroupFullInfo.
    • Added the method setChatSlowModeDelay, which can be used to change the slow mode delay setting in a supergroup.
    • Added the class chatEventSlowModeDelayChanged representing a change of the slow mode delay setting in the chat event log.
  • Improved privacy settings support:
    • Added the classes userPrivacySettingRuleAllowChatMembers and userPrivacySettingRuleRestrictChatMembers to include or exclude all group members in a privacy setting rule.
    • Added the class userPrivacySettingShowPhoneNumber for managing the visibility of the user's phone number.
    • Added the class userPrivacySettingAllowFindingByPhoneNumber for managing whether the user can be found by their phone number.
  • Added the method checkCreatedPublicChatsLimit for checking whether the maximum number of owned public chats has been reached.
  • Added support for transferring ownership of supergroup and channel chats:
    • Added the method transferChatOwnership.
    • Added the class CanTransferOwnershipResult and the method canTransferOwnership for checking whether chat ownership can be transferred from the current session.
  • Added support for location-based supergroups:
    • Added the class chatLocation, which contains the location to which the supergroup is connected.
    • Added the field has_location to the class supergroup.
    • Added the field location to the class supergroupFullInfo.
    • Added the ability to create location-based supergroups via the new field location in the method createNewSupergroupChat.
    • Added the method setChatLocation, which allows to change location of location-based supergroups.
    • Added the field can_set_location to the class supergroupFullInfo.
    • Added the class PublicChatType, which can be one of publicChatTypeHasUsername or publicChatTypeIsLocationBased.
    • Added the parameter type to the method getCreatedPublicChats, which allows to get location-based supergroups owned by the user.
    • Supported location-based supergroups as public chats where appropriate.
    • Added the class chatEventLocationChanged representing a change of the location of a chat in the chat event log.
  • Added support for searching chats and users nearby:
    • Added the classes chatNearby and chatsNearby, containing information about chats along with the distance to them.
    • Added the method searchChatsNearby, which returns chats and users nearby.
    • Added the update updateUsersNearby, which is sent 60 seconds after a successful searchChatsNearby request.
  • Improved support for inline keyboard buttons of the type inlineKeyboardButtonTypeLoginUrl:
    • Added the class LoginUrlInfo and the method getLoginUrlInfo, which allows to get information about an inline button of the type inlineKeyboardButtonTypeLoginUrl.
    • Added the method getLoginUrl for automatic authorization on the target website.
  • Improved support for content restrictions:
    • The field restriction_reason in the classes user and channel now contains only a human-readable description why access must be restricted. It is non-empty if and only if access to the chat needs to be restricted.
    • Added the field restriction_reason to the class message. It is non-empty if and only if access to the message needs to be restricted.
    • Added the writable option ignore_platform_restrictions, which can be set in non-store apps to ignore restrictions specific to the currently used operating system.
    • Added the writable option ignore_sensitive_content_restrictions, which can be set to show sensitive content on all user devices. getOption("ignore_sensitive_content_restrictions") can be used to fetch the actual value of the option, the option will not be immediately updated after a change from another device.
    • Added the read-only option can_ignore_sensitive_content_restrictions, which can be used to check, whether the option ignore_sensitive_content_restrictions can be changed.
  • Added support for QR code authentication for already registered users:
    • Added the authorization state authorizationStateWaitOtherDeviceConfirmation.
    • Added the method requestQrCodeAuthentication, which can be used in the authorizationStateWaitPhoneNumber state instead of the method setAuthenticationPhoneNumber to request QR code authentication.
    • Added the method confirmQrCodeAuthentication for authentication confirmation from another device.
  • Added the update updateMessageLiveLocationViewed, which is supposed to trigger an edit of the corresponding live location.
  • Added the parameter input_language_code to the method searchEmojis.
  • Added the method getInactiveSupergroupChats, to be used when the user receives a CHANNELS_TOO_MUCH error after reaching the limit on the number of joined supergroup and channel chats.
  • Added the field unique_id to the class remoteFile, which can be used to identify the same file for different users.
  • Added the new category of top chat list topChatCategoryForwardChats.
  • Added the read-only option animated_emoji_sticker_set_name, containing name of a sticker set with animated emojis.
  • Added the read-only option unix_time, containing an estimation of the current Unix timestamp. The option will not be updated automatically unless the difference between the previous estimation and the locally available monotonic clocks changes significantly.
  • Added the field is_silent to the class notification, so silent notifications can be shown with the appropriate mark.
  • Added the field video_upload_bitrate to the class autoDownloadSettings.
  • Disallowed to call setChatNotificationSettings method on the chat with self, which never worked.
  • Added support for ton:// URLs in messages and inline keyboard buttons.

Changes in 1.5.0 (9 Sep 2019):

  • Changed authorization workflow:
    • Added the state authorizationStateWaitRegistration, which will be received after authorizationStateWaitCode for users who are not registered yet.
    • Added the method registerUser, which must be used in the authorizationStateWaitRegistration state to finish registration of the user.
    • Removed the fields is_registered and terms_of_service from the class authorizationStateWaitCode.
    • Removed the parameters first_name and last_name from the method checkAuthenticationCode.
  • Added support for messages with an unknown sender (zero sender_user_id) in private chats, basic groups and supergroups. Currently, the sender is unknown for posts in channels and for channel posts automatically forwarded to the discussion group.
  • Added support for the new permission system for non-administrator users in groups:
    • Added the class chatPermissions containing all supported permissions, including new permissions can_send_polls, can_change_info, can_invite_users and can_pin_messages.
    • Added the field permissions to the class chat, describing actions that non-administrator chat members are allowed to take in the chat.
    • Added the update updateChatPermissions.
    • Added the method setChatPermissions for changing chat permissions.
    • Added the class chatEventPermissionsChanged representing a change of chat permissions in the chat event log.
    • Replaced the fields can_send_messages, can_send_media_messages, can_send_other_messages, can_add_web_page_previews in the class chatMemberStatusRestricted with the field permissions of the type chatPermissions.
    • Removed the field everyone_is_administrator from the basicGroup class in favor of the field permissions of the class chat.
    • Removed the field anyone_can_invite from the supergroup class in favor of the field permissions of the class chat.
    • Removed the method toggleBasicGroupAdministrators in favor of setChatPermissions.
    • Removed the method toggleSupergroupInvites in favor of setChatPermissions.
    • Renamed the field anyone_can_invite to can_invite_users in the class chatEventInvitesToggled.
    • The permissions can_send_other_messages and can_add_web_page_previews now imply only can_send_messages instead of can_send_media_messages.
    • Allowed administrators in basic groups to use the method generateChatInviteLink.
  • Added out of the box OpenBSD and NetBSD operating systems support.
  • Added possibility to use LibreSSL >= 2.7.0 instead of OpenSSL to build TDLib.
  • Added instructions for building TDLib on Debian 10, OpenBSD and NetBSD to the TDLib build instructions generator.
  • Added support for Backgrounds 2.0:
    • Added the classes BackgroundType, background, backgrounds and InputBackground.
    • Added the method getBackground returning the list of backgrounds installed by the user.
    • Added the method setBackground for changing the background selected by the user.
    • Added the update updateSelectedBackground, which is sent right after a successful initialization and whenever the selected background changes.
    • Added the method removeBackground for removing a background from the list of installed backgrounds.
    • Added the method resetBackgrounds for restoring the default list of installed backgrounds.
    • Added the method searchBackground returning a background by its name.
    • Added the method getBackgroundUrl returning a persistent URL for a background.
    • Removed the getWallpapers method.
    • Removed the wallpaper and the wallpapers classes.
    • The class fileTypeWallpaper can be used for remote file identifiers of both old wallpapers and new backgrounds.
  • Added support for descriptions in basic groups:
    • Added the field description to the class basicGroupFullInfo.
    • Replaced the method setSupergroupDescription with setChatDescription which can be used for any chat type.
  • Added support for emoji suggestions:
    • Added the method searchEmojis for searching emojis by keywords.
    • Added the method getEmojiSuggestionsUrl, which can be used to automatically log in to the translation platform and suggest new emoji replacements.
    • Renamed the class stickerEmojis to emojis.
  • Changed type of the fields old_photo and new_photo in the class chatEventPhotoChanged from chatPhoto to photo.
  • Changed recommended size for inputThumbnail from 90x90 to 320x320.
  • Combined all supported settings for phone number authentication:
    • Added the class phoneNumberAuthenticationSettings which contains all the settings.
    • Replaced the parameters is_current_phone_number and allow_flash_call in the methods setAuthenticationPhoneNumber, sendPhoneNumberConfirmationCode, sendPhoneNumberVerificationCode and changePhoneNumber with the parameter settings of the type phoneNumberAuthenticationSettings.
    • Added support for automatic SMS code verification for official applications via the new field allow_app_hash in the class phoneNumberAuthenticationSettings.
  • Added support for auto-download settings presets.
    • Added the classes autoDownloadSettings and autoDownloadSettingsPresets.
    • Added the method getAutoDownloadSettingsPresets for getting the settings.
    • Added the method setAutoDownloadSettings, which needs to be called whenever the user changes the settings.
  • Added support for minithumbnails - thumbnail images of a very poor quality and low resolution:
    • Added the class minithumbnail.
    • Added the field minithumbnail to animation, document, photo, video and videoNote classes.
    • Added the field audio_cover_minithumbnail to the class audio.
  • Added support for resending messages which failed to send:
    • Added the fields error_code, error_message, can_retry and retry_after to the class messageSendingStateFailed.
    • Added the method resendMessages.
  • Added the field is_animated to the sticker, stickerSet and stickerSetInfo classes. Animated stickers can be received anywhere where non-animated stickers can appear.
  • Added the parameters send_copy and remove_caption to the forwardMessages method to allow forwarding of messages without links to the originals.
  • Added the fields send_copy and remove_caption to inputMessageForwarded method to allow forwarding of a message without link to the original message.
  • Added the method getMessageLinkInfo for getting information about a link to a message in a chat.
  • Added the class userPrivacySettingShowProfilePhoto for managing visibility of the user's profile photo.
  • Added the class userPrivacySettingShowLinkInForwardedMessages for managing whether a link to the user's account is included with forwarded messages.
  • Added the field thumbnail to the classes stickerSet and stickerSetInfo, containing a thumbnail for the sticker set.
  • Added the field is_scam to the classes user and supergroup.
  • Added a new kind of inline keyboard button inlineKeyboardButtonTypeLoginUrl, which for the moment must be processed in the same way as an inlineKeyboardButtonTypeUrl.
  • Added the new class supergroupMembersFilterContacts, allowing to only search for contacts in getSupergroupMembers.
  • Added the new class chatMembersFilterContacts, allowing to only search for contacts in searchChatMembers.
  • Added the class chatEventPollStopped representing the closing of a poll in a message in the chat event log.
  • Added ability to specify the exact types of problems with a call in the method sendCallRating and the new class CallProblem.
  • Changes in tdweb:
    • Supported non-zero offset and limit in readFilePart.

Changes in 1.4.0 (1 May 2019):

  • Added a TDLib build instructions generator, covering in details TDLib building on the most popular operating systems.
  • Added an example of TDLib building and usage from a browser. See https://github.com/tdlight-team/tdlight/blob/master/example/web/ for more details.
  • Allowed to pass NULL pointer to td_json_client_execute instead of a previously created JSON client. Now you can use synchronous TDLib methods through a JSON interface before creating a TDLib JSON client.
  • Added support for media streaming by allowing to download any part of a file:
    • Added the offset parameter to downloadFile which specifies the starting position from which the file should be downloaded.
    • Added the limit parameter to downloadFile which specifies how many bytes should be downloaded starting from the offset position.
    • Added the field download_offset to the class localFile which contains the current download offset.
    • The field downloaded_prefix_size of the localFile class now contains the number of available bytes from the position download_offset instead of from the beginning of the file.
    • Added the method getFileDownloadedPrefixSize which can be used to get the number of locally available file bytes from a given offset without actually changing the download offset.
  • Added the parameter synchronous to downloadFile which causes the request to return the result only after the download is completed.
  • Added support for native polls in messages:
    • Added messagePoll to the types of message content; contains a poll.
    • Added the classes poll and pollOption describing a poll and a poll answer option respectively.
    • Added inputMessagePoll to the types of new input message content; can be used to send a poll.
    • Added the method setPollAnswer which can be used for voting in polls.
    • Added the method stopPoll which can be used to stop polls. Use the Message.can_be_edited field to check whether this method can be called on a message.
    • Added the update updatePoll for bots only. Ordinary users receive poll updates through updateMessageContent.
  • Added a Notification API. See article https://core.telegram.org/tdlib/notification-api for a detailed description.
    • Added the class pushReceiverId which contains a globally unique identifier of the push notification subscription.
    • Changed the return type of the method registerDevice to pushReceiverId to allow matching of push notifications with TDLib instances.
    • Removed the fields disable_notification and contains_mention from updateNewMessage.
    • Renamed the class deviceTokenGoogleCloudMessaging to deviceTokenFirebaseCloudMessaging.
    • Added the field encrypt to classes deviceTokenApplePushVoIP and deviceTokenFirebaseCloudMessaging which allows to subscribe for end-to-end encrypted push notifications.
    • Added the option notification_group_count_max which can be used to enable the Notification API and set the maximum number of notification groups to be shown simultaneously.
    • Added the option notification_group_size_max which can be used to set the maximum number of simultaneously shown notifications in a group.
    • Added the synchronous method getPushReceiverId for matching a push notification with a TDLib instance.
    • Added the method processPushNotification for handling of push notifications.
    • Removed the method processDcUpdate in favor of the general processPushNotification method.
    • Added the update updateNotificationGroup, sent whenever a notification group changes.
    • Added the update updateNotification, sent whenever a notification changes.
    • Added the update updateActiveNotifications for syncing the list of active notifications on startup.
    • Added the update updateHavePendingNotifications which can be used to improve lifetime handling of the TDLib instance.
    • Added the possibility to disable special handling of notifications about pinned messages via the new settings use_default_disable_pinned_message_notifications, disable_pinned_message_notifications in the class chatNotificationSettings and the new setting disable_pinned_message_notifications in the class scopeNotificationSettings.
    • Added the possibility to disable special handling of notifications about mentions and replies via the new settings use_default_disable_mention_notifications, disable_mention_notifications in the class chatNotificationSettings and the new setting disable_mention_notifications in the class scopeNotificationSettings.
    • Added the class PushMessageContent describing the content of a notification, received through a push notification.
    • Added the class NotificationType describing a type of a notification.
    • Added the class notification containing information about a notification.
    • Added the class NotificationGroupType describing a type of a notification group.
    • Added the class notificationGroup describing a state of a notification group.
    • Added the methods removeNotification and removeNotificationGroup for handling notifications removal by the user.
    • Added the separate notification scope notificationSettingsScopeChannelChats for channel chats.
  • Added support for pinned notifications in basic groups and Saved Messages:
    • Added the field pinned_message_id to the class chat.
    • Removed the field pinned_message_id from the class supergroupFullInfo in favor of chat.pinned_message_id.
    • Added the update updateChatPinnedMessage.
    • The right can_pin_messages is now applicable to both basic groups and supergroups.
    • Replaced the method pinSupergroupMessage with pinChatMessage which can be used for any chat type.
    • Replaced the method unpinSupergroupMessage with unpinChatMessage which can be used for any chat type.
  • Added new synchronous methods for managing TDLib internal logging. The old functions are deprecated and will be removed in TDLib 2.0.0.
    • Added the synchronous method setLogStream for changing the stream to which the TDLib internal log is written.
    • Added the synchronous method getLogStream for getting information about the currently used log stream.
    • Added the classes logStreamDefault, logStreamFile and logStreamEmpty describing different supported kinds of log streams.
    • Added the class logVerbosityLevel containing the verbosity level of the TDLib internal log.
    • Added the class logTags containing a list of available TDLib internal log tags.
    • Added the synchronous method setLogVerbosityLevel for changing verbosity level of logging.
    • Added the synchronous method getLogVerbosityLevel for getting the current verbosity level of logging.
    • Added the synchronous method getLogTags returning all currently supported log tags.
    • Added the synchronous method setLogTagVerbosityLevel for changing the verbosity level of logging for some specific part of the code.
    • Added the synchronous method getLogTagVerbosityLevel for getting the current verbosity level for a specific part of the code.
    • Added the synchronous method addLogMessage for using the TDLib internal log by the application.
  • Added support for Instant View 2.0:
    • Replaced the field has_instant_view in class webPage with the instant_view_version field.
    • Added the field version to the class webPageInstantView.
    • Added the class pageBlockCaption.
    • Changed the type of caption fields in pageBlockAnimation, pageBlockAudio, pageBlockPhoto, pageBlockVideo, pageBlockEmbedded, pageBlockEmbeddedPost, pageBlockCollage and pageBlockSlideshow from RichText to pageBlockCaption.
    • Added the class pageBlockListItem and replaced the content of the pageBlockList class with a list of pageBlockListItem.
    • Added 6 new kinds of RichText: richTextSubscript, richTextSuperscript, richTextMarked, richTextPhoneNumber, richTextIcon and richTextAnchor.
    • Added new classes pageBlockRelatedArticle, PageBlockHorizontalAlignment, PageBlockVerticalAlignment and pageBlockTableCell.
    • Added new block types pageBlockKicker, pageBlockRelatedArticles, pageBlockTable, pageBlockDetails and pageBlockMap.
    • Added the flag is_rtl to the class webPageInstantView.
    • Renamed the field caption in classes pageBlockBlockQuote and pageBlockPullQuote to credit.
    • Dimensions in pageBlockEmbedded can now be unknown.
    • Added the field url to pageBlockPhoto which contains a URL that needs to be opened when the photo is clicked.
    • Added the field url to webPageInstantView which must be used for the correct handling of anchors.
  • Added methods for confirmation of the 2-step verification recovery email address:
    • Added the method checkRecoveryEmailAddressCode for checking the verification code.
    • Added the method resendRecoveryEmailAddressCode for resending the verification code.
    • Replaced the field unconfirmed_recovery_email_address_pattern in the class passwordState with the recovery_email_address_code_info field containing full information about the code.
    • The necessity of recovery email address confirmation in setPassword and setRecoveryEmailAddress methods is now returned by the corresponding passwordState and not by the error EMAIL_UNCONFIRMED.
  • Improved the MessageForwardInfo class and added support for hidden original senders:
    • Removed the old messageForwardedPost and messageForwardedFromUser classes.
    • Added the class messageForwardInfo which contains information about the origin of the message, original sending date and identifies the place from which the message was forwarded the last time for messages forwarded to Saved Messages.
    • Added the classes messageForwardOriginUser, messageForwardOriginHiddenUser and messageForwardOriginChannel which describe the exact origins of a message.
  • Improved getting the list of user profile photos:
    • Added the class userProfilePhoto, containing id, added_date and sizes of a profile photo.
    • Changed the type of the field photos in userProfilePhotos to a list of userProfilePhoto instead of a list of photo. getUserProfilePhotos now returns a date for each profile photo.
    • Removed the field id from the class photo (this field was only needed in the result of getUserProfilePhotos).
  • Added the possibility to get a Telegram Passport authorization form before asking the user for a password:
    • Removed the parameter password from the method getPassportAuthorizationForm.
    • Moved the fields elements and errors from the class passportAuthorizationForm to the new class passportElementsWithErrors.
    • Added the method getPassportAuthorizationFormAvailableElements that takes the user's password and returns previously uploaded Telegram Passport elements and errors in them.
  • Added the field file_index to the classes passportElementErrorSourceFile and passportElementErrorSourceTranslationFile.
  • Added the method getCurrentState returning all updates describing the current TDLib state. It can be used to restore the correct state after connecting to a running TDLib instance.
  • Added the class updates which contains a list of updates and is returned by the getCurrentState method.
  • Added the update updateChatOnlineMemberCount which is automatically sent for open group chats if the number of online members in a group changes.
  • Added support for custom language packs downloaded from the server:
    • Added the fields base_language_pack_id`` to the class languagePackInfo`. Strings from the base language pack must be used for untranslated keys from the chosen language pack.
    • Added the fields plural_code, is_official, is_rtl, is_beta, is_installed, total_string_count, translated_string_count, translation_url to the class languagePackInfo.
    • Added the method addCustomServerLanguagePack which adds a custom server language pack to the list of installed language packs.
    • Added the method getLanguagePackInfo which can be used for handling https://t.me/setlanguage/... links.
    • Added the method synchronizeLanguagePack which can be used to fetch the latest versions of all strings from a language pack. The method doesn't need to be called explicitly for the current used/base language packs.
    • The method deleteLanguagePack now also removes the language pack from the list of installed language packs.
  • Added the method getChatNotificationSettingsExceptions which can be used to get chats with non-default notification settings.
  • Added the parameter hide_via_bot to sendInlineQueryResultMessage which can be used for getOption("animation_search_bot_username"), getOption("photo_search_bot_username") and getOption("venue_search_bot_username") bots to hide that the message was sent via the bot.
  • Added the class chatReportReasonChildAbuse which can be used to report a chat for child abuse.
  • Added the method getMessageLocally which returns a message only if it is available locally without a network request.
  • Added the method writeGeneratedFilePart which can be used to write a generated file if there is no direct access to TDLib's file system.
  • Added the method readFilePart which can be used to read a file from the TDLib file cache.
  • Added the class filePart to represent the result of the new readFilePart method.
  • Added the field log_size to the storageStatisticsFast class which contains the size of the TDLib internal log. Previously the size was included into the value of the database_size field.
  • Added the field language_pack_database_size to the storageStatisticsFast class which contains the size of the language pack database.
  • Added the field is_support to the class user which can be used to identify Telegram Support accounts.
  • Added the class HttpUrl encapsulating an HTTP URL.
  • Added the method getMessageLink which can be used to create a private link (which works only for members) to a message in a supergroup or channel.
  • Added support for channel statistics (coming soon):
    • Added the field can_view_statistics to the supergroupFullInfo class.
    • Added the method getChatStatisticsUrl which returns a URL with the chat statistics.
  • Added support for server-side peer-to-peer calls privacy:
    • Added the class userPrivacySettingAllowPeerToPeerCalls for managing privacy.
    • Added the field allow_p2p to callStateReady class which must be used to determine whether a peer-to-peer connection can be used.
  • Added the option ignore_background_updates which allows to skip all updates received while the TDLib instance was not running. The option does nothing if the database or secret chats are used.
  • Added the read-only option expect_blocking, suggesting whether Telegram is blocked for the user.
  • Added the read-only option enabled_proxy_id, containing the ID of the enabled proxy.
  • Added the ability to identify password pending sessions (where the code was entered but not the two-step verification password) via the flag is_password_pending in the session class. TDLib guarantees that the sessions will be returned by the getActiveSessions method in the correct order.
  • Added the classes JsonValue and jsonObjectMember which represent a JSON value and a member of a JSON object respectively as TDLib API objects.
  • Added the synchronous methods getJsonValue and getJsonString for simple conversion between a JSON-encoded string and JsonValue TDLib API class.
  • Added the methods getApplicationConfig and saveApplicationLogEvent to be used for testing purposes.
  • Added the temporarily class databaseStatistics and the method getDatabaseStatistics for rough estimations of database tables size in a human-readable format.
  • Made the method Client.Execute static in .NET interface.
  • Removed the on_closed callback virtual method from low-level C++ ClientActor interface. Callback destructor can be used instead.
  • Updated dependencies in the prebuilt TDLib for Android:
    • Updated SDK to SDK 28 in which helper classes were moved from android.support. to androidx. package.
    • Updated NDK to r19c, which dropped support for Android versions up to 4.0.4, so the minimum supported version is Android 4.1.
    • Updated OpenSSL to version 1.1.1.
    • Added x86_64 libraries.
  • Added out of the box FreeBSD support.
  • Significantly improved TDLib compilation time and decreased compiler RAM usage:
    • In native C++ interface td_api::object_ptr is now a simple homebrew const-propagating class instead of std::unique_ptr.
    • Added the script SplitSource.php, which can be used to split some source code files before building the library to reduce maximum RAM usage per file at the expense of increased build time.
  • The update updateOption with the version option is now guaranteed to come before all other updates. It can now be used to dynamically discover available methods.
  • Added the ability to delete incoming messages in private chats and revoke messages without a time limit:
    • Added the parameter revoke to the method deleteChatHistory; use it to delete chat history for all chat members.
    • Added the fields can_be_deleted_only_for_self and can_be_deleted_for_all_users to the class chat which can be used to determine for whom the chat can be deleted through the deleteChatHistory method.
    • The fields Message.can_be_deleted_only_for_self and Message.can_be_deleted_for_all_users can still be used to determine for whom the message can be deleted through the deleteMessages method.
  • Added support for server-generated notifications about newly registered contacts:
    • Setting the option disable_contact_registered_notifications now affects all user sessions. When the option is enabled, the client will still receive messageContactRegistered message in the private chat, but there will be no notification about the message.
    • getOption("disable_contact_registered_notifications") can be used to fetch the actual value of the option, the option will not be updated automatically after a change from another device.
  • Decreased the maximum allowed first name and last name length to 64, chat title length to 128, matching the new server-side limits.
  • Decreased the maximum allowed value of the forward_limit parameter of the addChatMember method from 300 to 100, matching the new server-side limit.
  • Added protection from opening two TDLib instances with the same database directory from one process.
  • Added copying of notification settings of new secret chats from notification settings of the corresponding private chat.
  • Excluded the sponsored chat (when using sponsored proxies) from unread counters.
  • Allowed to pass decreased local_size in setFileGenerationProgress to restart the generation from the beginning.
  • Added a check for modification time of original file in inputFileGenerated whenever possible. If the original file was changed, then TDLib will restart the generation.
  • Added the destruction of MTProto keys on the server during log out.
  • Added support for hexadecimal-encoded and decimal-encoded IPv4 proxy server addresses.
  • Improved the behavior of changeImportedContacts which now also deletes contacts of users without Telegram accounts from the server.
  • Added the ability to call getStorageStatistics before authorization.
  • Allowed to pass limit = -offset for negative offset in the getChatHistory method.
  • Changed the recommended inputThumbnail size to be at most 320x320 instead of the previous 90x90.
  • Disabled building by default of the native C interface. Use cmake --build . --target tdc to build it.
  • Numerous optimizations and bug fixes:
    • Network implementation for Windows was completely rewritten to allow a literally unlimited number of simultaneously used TDLib instances.
    • TDLib instances can now share working threads with each other. Only a limited number of threads will be created even if there are thousands of TDLib instances in a single process.
    • Removed the restriction on the size of update or response result in JSON interface.
    • Fixed pinning of the 5th chat when there is a sponsored chat.
    • Fixed IPv6 on Windows.
    • Improved network connections balancing, aliveness checks and overall stability.
    • Various autogenerated documentation fixes and improvements.

Changes in 1.3.0 (5 Sep 2018):

  • Added a review of existing TDLib based frameworks in different programming languages.
  • Added a Getting started guide describing the main TDLib concepts and basic principles required for library usage.
  • When a chat is opened, only those messages that have been viewed are marked as read.
  • Improved the proxy settings API:
    • A list of proxies is stored instead of just one proxy.
    • New methods addProxy, editProxy, enableProxy, disableProxy, removeProxy and getProxies were added instead of setProxy and getProxy.
    • Added the method pingProxy which can be used to compute time needed to receive a response from a Telegram server through a proxy or directly.
    • Added support for MTProto proxy via class proxyTypeMtproto.
    • Added support for HTTP proxy via class proxyTypeHttp.
    • For each proxy last time it was used is remembered.
    • Added the method getProxyLink which returns an HTTPS link that can be used to share a proxy with others.
  • Improved the notification settings API. Scope notification settings are now properly synchronized between all devices and chat notification settings can be reset to their default values:
    • The notificationSettings class was split into chatNotificationSettings and scopeNotificationSettings.
    • Only two notification settings scopes are left: notificationSettingsScopePrivateChats which is responsible for default notification settings for private and secret chats and notificationSettingsScopeGroupChats for all other chats.
    • updateNotificationSettings was split into updateChatNotificationSettings and updateScopeNotificationSettings.
    • setNotificationSettings was split into setChatNotificationSettings and setScopeNotificationSettings.
    • getNotificationSettings was replaced with getScopeNotificationSettings.
  • Added the field filter to the searchChatMembers method to support searching among administrators, bots, restricted and banned members.
  • Added the ability to use synchronous requests and setAlarm before the library is initialized.
  • Added the ability to send requests that don't need authentication before the library is initialized. These requests will be postponed and executed at the earliest opportunity. For example, setNetworkType can be used to disable the network for TDLib before the library tries to use it; addProxy can be used to add a proxy before any network activity; or setOption("use_pfs") can be used to guarantee that PFS is used for all requests.
  • Added support for tg:// links in inlineKeyboardButtonTypeUrl and textEntityTypeTextUrl.
  • Added the ability to call deleteAccount in the authorizationStateWaitPassword authorization state.
  • Added the ability to call checkAuthenticationCode with an empty first_name for unregistered users to check the code validity.
  • Added the methods editMessageMedia and editInlineMessageMedia for editing media messages content.
  • Renamed the class shippingAddress to address.
  • Changed the return value of the requestPasswordRecovery method from passwordRecoveryInfo to emailAddressAuthenticationCodeInfo.
  • Added support for sponsored channels promoted by MTProto-proxies:
    • Added the field is_sponsored to the chat class.
    • Added updateChatIsSponsored, sent when this field changes.
  • Added support for marking chats as unread:
    • Added the field is_marked_as_unread to chat.
    • Added the update updateChatIsMarkedAsUnread.
    • Added the method toggleChatIsMarkedAsUnread.
  • Added support for a default value of disable_notification, used when a message is sent to the chat:
    • Added the field default_disable_notification to chat class.
    • Added the update updateChatDefaultDisableNotification.
    • Added the method toggleChatDefaultDisableNotification.
  • Added the field vcard to the contact class.
  • Added the field type to venue, which contains a provider-specific type of the venue,
  • Added the update updateUnreadChatCount, enabled when the message database is used and sent when the number of unread chats has changed.
  • Added the method addLocalMessage for adding a local message to a chat.
  • Added the method getDeepLinkInfo, which can return information about tg:// links that are not supported by the client.
  • Added support for language packs:
    • Added the writable option language_pack_database_path which can be used to specify a path to a database for storing language pack strings, so that this database can be shared between different accounts. If not specified, language pack strings will be stored only in memory. Changes to the option are applied only on the next TDLib launch.
    • Added the writable option localization_target for setting up a name for the current localization target (currently supported: "android", "android_x", "ios", "macos" and "tdesktop").
    • Added the writable option language_pack_id for setting up an identifier of the currently used language pack from the current localization target (a "language pack" represents the collection of strings that can be used to display the interface of a particular application in a particular language).
    • Added the class LanguagePackStringValue describing the possible values of a string from a language pack.
    • Added the class languagePackString describing a string from a language pack.
    • Added the class languagePackStrings containing a list of language pack strings.
    • Added the class languagePackInfo containing information about a language pack from a localization target.
    • Added the class localizationTargetInfo containing information about a localization target.
    • Added the update updateLanguagePackStrings which is sent when some strings in a language pack have changed.
    • Added the synchronous method getLanguagePackString which can be used to get a language pack string from the local database.
    • Added the method getLocalizationTargetInfo which returns information about the current localization target.
    • Added the method getLanguagePackStrings which returns some or all strings from a language pack, possibly fetching them from the server.
    • Added the method setCustomLanguagePack for adding or editing a custom language pack.
    • Added the method editCustomLanguagePackInfo for editing information about a custom language pack.
    • Added the method setCustomLanguagePackString for adding, editing or deleting a string in a custom language pack.
    • Added the method deleteLanguagePack for deleting a language pack from the database.
    • Added the read-only option suggested_language_pack_id containing the identifier of the language pack, suggested for the user by the server.
  • Added support for Telegram Passport:
    • Added two new message contents messagePassportDataSent for ordinary users and messagePassportDataReceived for bots containing information about Telegram Passport data shared with a bot.
    • Added the new file type fileTypeSecure.
    • Added the class datedFile containing information about a file along with the date it was uploaded.
    • Added the helper classes date, personalDetails, identityDocument, inputIdentityDocument, personalDocument, inputPersonalDocument, passportElements.
    • Added the class PassportElementType describing all supported types of Telegram Passport elements.
    • Added the class PassportElement containing information about a Telegram Passport element.
    • Added the class InputPassportElement containing information about a Telegram Passport element to save.
    • Added the classes passportElementError and PassportElementErrorSource describing an error in a Telegram Passport element.
    • Added the field has_passport_data to the passwordState class.
    • Added the methods getPassportElement, getAllPassportElements, setPassportElement, deletePassportElement for managing Telegram Passport elements.
    • Added the methods getPassportAuthorizationForm and sendPassportAuthorizationForm used for sharing Telegram Passport data with a service via a bot.
    • Added the methods sendPhoneNumberVerificationCode, resendPhoneNumberVerificationCode and checkPhoneNumberVerificationCode for verification of a phone number used for Telegram Passport.
    • Added the methods sendEmailAddressVerificationCode, resendEmailAddressVerificationCode and checkEmailAddressVerificationCode for verification of an email address used for Telegram Passport.
    • Added the method getPreferredCountryLanguage returning a most popular language in a country.
    • Added the classes inputPassportElementError and InputPassportElementErrorSource for bots describing an error in a Telegram Passport element.
    • Added the method setPassportElementErrors for bots.
    • Added the class encryptedPassportElement and encryptedCredentials for bots describing an encrypted Telegram Passport element.
  • Improved support for Telegram terms of service:
    • Added the class termsOfService, containing information about the Telegram terms of service.
    • Added the field terms_of_service to authorizationStateWaitCode.
    • Added the update updateTermsOfService coming when new terms of service need to be accepted by the user.
    • Added the method acceptTermsOfService for accepting terms of service.
    • Removed the method getTermsOfService.
  • Added the method getMapThumbnailFile which can be used to register and download a map thumbnail file.
  • Added the methods sendPhoneNumberConfirmationCode, resendPhoneNumberConfirmationCode and checkPhoneNumberConfirmationCode which can be used to prevent an account from being deleted.
  • Added the convenience methods joinChat and leaveChat which can be used instead of setChatMemberStatus to manage the current user's membership in a chat.
  • Added the convenience method getContacts which can be used instead of searchContacts to get all contacts.
  • Added the synchronous method cleanFileName which removes potentially dangerous characters from a file name.
  • Added the method getChatMessageCount which can be used to get the number of shared media.
  • Added the writable option ignore_inline_thumbnails which can be used to prevent file thumbnails sent by the server along with messages from being saved on the disk.
  • Added the writable option prefer_ipv6 which can be used to prefer IPv6 connections over IPv4.
  • Added the writable option disable_top_chats which can be used to disable support for top chats.
  • Added the class chatReportReasonCopyright for reporting chats containing infringing content.
  • Added the method clearAllDraftMessages which can be used to delete all cloud drafts.
  • Added the read-only options message_text_length_max and message_caption_length_max.
  • Added the read-only options animation_search_bot_username, photo_search_bot_username and venue_search_bot_username containing usernames of bots which can be used in inline mode for animations, photos and venues search respectively.
  • Numerous optimizations and bug fixes:
    • Fixed string encoding for .NET binding.
    • Fixed building TDLib SDK for Universal Windows Platform for ARM with MSVC 2017.
    • Fixed the Swift example project.
    • Fixed the syntax error in the Python example.
    • Sticker thumbnails can now have webp extensions if they are more likely to be in WEBP format.

Changes in 1.2.0 (20 Mar 2018):

  • Added support for native .NET bindings through C++/CLI and C++/CX. See using in .NET projects for more details.
  • Added a C# example. See README for build and usage instructions.
  • Added a build and usage example of TDLib SDK for Universal Windows Platform. See README for detailed build and usage instructions. Also, see Unigram, which is a full-featured client rewritten from scratch using TDLib SDK for Universal Windows Platform in less than 2 months.
  • Added a Swift example. See README for build and usage instructions.
  • Added an example of building TDLib for iOS, watchOS, tvOS, and also macOS. See README for detailed build instructions.
  • Added README to C++ and python examples.
  • Link Time Optimization is disabled by default. Use -DTD_ENABLE_LTO=ON CMake option and CMake >= 3.9 to enable it.
  • updateNotificationSettings is now automatically sent when the mute time expires for a chat.
  • Added automatic sending of a corresponding chatAction when a file is being uploaded.
  • updateUserChatAction with chatActionCancel is now automatically sent when the timeout expires for an action.
  • Authorization states authorizationStateWaitCode and authorizationStateWaitPassword are now saved between library restarts for 5 minutes.
  • Added new message content type messageWebsiteConnected.
  • Added new text entity types textEntityTypeCashtag and textEntityTypePhoneNumber.
  • Added new update updateUnreadMessageCount, enabled when message database is used.
  • Method joinChatByInviteLink now returns the joined chat.
  • Method getWebPagePreview now accepts formattedText instead of plain string.
  • Added field phone_number to authenticationCodeInfo, which contains a phone number that is being authenticated.
  • Added field is_secret to messageAnimation, messagePhoto, messageVideo and messageVideoNote classes, which denotes whether the thumbnail for the content must be blurred and the content must be shown only while tapped.
  • Added field expires_in to messageLocation for live locations.
  • Added flag can_be_reported to chat class.
  • Added flag supports_streaming to classes video and inputMessageVideo.
  • Added parameter message_ids to reportChat, which can be used to report specific messages.
  • Added method checkChatUsername for checking whether a username can be set for a chat.
  • Added method getRepliedMessage, which returns a message that is replied by a given message.
  • Added method getChatPinnedMessage, which returns the pinned message from a chat.
  • Added method searchStickers to search by emoji for popular stickers suggested by the server.
  • Added method searchStickerSets to search by title and name for popular sticker sets suggested by the server.
  • Added method searchInstalledStickerSets to search by title and name for installed sticker sets.
  • Added methods for handling connected websites: getConnectedWebsites, disconnectWebsite and disconnectAllWebsites.
  • Added method getCountryCode, which uses current user IP address to identify their country.
  • Added option t_me_url.
  • Fixed BlackBerry spelling in deviceTokenBlackBerryPush.
  • Fixed return type of getChatMessageByDate method, which is Message and not Messages.
  • Ensured that updateOption("my_id") comes before updateAuthorizationState with authorizationStateReady.
  • Numerous optimizations and bug fixes.

Changes in 1.1.1 (4 Feb 2018):

  • Fixed C JSON bindings compilation error.
  • Fixed locale-dependent JSON generation.

Changes in 1.1.0 (31 Jan 2018):

  • Methods td::Log::set_file_path and td_set_log_file_path now return whether they succeeded.
  • Added methods td::Log::set_max_file_size and td_set_log_max_file_size for restricting maximum TDLib log size.
  • Added methods td::Log::set_fatal_error_callback and td_set_log_fatal_error_callback for providing callbacks on fatal errors.
  • JNI-bindings are now package-agnostic. Use CMake option TD_ENABLE_JNI to enable JNI-bindings.
  • Added a Java example. See README for build and usage instructions.
  • Added support for text entities in media captions.
    • Added new type formattedText containing a text with entities.
    • Replaced all string fields caption with fields of type formattedText.
    • Replaced fields text and entities with the field text of type formattedText in class messageText.
    • Replaced fields text and entities with the field text of type formattedText in class inputMessageText.
    • Replaced fields text and text_entities with the field text of type formattedText in class game.
    • Removed field parse_mode from class inputMessageText.
    • Added synchronous method parseTextEntities.
  • updateNewMessage is now sent for all sent messages.
  • updateChatLastMessage is now sent when any field of the last message in a chat changes.
  • Reworked the registerDevice method:
    • Added parameter other_user_ids to method registerDevice to support multiple accounts.
    • It is now possible to specify tokens for VoIP pushes, WNS, web Push API, Tizen Push Service as DeviceToken.
    • Added support for Apple Push Notification Service inside App Sandbox.
  • Added method searchChatsOnServer analogous to searchChats, but using server search.
  • Results from the searchChatsOnServer method are now excluded from searchPublicChats results, so searchChatsOnServer (along with searchContacts) should be called whenever searchPublicChats is called to ensure that no results were omitted.
  • Added parameter as_album to method getPublicMessageLink to enable getting public links for media albums.
  • Added field html to class publicMessageLink, containing HTML-code for message/message album embedding.
  • Added parameter only_if_pending to method cancelDownloadFile to allow keeping already started downloads.
  • Methods createPrivateChat, createBasicGroupChat, createSupergroupChat and createSecretChat can now be called without a prior call to getUser/getBasicGroup/getSupergroup/getSecretChat.
  • Added parameter force to methods createPrivateChat, createBasicGroupChat and createSupergroupChat to allow creating a chat without network requests.
  • Numerous optimizations and bug fixes.