# Change log

На этой странице собраны основные изменения в дистрибутиве [https://core.telegram.org/tdlib/tdlib.zip]() библиотеки [TD](/tdlib.md) с момента её первого выкладывания в публичный доступ.

`02.11.2016#2` Небольшие исправления, улучшения документации и добавления:

- Включена бета-поддержка секретных чатов. Стоит ожидать, что они будут создаваться с актуальными версиями приложений для iPhone, Android и на TDLib, в них будут приходить сообщения любых типов, и в них можно отправить сообщения любых типов с теми же ограничениями, что и в остальных клиентах.
- Краткая документация классов, связанных с секретными чатами.

`02.11.2016` Небольшие исправления, улучшения документации и добавления:

- Исправлен `NullPointerException` при вызове `toString` у классов `TdApi`.
- Исправлено падение при приходе сообщения с клавиатурой.
- В TdApi.java добавлена Javadoc документация.
- Для упрощения поддержки `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`-запросов: метод `GetCallbackQueryAnswer`
- Добавлена поддержка черновиков: в классе `Chat` добавлено поле `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` для получения информации об одном из участников чата и его статусе в чате.
- В классe `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`.
- К webPage могут быть опционально прикреплены `Animation`, `Document` или `Sticker`.
- В классе `UpdateDeleteMessages` поле `messages` переименовано в `messageIds`.
- В апдейте `UpdateFileProgress` отрицательное значение поля `ready` означает, что загрузка была прервана из-за ошибки.
- У видео вернулось поле `mimeType`.
- Добавлен класс `ChatParticipants`.
- Идентификатор фотографии больше никогда не равен -1.
- Добавлен класс `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`.
- GeoPoint переименован в `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-документация.
