Эта страница сохранена только в исторических целях. За дальнейшим развитием TDLib можно следить на GitHub.
На этой странице собраны основные изменения в дистрибутиве tdlib.zip с момента его первого выкладывания в публичный доступ и до переезда проекта на GitHub.
GetChatHistory.GetChatHistory. Он теперь поддерживает получение истории сообщений, начиная с произвольного известного клиенту сообщения, если при этом результат запроса заведомо окажется рядом с известным сообщением. В частности, заведомо корректными являются запросы с -limit <= offset <= 0, если клиенту известно сообщение с идентификатором fromId. Также можно получить историю сообщений, передав в fromId идентификатор неизвестного клиенту сообщения, если окрестности этого сообщения заведомо будут присутствовать в результате запроса. В частности, это так, если -limit < offset < 0.GetChatHistory должен всегда возвращать правильный результат или ошибку.SearchContacts).GetRecentInlineBots, позволяющий получить последних использованных inline-ботов.SearchChats).SearchChats пустой запрос, добавлять новые элементы в этот список, используя метод AddRecentlyFoundChat, и очищать список полностью, используя метод DeleteRecentlyFoundChats. На данный момент, поиск по префиксу чувствителен к регистру всех символов, кроме латиницы. GetWebPagePreview. Не стоит вызывать этот метод слишком часто.SearchPublicChats для поиска публичных чатов по префиксу их username.fromChannel во всех методах отправки сообщений переименовано в isPost.Message добавлены поля isPost (на данный момент true в точности для всех сообщений в броадкаст-каналах) и editDate. Появилась поддержка сообщений в броадкаст-каналах с указанием автора сообщения.Channel добавлено поле signMessages, отвечающее за указание автора при отправке сообщения и метод ToggleChannelSignMessages для его изменения.User добавлено поле hasAccess. Если значение этого поля false, то с пользователем нельзя делать никаких активных действий. В данный момент, доступ может отсутствовать только к авторам сообщений в броадкаст-канале.UpdateMessageSendFailed и InlineQueryResults.NotificationSettings удалено поле eventsMask.SendMessage, SendInlineQueryResult и ForwardMessages добавлены поля disableNotification для отправки сообщений без уведомления получателя и fromBackground для отправки сообщений без полноценного открытия приложения (можно всегда передавать false).ToggleGroupEditors.username для супергрупп.Voice и InputMessageVoice добавлено поле waveform.MessageAudio и MessageVoice добавлено поле isListened, обновляемое через UpdateMessageContent.OpenMessageContent, который нужно вызывать при открытии медиа-контента сообщения. В частности, его нужно вызывать при прослушивании аудио и голосовых сообщений.Поддержана работа с сохранёнными анимациями.
GetSavedAnimations, AddSavedAnimation и DeleteSavedAnimation, а также апдейт UpdateSavedAnimations.Channel добавлено поле anyoneCanInvite, позволяющее разрешить всем участникам супергруппы приглашать новых участников, и которое можно изменять запросом ToggleChannelInvites.Video добавлено поле fileName.Animation, Audio, Video, Voice изменён порядок некоторых полей.TG.setFileLogEnabled, позволяющий включить/выключить логирование в файл в дополнение к логированию в Android Log (по умолчанию логирование в файл выключено, раньше было всегда включено).TG.setLogVerbosity, позволяющий изменять количество данных, выводимых библиотекой в лог.TG.setUseTestDc, позволяющий использовать тестовое окружение Telegram. Тестовое окружение полностью независимо от Production окружения, которое используется обычно, никакие данные из Production окружения в нём недоступны. Тестовое окружение может быть полезно использовать, если нет второй симки и не хочется тестировать на основном аккаунте, или для тестировании перевода группы в супергруппу, потому что на нём установлено меньшее ограничение на размер группы, которую можно перевести в супергруппу.ExportChatInviteLink, CheckChatInviteLink, ImportChatInviteLink и классы ChatInviteLink, ChatInviteLinkInfo, позволяющие приглашать в чат пользователей по ссылке.AddChatParticipants.Message.isOutgoing заменено на поле sendState типа MessageSendState. Теперь никогда не нужно (и очень скоро будет нельзя) смотреть на значение идентификатора сообщения и на его дату, чтобы определить, что оно ещё только отправляется или что отправить сообщение не удалось.Очень краткий список изменений, затрагивающий только видимые изменения в API:
GroupChat называется просто Group, его идентификатор больше не совпадает с идентификтаором соответствующего объекта Chat. Переименованы некоторые классы и поля классов.ChatPhoto. В класс Chat добавлены поля title и photo. Соответствующие поля убраны из класса Group.UpdateGroup и UpdateChannel по аналогии с UpdateUser. Гарантируется, что если библиотека знает о пользователе, группе или канале, то она оповестила клиент об этом одним из этих апдейтов. Если на стороне клиента есть неочищаемый кеш пользователей групп и каналов, то запросы GetUser, GetGroup и GetChannel для него бесполезны.UpdateChat (про который также гарантируется, что если библиотека знает о чате, то она уже оповестила этим апдейтом клиент), UpdateChatOrder, UpdateMessageViews. Вместо апдейта UpdateChatParticipantsCount будет приходить UpdateGroup, так как количество участников поддерживается только для групповых чатов.Channel, ChannelFull, ChannelChatInfo, методы GetChannel и GetChannelFull, ChangeChannelUsername, ToggleChannelComments (возвращает всегда ошибку, комментарии в каналах включить невозможно), ChangeChannelAbout, GetChannelParticipants, DeleteChannel.Chat появилось поле order. Диалоги должны быть упорядочены по убыванию пары (order, chatId). Чаты с order == 0 находятся вне известной части списка диалогов. Метод GetChats теперь устойчив к data race и вместо offset принимает offsetOrder, offsetChatId.OpenChat/CloseChat, которые необходимо вызывать при открытии/закрытии чата пользователем. Без них не будет работать получение новых апдейтов в каналах и многие другие полезные фичи.ViewMessages, который нужно вызывать при просмотре сообщения пользователем внутри чата. Теперь прочитывание сообщений в чате привязано именно к вызову этого метода, а не GetChatHistory.SearchChannel для поиска канала по его username.CreateGroupChat переименован в CreateNewGroupChat. Добавлен метод CreateNewChannelChat для создания нового чата канала/супергруппы и CreateChannelChat для создания чата канала по известному идентификатору канала (может понадобиться после SearchChannel).MessageAnimation, содержащий анимацию в формате gif или mpeg4, и соответствующий класс Animation. Добавлен фильтр при поиске сообщений, позволяющий находить только анимации.authorization_date, supergroup_size_max (= 1000). Убрана опция broadcast_size_max, опция group_chat_size_max переименована в group_size_max.SearchMessages переименован в SearchChatMessages, из него убрана возможность глобального поиска. Добавлен метод SearchMessages для глобального поиска сообщений, включая сообщения в каналах пользователя.SendInlineQueryResultMessage. В классе UserTypeBot добавлены поля isInline и inlineQueryPlaceholder.ChatParticipantRole и его подклассы ChatParticipantRoleAdmin, ChatParticipantRoleEditor, ChatParticipantRoleModerator, ChatParticipantRoleGeneral, ChatParticipantRoleLeft, ChatParticipantRoleKicked. В классе ChatParticipant добавлено поле role этого типа.Group вместо поля left добавлено поле role.Group добавлены поля anyoneCanEdit, isActive, migratedToChannelId.User добавлены поля isVerified и restrictionReason.Message добавлены поля isOutgoing, canBeDeleted, viaBotId, views, поле message переименовано в content, вместо полей forwardFromId и forwardDate добавлено поле forwardInfo с информацией о форварде.disableWebPagePreview перенесено из метода SendMessage в класс InputMessageText. В классе InputMessageText добавлено поле entities.ToggleGroupEditors, позволяющий включать/выключать в групповом чате возможность назначать выбранных администраторов.DeleteChatParticipant заменён на ChangeChatParticipantRole. Теперь он позволяет не только удалять участников из группы/канала, но и изменять их полномочия.SetAuthCode переименован CheckAuthCode.MessageText и MessageWebPage добавлено поле entities с инофрмацией о разметке.MessageChatAddParticipant переименовано в MessageChatAddParticipants и может теперь содержать несколько новых участников в каналах. В групповых чатах по-прежнему одновременно не может быть добавлено более одного участника.MessageChatMigrateTo и MessageChatMigrateFrom.caption к переслыаемым документам. ProfilePhotoCrop переименован в PhotoCrop.Animation, Document или Sticker.UpdateDeleteMessages поле messages переименовано в messageIds.UpdateFileProgress отрицательное значение поля ready означает, что загрузка была прервана из-за ошибки.mimeType.ChatParticipants.SecretChatInfo и метод CreateNewSecretChat. Они отключены на данный момент. Первый никогда не возвращается, второй ничего не делает.UpdateNewInlineQuery и UpdateNewChosenInlineResult (только для ботов).SetAuthBotToken переименован в CheckAuthBotToken (только для ботов, отключен).GetFilePersistent для получения файла по его персистентному идентификатору (не должен использоваться в мобильных клиентах).Messages добавлено поле totalCount, в котором в результате запроса SearchMessages возвращается общее количество результатов.InputMessageContact добавлено опциональное поле userId.ChangeChatTitle, ChangeChatPhoto, AddChatParticipant и DeleteChatParticipant теперь синхронные и возвращают Ok только в случае успешного завершения выполнения запроса на сервере.CancelDownloadFile.Sticker и StickerSet добавилось поле rating, зависящее от частоты использования, которое можно использовать для сортировки стикеров. Для удобства тестирования, рейтинг пока не сохраняется между перезапусками.Audio добавилось поле albumCoverThumb с тумбой обложки альбома. Полноразмерную обложку нужно пытаться вытаскивать из скачанного mp3-файла.SearchUser для поиска пользователя по username и ChangeUsername для изменения username залогиненного пользователя.GetStickers и GetStickerSets.UpdateChatPhoto, методы SetProfilePhoto, DeleteProfilePhoto, ChangeChatPhoto.ChangeName для изменения имени залогиненного пользователя. Поддержана работа с контактами: методы ImportContacts и DeleteContacts.replyMarkup класса Message, которое было всегда null.SendBotStartMessage.audio переименовано везде в voice.messageAudio — аудиозаписи обычно в формате mp3 с указанием названия и исполнителя. Также добавлены сопутствующие классы Audio и InputMessageAudio.Sticker появилось поле set_id — идентификатор сета, которому принадлежит стикер.StickerSet, StickerSetInfo, StickerSets, методы GetStickerSets, GetStickerSet, SearchStickerSet, UpdateStickerSettype в класс User, по которому можно отличать обычных пользователей от удалённых пользователей и от ботов.UserFull и ChatParticipant добавлена информация о поддерживаемых ботом командах.ReplyMarkup.ReplyMarkup.ReplyMarkup, который нужно отображать при заходе в чат. Этот идентификатор изменяется апдейтом updateChatReplyMarkup.deleteChatReplyMarkup.UpdateUserName, UpdateUserPhoneNumber, UpdateUserProfilePhoto, UpdateUserLinks приходит один апдейт UpdateUser.UserFull удалены realFirstName и realLastName, которые больше не присылаются сервером.FileEmpty и FileLocal объединены в File.emoji.mimeType и caption, но появился caption у messagePhoto и messageVideo.Location.Message поменялся порядок полей.unknownPrivateChatInfo и unknownGroupChatInfo. Тем не менее, это не значит, что такого не бывает. Теперь такие объекты будут отдаваться как обычные, у которых будет инициализирован только id. Написать такому пользователю/в такую группу нельзя будет.messageVenue.caption.updateMessageSendFailed с описанием ошибки.lastRead изменились на более говорящие.updateFile.getMessage и getFile.forwarded_messages_count_max (= 100).CancelDownloadFile.
-UpdateFile приходит после каждого вызова DownloadFile.AuthStateWaitSendSms и метод AuthSendSms.AuthStateLoggingOut.AuthReset добавлено опциональное поле boolean force.userId и date.fileName ициализируется, если имя файла было указано отправляющим клиентом.GetOption и SetOption.connection_state, my_id и network_unreachable.CreateGroupChat теперь возвращает Chat.Существенно обновлено API:
chat—>groupChatdialog—>chatphone—>phone_number  getDialogHistory с отрицательным offset.getContacts теперь выполняется синхронно, возвращаемый результат всегда полон.