На этой странице собраны основные изменения в дистрибутиве https://core.telegram.org/tdlib/tdlib.zip библиотеки TD с момента её первого выкладывания в публичный доступ.
02.11.2016#2 Небольшие исправления, улучшения документации и добавления:
02.11.2016 Небольшие исправления, улучшения документации и добавления:
NullPointerException при вызове toString у классов TdApi.null-полей им добавлена @Nullable-аннотация (android.support.annotation.Nullable).26.10.2016 Очень краткий список изменений, затрагивающий только видимые изменения в API:
null, если соответствующее поле отсутствует. В документации все соответствующие поля отмечены как nullable. Как следствие, убраны классы BotInfoEmpty, MessageNotForwarded, ReplyMarkupNone и MessageDeleted.File.persistentId теперь может быть HTTP URL. InputFilePersistentId может быть использован для отправки некоторых небольших файлов по их URL. В данный момент библиотека не умеет скачивать файлы по HTTP/HTTPS, поэтому если файл не скачан, а persistentId начинается с http:// или https://, приложению нужно самостоятельно скачать соответствующий файл вместо вызова DownloadFile.EditMessageText и EditMessageCaption, апдейт UpdateEditMessage.Game, MessageGame, MessageGameScore и InputMessageGame, новое действие в чате - SendMessageStartPlayGameAction.Contact и Venue, описывающие соответствующие содержимое сообщений, изменено содержимое классов MessageContact, MessageVenue, InputMessageContact и InputMessageVenue.InlineKeyboardButton, KeyboardButton, ReplyMarkupInlineKeyboard, в ReplyMarkupShowKeyboard.rows вместо string кнопки задаются в виде KeyboardButton.callback-запросов: метод GetCallbackQueryAnswerChat добавлено поле draftMessage, метод ChangeChatDraftMessage и апдейт UpdateChatDraftMessage, его обновляющие, в InputMessageText можно передать флаг clearDraft. Черновики, как и многое другое, влияют на ранжирование чатов, поэтому для правильного ранжирования важно, чтобы приложение сортировало чаты в точности по полю Chat.order.Participant используется Member, вместо role - status.username - класс MessageEntityMentionName.title, about, firstName, lastName (255 символов) и на длину caption (200 символов). SearchMessagesFilterChatPhoto.GetInlineQueryResults и InlineQueryResults.Markdon/HTML-разметку: поле InputMessageText.parseMode. Передавайте null, чтобы отправить text как есть или вручную передать entities.flash-вызовов - пропущенных звонков, поступающих на телефон пользователя. Для этого в запросе SetAuthPhoneNumber добавлены параметры, allowFlashCall и isCurrentPhoneNumber, позволяющие разрешить этот тип авторизации.AuthStateWaitCode добавлена информация о том, зарегистрирован ли уже пользователь, информация о способе, которым пользователю был выслан код, а также каким следующим способом и через сколько код может быть выслан повторно.AuthStateWaitName, метод SetAuthName стал частью метода CheckAuthCode. Поля firstName и lastName при вызове CheckAuthCode следует указывать в точности, если пользователь не был зарегистрирован ранее.ResendAuthCode.UpdateMessageDate и UpdateMessageId добавлен более естественный апдейт UpdateMessageSendSucceeded. Теперь при отсылке сообщения, если оно удалено пользователем ещё до отправки явным запросом DeleteMessages, то клиенту не придёт об этом никаких апдейтов. Если оно удалено TDLib, например, из-за того что соответствующий чат не доступен даже для чтения, то придёт UpdateDeleteMessages с идентификатором сообщения. В противном случае придёт или UpdateMessageSendSucceeded или UpdateMessageSendFailed.removeFromChatList в DeleteChatHistory.GetChatMember для получения информации об одном из участников чата и его статусе в чате.Error поле description переименовано в message, в классе UpdateMessageSendFailed поле errorDescription переименовано в errorMessage.UpdateNewMessage добавлено поле disableNotification, по которому можно понимать, нужно ли показывать оповещение о сообщении.Message поле fromId переименовано в senderUserId, поле viaBotId переименовано в viaBotUserId, добавлено поле canBeEdited.MessageWebPage и MessageText объединены: в классе MessageText добавлено поле webPage.UpdateChatTopMessage, приходящий при изменении Chat.topMessage.ChangePhoneNumber, ResendChangePhoneNumberCode, CheckChangePhoneNumberCode.GetAccountTtl и ChangeAccountTtl.GetAuthorizations и DeleteAuthorization.GetSupportUser.GetWallpapers.DeleteAccount. Стоит помнить, что новый аккаунт на один и тот же номер телефона можно регистировать не чаще одного раза в две недели.caption в MessageAudio и MessageVoice.ChannelFull добавлено поле pinnedMessageId, добавлены методы PinChannelMessage и UnpinChannelMessage, служебный тип сообщений MessagePinMessage.GetMessages, позволяющий получить с сервера сообщения по их идентификатору. Метод следует использовать для получения сообщений по ReplyToMessageId, PinMessageId и GameMessageId.SearchUser и SearchChannel объединены в SearchPublicChat.GetContacts и SearchContacts объединены в SearchContacts.DeleteRecentlyFoundChat.GetBlockedUsers.SetOption опции, начинающеся с x или X зарезервированы для клиента, их можно устанавливать и получать без ограничений, используя в качестве типизированного персистентного key-value хранилища. Тем не менее, не рекомендуется использовать это хранилище для чего-либо кроме небольшого количества опций, так как оно полностью загружается в память при старте приложения, что может привести к существенному увеличению времени запуска.Photo.photos переименовано в Photo.sizes.ChatInviteLinkInfo добавлены поля photo, member_count и members.WebPage добавлены поля audio, video и voice.Location поля latitude и longitude поменяны местами.UserTypeBot добавлено поле needLocation.UserFull добавлено поле about, добавлен метод ChangeAbout для изменения значения этого поля у текущего пользователя.GroupFull поле adminId переименовано в creatorUserId.Channel и методе CreateNewChannelChat убрано поле isBroadcast, потому что isBroadcast == !isSupergroup.ChannelFull поле adminCount переименовано в administratorCount, добавлено поле canSetUsername.UpdateChannelFull, который может приходить при изменении какой-либо информации в ChannelFull.Users добавлено поле totalCount, полезно при интерпретации результата запроса GetBlockedUsers.NotificationSettings поле showPreviews переименовано в showPreview.MessageChatJoinByLink поле inviterId переименовано в inviterUserId.GetChatHistory поле fromId переименовано в fromMessageId.CreateNewGroupChat поле participantIds переименовано в userIds.SearchChatMessages убран параметр importantOnly, в методах SendMessage, SendInlineQueryResultMessage, ForwardMessages убран параметр isPost.ChatParticipant вместо user отдаётся только userId, поле inviterId переименовано в inviterUserId. Стоит напомнить, что библиотека гарантирует, что если она знает о пользователе, группе, канале или чате, то она оповестила клиент об этом одним из апдейтов UpdateUser, UpdateGroup, UpdateChannel или UpdateChat. Если на стороне клиента есть неочищаемый кеш пользователей, групп, каналов и чатов, то запросы GetUser, GetGroup, GetChannel и GetChat для него бесполезны.ToggleGroupEditors, ChangeChannelUsername, ToggleChannelInvites, ToggleChannelSignMessages возвращают Ok вместо Group/Channel. Как и во всех других случаях изменения  полей в Group/Channel придут клиенту соответствующими апдейтами.MessageForwardedFromChannel переименован в MessageForwardedPost, вместо поля channelId добавлено поле chatId, поле userId переименовано в senderUserId (как и в классе messageForwardedFromUser).SetAlarm, который вернёт Ok после истечения указанного промежутка времени.InputContact удалён в пользу Contact.Contacts удалён в пользу Users.PhotoCrop.08.03.2016 Исправлено падение в методе GetChatHistory.
05.03.2016 Усовершенствован метод GetChatHistory. Он теперь поддерживает получение истории сообщений, начиная с произвольного известного клиенту сообщения, если при этом результат запроса заведомо окажется рядом с известным сообщением. В частности, заведомо корректными являются запросы с -limit <= offset <= 0, если клиенту известно сообщение с идентификатором fromId. Также можно получить историю сообщений, передав в fromId идентификатор неизвестного клиенту сообщения, если окрестности этого сообщения заведомо будут присутствовать в результате запроса. В частности, это так, если -limit < offset < 0. Теперь метод GetChatHistory должен всегда возвращать правильный результат или ошибку.
02.03.2016 Появился поиск по префиксу среди пользователей-контактов (метод SearchContacts). Добавлен метод GetRecentInlineBots, позволяющий получить последних использованных inline-ботов. Появилась возможность искать по префиксу названия чаты в списке локально известных чатов пользователя (метод SearchChats). Поддержана работа со списком недавно найденных через поиск чатов. Можно получать этот список, передав в SearchChats пустой запрос, добавлять новые элементы в этот список, используя метод AddRecentlyFoundChat, и очищать список полностью, используя метод DeleteRecentlyFoundChats. На данный момент, поиск по префиксу чувствителен к регистру всех символов, кроме латиницы. 
29.02.2016 Появилась возможность получать превью ссылки до отправки сообщения через метод 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 для супергрупп. В информацию о форварде сообщения из канала добавлены идентификатор отправителя сообщения и идентификатор исходного сообщения, если они известны.
20.02.2016 Поддержана работа с визуальным представлением голосовых сообщений: в классах Voice и InputMessageVoice добавлено поле waveform. Появился статус прослушанности голосовых и аудио сообщений: в классах MessageAudio и MessageVoice добавлено поле isListened, обновляемое через UpdateMessageContent. Добавлен метод OpenMessageContent, который нужно вызывать при открытии медиа-контента сообщения. В частности, его нужно вызывать при прослушивании аудио и голосовых сообщений. Поддержана работа с сохранёнными анимациями. Добавлены методы GetSavedAnimations, AddSavedAnimation и DeleteSavedAnimation, а также апдейт UpdateSavedAnimations. В классе Channel добавлено поле anyoneCanInvite, позволяющее разрешить всем участникам супергруппы приглашать новых участников, и которое можно изменять запросом ToggleChannelInvites. В классе Video добавлено поле fileName. При отправке видео появилаcь возможность указывать его ширину и высоту. В классах Animation, Audio, Video, Voice изменён порядок неокторых полей.
12.02.2016 Исправлено периодически воспроизводившееся падение при старте приложения. Добавлен метод TG.setFileLogEnabled, позволяющий включить/выключить логирование в файл в дополнение к логированию в Android Log (по умолчанию логирование в файл выключено, раньше было всегда включено). Добавлен метод TG.setLogVerbosity, позволяющий изменять количество данных, выводимых библиотекой в лог. Добавлен метод TG.setUseTestDc, позволяющий использовать тестовое окружение Telegram. Тестовое окружение полностью независимо от Production окружения, которое используется обычно, никакие данные из Production окружения в нём недоступны. Тестовое окружение может быть полезно использовать, если нет второй симки и не хочется тестировать на основном аккаунте, или для тестировании перевода группы в супергруппу, потому что на нём установлено меньшее ограничение на размер группы, которую можно перевести в супергруппу. Добавлены методы ExportChatInviteLink, CheckChatInviteLink, ImportChatInviteLink и классы ChatInviteLink, ChatInviteLinkInfo, позволяющие приглашать в чат пользователей по ссылке. Появилась возможность массового приглашения пользователей в канал через метод AddChatParticipants. Поле Message.isOutgoing заменено на поле sendState типа MessageSendState. Теперь никогда не нужно (и очень скоро будет нельзя) смотреть на значение идентификатора сообщения и на его дату, чтобы определить, что оно ещё только отправляется или что отправить сообщение не удалось.
03.02.2016 Очень краткий список изменений, затрагивающий только видимые изменения в 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 для получения файла по его персистентному идентификатору (не должен использоваться в мобильных клиентах).19.08.2015 В классе Messages добавлено поле totalCount, в котором в результате запроса SearchMessages возвращается общее количество результатов. В InputMessageContact добавлено опциональное поле userId. Запросы ChangeChatTitle, ChangeChatPhoto, AddChatParticipant и DeleteChatParticipant теперь синхронные и возвращают Ok только в случае успешного завершения выполнения запроса на сервере. Отключено всё некритичное логирование.
15.08.2015 Исправлено падение в CancelDownloadFile. В классах Sticker и StickerSet добавилось поле rating, зависящее от частоты использования, которое можно использовать для сортировки стикеров. Для удобства тестирования, рейтинг пока не сохраняется между перезапусками. Добавлен поиск сообщений/медиа.
11.08.2015 В классе Audio добавилось поле albumCoverThumb с тумбой обложки альбома. Полноразмерную обложку нужно пытаться вытаскивать из скачанного mp3-файла. Добавлены методы SearchUser для поиска пользователя по username и ChangeUsername для изменения username залогиненного пользователя.
09.08.2015 Исправлены падения в некоторых ситуациях в GetStickers и GetStickerSets. Поддержана работа с пользовательскими профильными фотографиями и фотографиями чатов: добавлен апдейт UpdateChatPhoto, методы SetProfilePhoto, DeleteProfilePhoto, ChangeChatPhoto. Добавлен метод ChangeName для изменения имени залогиненного пользователя. Поддержана работа с контактами: методы ImportContacts и DeleteContacts.
02.08.2015 Исправлен баг с полем replyMarkup класса Message, которое было всегда null. Добавлена поддержка deep linking для ботов — метод SendBotStartMessage. audio переименовано везде в voice. Добавлен новый тип сообщений messageAudio — аудиозаписи обычно в формате mp3 с указанием названия и исполнителя. Также добавлены сопутствующие классы Audio и InputMessageAudio. Улучшена поддержка стикеров при отправке. Появилась поддержка наборов стикеров. В классе Sticker появилось поле set_id — идентификатор сета, которому принадлежит стикер. Добавлены классы StickerSet, StickerSetInfo, StickerSets, методы GetStickerSets, GetStickerSet, SearchStickerSet, UpdateStickerSet.
25.07.2015 Добавлено поле type в класс User, по которому можно отличать обычных пользователей от удалённых пользователей и от ботов. Добавлена поддержка ботов (всё кроме deep linking). В UserFull и ChatParticipant добавлена информация о поддерживаемых ботом командах. В сообщениях от ботов добавилась информация о способе ответа на это сообщение в виде ReplyMarkup. Изменилось описание различных видов ReplyMarkup. В чате можно узнать идентификатор последнего сообщения с ReplyMarkup, который нужно отображать при заходе в чат. Этот идентификатор изменяется апдейтом updateChatReplyMarkup. Для скрытия клавиатуры после использования добавлен метод deleteChatReplyMarkup. Вместо UpdateUserName, UpdateUserPhoneNumber, UpdateUserProfilePhoto, UpdateUserLinks приходи один апдейт UpdateUser. Из UserFull удалены realFirstName и realLastName, которые больше не присылаются сервером.
20.07.2015 Краткий список изменений:
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).18.05.2015 Полностью переписана работа с файлами. Теперь информация о них сохраняется между перезапусками библиотеки. Добавился метод CancelDownloadFile. UpdateFile приходит после каждого вызова DownloadFile.
06.05.2015 Убраны неиспользуемые состояние авторизации AuthStateWaitSendSms и метод AuthSendSms. Добавлено новое состояние авторизации AuthStateLoggingOut. В метод AuthReset добавлено опциональное поле boolean force. В классах Audio, Document и Video убраны поля userId и date. В классе Document поле fileName ициализируется, если имя файла было указано отправляющим клиентом. Добавлены методы GetOption и SetOption. Список доступных опций и их описание можно посмотреть в https://core.telegram.org/tdlib/options. Особенно полезны могут быть опции connection_state, my_id и network_unreachable.
22.04.2015 Добавлена версия библиотеки под x86. Добавлена поддержка стикеров, настроек оповещения, возможность удаления всей истории сообщений для конкретного чата. CreateGroupChat теперь возвращает Chat.
15.04.2015 Существенно обновлено API. Изменены названия некоторых сущностей: chat—>groupChat, dialog—>chat, phone—>phoneNumber. Названия всех java-классов теперь пишутся в UpperCamelCase, а полей и параметров функций в lowerCamelCase.
10.04.2015 Исправлен баг в getDialogHistory с отрицательным offset.
05.04.2015 Первый запрос getContacts теперь выполняется синхронно, возвращаемый результат всегда полон.
03.04.2015 Добавлена javadoc-документация.