Лог изменений

Предупреждение

Эта страница сохранена только в исторических целях. За дальнейшим развитием TDLib можно следить на GitHub.

На этой странице собраны основные изменения в дистрибутиве tdlib.zip с момента его первого выкладывания в публичный доступ и до переезда проекта на GitHub.

8 марта 2016

  • Исправлено падение в методе GetChatHistory.

5 марта 2016

GetChatHistory

  • Усовершенствован метод GetChatHistory. Он теперь поддерживает получение истории сообщений, начиная с произвольного известного клиенту сообщения, если при этом результат запроса заведомо окажется рядом с известным сообщением. В частности, заведомо корректными являются запросы с -limit <= offset <= 0, если клиенту известно сообщение с идентификатором fromId. Также можно получить историю сообщений, передав в fromId идентификатор неизвестного клиенту сообщения, если окрестности этого сообщения заведомо будут присутствовать в результате запроса. В частности, это так, если -limit < offset < 0.
  • Теперь метод GetChatHistory должен всегда возвращать правильный результат или ошибку.

2 марта 2016

  • Появился поиск по префиксу среди пользователей-контактов (метод SearchContacts).
  • Добавлен метод GetRecentInlineBots, позволяющий получить последних использованных inline-ботов.
  • Появилась возможность искать по префиксу названия чаты в списке локально известных чатов пользователя (метод SearchChats).
  • Поддержана работа со списком недавно найденных через поиск чатов. Можно получать этот список, передав в SearchChats пустой запрос, добавлять новые элементы в этот список, используя метод AddRecentlyFoundChat, и очищать список полностью, используя метод DeleteRecentlyFoundChats. На данный момент, поиск по префиксу чувствителен к регистру всех символов, кроме латиницы.

29 февраля 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 февраля 2016

Аудио

  • Поддержана работа с визуальным представлением голосовых сообщений: в классах Voice и InputMessageVoice добавлено поле waveform.
  • Появился статус прослушанности голосовых и аудио сообщений: в классах MessageAudio и MessageVoice добавлено поле isListened, обновляемое через UpdateMessageContent.
  • Добавлен метод OpenMessageContent, который нужно вызывать при открытии медиа-контента сообщения. В частности, его нужно вызывать при прослушивании аудио и голосовых сообщений.

Анимации

Поддержана работа с сохранёнными анимациями.

  • Добавлены методы GetSavedAnimations, AddSavedAnimation и DeleteSavedAnimation, а также апдейт UpdateSavedAnimations.

Прочее

  • В классе Channel добавлено поле anyoneCanInvite, позволяющее разрешить всем участникам супергруппы приглашать новых участников, и которое можно изменять запросом ToggleChannelInvites.
  • В классе Video добавлено поле fileName.
  • При отправке видео появилаcь возможность указывать его ширину и высоту. В классах Animation, Audio, Video, Voice изменён порядок некоторых полей.

12 февраля 2016

  • Исправлено периодически воспроизводившееся падение при старте приложения.
  • Добавлен метод TG.setFileLogEnabled, позволяющий включить/выключить логирование в файл в дополнение к логированию в Android Log (по умолчанию логирование в файл выключено, раньше было всегда включено).
  • Добавлен метод TG.setLogVerbosity, позволяющий изменять количество данных, выводимых библиотекой в лог.
  • Добавлен метод TG.setUseTestDc, позволяющий использовать тестовое окружение Telegram. Тестовое окружение полностью независимо от Production окружения, которое используется обычно, никакие данные из Production окружения в нём недоступны. Тестовое окружение может быть полезно использовать, если нет второй симки и не хочется тестировать на основном аккаунте, или для тестировании перевода группы в супергруппу, потому что на нём установлено меньшее ограничение на размер группы, которую можно перевести в супергруппу.
  • Добавлены методы ExportChatInviteLink, CheckChatInviteLink, ImportChatInviteLink и классы ChatInviteLink, ChatInviteLinkInfo, позволяющие приглашать в чат пользователей по ссылке.
  • Появилась возможность массового приглашения пользователей в канал через метод AddChatParticipants.
  • Поле Message.isOutgoing заменено на поле sendState типа MessageSendState. Теперь никогда не нужно (и очень скоро будет нельзя) смотреть на значение идентификатора сообщения и на его дату, чтобы определить, что оно ещё только отправляется или что отправить сообщение не удалось.

3 февраля 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 августа 2015

  • В классе Messages добавлено поле totalCount, в котором в результате запроса SearchMessages возвращается общее количество результатов.
  • В InputMessageContact добавлено опциональное поле userId.
  • Запросы ChangeChatTitle, ChangeChatPhoto, AddChatParticipant и DeleteChatParticipant теперь синхронные и возвращают Ok только в случае успешного завершения выполнения запроса на сервере.
  • Отключено всё некритичное логирование.

15 августа 2015

  • Исправлено падение в CancelDownloadFile.
  • В классах Sticker и StickerSet добавилось поле rating, зависящее от частоты использования, которое можно использовать для сортировки стикеров. Для удобства тестирования, рейтинг пока не сохраняется между перезапусками.
  • Добавлен поиск сообщений/медиа.

11 августа 2015

  • В классе Audio добавилось поле albumCoverThumb с тумбой обложки альбома. Полноразмерную обложку нужно пытаться вытаскивать из скачанного mp3-файла.
  • Добавлены методы SearchUser для поиска пользователя по username и ChangeUsername для изменения username залогиненного пользователя.

9 августа 2015

  • Исправлены падения в некоторых ситуациях в GetStickers и GetStickerSets.
  • Поддержана работа с пользовательскими профильными фотографиями и фотографиями чатов: добавлен апдейт UpdateChatPhoto, методы SetProfilePhoto, DeleteProfilePhoto, ChangeChatPhoto.
  • Добавлен метод ChangeName для изменения имени залогиненного пользователя. Поддержана работа с контактами: методы ImportContacts и DeleteContacts.

2 августа 2015

  • Исправлен баг с полем replyMarkup класса Message, которое было всегда null.
  • Добавлена поддержка deep linking для ботов — метод SendBotStartMessage.
  • audio переименовано везде в voice.
  • Добавлен новый тип сообщений messageAudio — аудиозаписи обычно в формате mp3 с указанием названия и исполнителя. Также добавлены сопутствующие классы Audio и InputMessageAudio.
  • Улучшена поддержка стикеров при отправке. Появилась поддержка наборов стикеров. В классе Sticker появилось поле set_id — идентификатор сета, которому принадлежит стикер.
  • Добавлены классы StickerSet, StickerSetInfo, StickerSets, методы GetStickerSets, GetStickerSet, SearchStickerSet, UpdateStickerSet

25 июля 2015

  • Добавлено поле type в класс User, по которому можно отличать обычных пользователей от удалённых пользователей и от ботов.
  • Добавлена поддержка ботов (всё кроме deep linking).
  • В UserFull и ChatParticipant добавлена информация о поддерживаемых ботом командах.
  • В сообщениях от ботов добавилась информация о способе ответа на это сообщение в виде ReplyMarkup.
  • Изменилось описание различных видов ReplyMarkup.
  • В чате можно узнать идентификатор последнего сообщения с ReplyMarkup, который нужно отображать при заходе в чат. Этот идентификатор изменяется апдейтом updateChatReplyMarkup.
  • Для скрытия клавиатуры после использования добавлен метод deleteChatReplyMarkup.
  • Вместо UpdateUserName, UpdateUserPhoneNumber, UpdateUserProfilePhoto, UpdateUserLinks приходит один апдейт UpdateUser.
  • Из UserFull удалены realFirstName и realLastName, которые больше не присылаются сервером.

20 июля 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 мая 2015

  • Полностью переписана работа с файлами. Теперь информация о них сохраняется между перезапусками библиотеки.
  • Добавился метод CancelDownloadFile. -UpdateFile приходит после каждого вызова DownloadFile.

6 мая 2015

  • Убраны неиспользуемые состояние авторизации AuthStateWaitSendSms и метод AuthSendSms.
  • Добавлено новое состояние авторизации AuthStateLoggingOut.
  • В метод AuthReset добавлено опциональное поле boolean force.
  • В классах Audio, Document и Video убраны поля userId и date.
  • В классе Document поле fileName ициализируется, если имя файла было указано отправляющим клиентом.
  • Добавлены методы GetOption и SetOption.
  • Список доступных опций и их описание можно посмотреть на специальной странице. Особенно полезны могут быть опции connection_state, my_id и network_unreachable.

22 апреля 2015

  • Добавлена версия библиотеки под x86.
  • Добавлена поддержка стикеров, настроек оповещения, возможность удаления всей истории сообщений для конкретного чата.
  • CreateGroupChat теперь возвращает Chat.

15 апреля 2015

Существенно обновлено API:

  • Изменены названия некоторых сущностей:
    • chat—>groupChat
    • dialog—>chat
    • phone—>phone_number
  • Названия всех java-классов теперь пишутся в UpperCamelCase, а полей и параметров функций в lowerCamelCase.

10 апреля 2015

  • Исправлен баг в getDialogHistory с отрицательным offset.

5 апреля 2015

  • Первый запрос getContacts теперь выполняется синхронно, возвращаемый результат всегда полон.

3 апреля 2015