diff --git a/harbour-fernschreiber.desktop b/harbour-fernschreiber.desktop
index b7d9200..fb8a137 100644
--- a/harbour-fernschreiber.desktop
+++ b/harbour-fernschreiber.desktop
@@ -1,6 +1,6 @@
[Desktop Entry]
Type=Application
-X-Nemo-Application-Type=generic
+X-Nemo-Application-Type=silica-qt5
Icon=harbour-fernschreiber
Exec=harbour-fernschreiber
Name=Fernschreiber
@@ -8,4 +8,4 @@ Name=Fernschreiber
[X-Sailjail]
Permissions=Audio;Documents;Downloads;Internet;Location;MediaIndexing;Microphone;Music;Pictures;PublicDir;RemovableMedia;UserDirs;Videos
OrganizationName=de.ygriega
-ApplicationName=fernschreiber
+ApplicationName=de.ygriega.fernschreiber
diff --git a/qml/components/MessageListViewItem.qml b/qml/components/MessageListViewItem.qml
index 7ff49e9..d62808e 100644
--- a/qml/components/MessageListViewItem.qml
+++ b/qml/components/MessageListViewItem.qml
@@ -64,6 +64,7 @@ ListItem {
readonly property bool showForwardMessageMenuItem: (baseContextMenuItemCount + 2) <= maxContextMenuItemCount
// And don't count "More Options..." for "Delete Message" if "Delete Message" is the only extra option
readonly property bool haveSpaceForDeleteMessageMenuItem: (baseContextMenuItemCount + 3 - (deleteMessageIsOnlyExtraOption ? 1 : 0)) <= maxContextMenuItemCount
+ property var chatReactions
property var messageReactions
highlighted: (down || isSelected || additionalOptionsOpened) && !menuOpen
@@ -94,15 +95,21 @@ ListItem {
}
}
- function getInteractionText(viewCount, reactions) {
+ function getInteractionText(viewCount, reactions, size, highlightColor) {
var interactionText = "";
if (viewCount > 0) {
- interactionText = Emoji.emojify("👁️", Theme.fontSizeTiny) + Functions.getShortenedCount(viewCount);
+ interactionText = Emoji.emojify("👁️ ", size) + Functions.getShortenedCount(viewCount);
}
for (var i = 0; i < reactions.length; i++) {
- interactionText += ( " " + Emoji.emojify(reactions[i].reaction, Theme.fontSizeTiny) );
- if (!chatPage.isPrivateChat) {
- interactionText += ( " " + Functions.getShortenedCount(reactions[i].total_count) );
+ var reaction = reactions[i]
+ var reactionText = reaction.reaction ? reaction.reaction : (reaction.type && reaction.type.emoji) ? reaction.type.emoji : ""
+ if (reactionText) {
+ interactionText += ( " " + Emoji.emojify(reactionText, size) );
+ if (!chatPage.isPrivateChat) {
+ var count = Functions.getShortenedCount(reaction.total_count)
+ interactionText += " "
+ interactionText += (reaction.is_chosen ? ( "" + count + "" ) : count)
+ }
}
}
return interactionText;
@@ -125,6 +132,8 @@ ListItem {
if (messageListItem.messageReactions) {
messageListItem.messageReactions = null;
+ } else if (messageListItem.chatReactions) {
+ messageListItem.messageReactions = chatReactions
} else {
tdLibWrapper.getMessageAvailableReactions(messageListItem.chatId, messageListItem.messageId);
}
@@ -467,11 +476,12 @@ ListItem {
width: parent.width
Component.onCompleted: {
- if (myMessage.forward_info.origin["@type"] === "messageForwardOriginChannel") {
+ var originType = myMessage.forward_info.origin["@type"]
+ if (originType === "messageOriginChannel" || originType === "messageForwardOriginChannel") {
var otherChatInformation = tdLibWrapper.getChat(myMessage.forward_info.origin.chat_id);
forwardedThumbnail.photoData = (typeof otherChatInformation.photo !== "undefined") ? otherChatInformation.photo.small : {};
forwardedChannelText.text = Emoji.emojify(otherChatInformation.title, Theme.fontSizeExtraSmall);
- } else if (myMessage.forward_info.origin["@type"] === "messageForwardOriginUser") {
+ } else if (originType === "messageOriginUser" || originType === "messageForwardOriginUser") {
var otherUserInformation = tdLibWrapper.getUserInformation(myMessage.forward_info.origin.sender_user_id);
forwardedThumbnail.photoData = (typeof otherUserInformation.profile_photo !== "undefined") ? otherUserInformation.profile_photo.small : {};
forwardedChannelText.text = Emoji.emojify(Functions.getUserName(otherUserInformation), Theme.fontSizeExtraSmall);
@@ -625,7 +635,7 @@ ListItem {
height: ( ( chatPage.isChannel && messageViewCount > 0 ) || reactions.length > 0 ) ? ( Theme.fontSizeExtraSmall + Theme.paddingSmall ) : 0
sourceComponent: Component {
Label {
- text: getInteractionText(messageViewCount, reactions)
+ text: getInteractionText(messageViewCount, reactions, font.pixelSize, Theme.highlightColor)
width: parent.width
font.pixelSize: Theme.fontSizeTiny
color: messageListItem.isOwnMessage ? Theme.secondaryHighlightColor : Theme.secondaryColor
diff --git a/qml/components/MessageOverlayFlickable.qml b/qml/components/MessageOverlayFlickable.qml
index 274a284..b5d8915 100644
--- a/qml/components/MessageOverlayFlickable.qml
+++ b/qml/components/MessageOverlayFlickable.qml
@@ -40,9 +40,11 @@ Flickable {
function getOriginalAuthor(forwardInformation, fontSize) {
switch (forwardInformation.origin["@type"]) {
+ case "messageOriginChannel":
case "messageForwardOriginChannel":
var otherChatInformation = tdLibWrapper.getChat(forwardInformation.origin.chat_id);
return Emoji.emojify(otherChatInformation.title, fontSize);
+ case "messageOriginUser":
case "messageForwardOriginUser":
var otherUserInformation = tdLibWrapper.getUserInformation(forwardInformation.origin.sender_id.user_id);
return Emoji.emojify(Functions.getUserName(otherUserInformation), fontSize);
diff --git a/qml/components/PhotoTextsListItem.qml b/qml/components/PhotoTextsListItem.qml
index 5234437..57a1416 100644
--- a/qml/components/PhotoTextsListItem.qml
+++ b/qml/components/PhotoTextsListItem.qml
@@ -151,6 +151,9 @@ ListItem {
truncationMode: TruncationMode.Fade
anchors.verticalCenter: parent.verticalCenter
width: Math.min(contentColumn.width - (verifiedImage.visible ? (verifiedImage.width + primaryTextRow.spacing) : 0) - (mutedImage.visible ? (mutedImage.width + primaryTextRow.spacing) : 0), implicitWidth)
+ font.bold: appSettings.highlightUnreadConversations && ( !chatListViewItem.isMuted && (chatListViewItem.unreadCount > 0 || chatListViewItem.isMarkedAsUnread) )
+ font.italic: appSettings.highlightUnreadConversations && (chatListViewItem.unreadReactionCount > 0)
+ color: (appSettings.highlightUnreadConversations && (chatListViewItem.unreadCount > 0)) ? Theme.highlightColor : Theme.primaryColor
}
Image {
diff --git a/qml/components/chatInformationPage/ChatInformationTabItemMembersGroups.qml b/qml/components/chatInformationPage/ChatInformationTabItemMembersGroups.qml
index b4280b5..2b12c6f 100644
--- a/qml/components/chatInformationPage/ChatInformationTabItemMembersGroups.qml
+++ b/qml/components/chatInformationPage/ChatInformationTabItemMembersGroups.qml
@@ -79,7 +79,7 @@ ChatInformationTabItemBase {
// chat title
primaryText.text: Emoji.emojify(Functions.getUserName(user), primaryText.font.pixelSize)
// last user
- prologSecondaryText.text: "@"+(user.username !== "" ? user.username : member_id.user_id) + (member_id.user_id === chatInformationPage.myUserId ? " " + qsTr("You") : "")
+ prologSecondaryText.text: "@"+(user.username ? user.username : member_id.user_id) + (member_id.user_id === chatInformationPage.myUserId ? " " + qsTr("You") : "")
secondaryText {
horizontalAlignment: Text.AlignRight
property string statusText: Functions.getChatMemberStatusText(model.status["@type"])
@@ -180,6 +180,9 @@ ChatInformationTabItemBase {
for(var memberIndex in members) {
var memberData = members[memberIndex];
var userInfo = tdLibWrapper.getUserInformation(memberData.member_id.user_id) || {user:{}, bot_info:{}};
+ if (!userInfo.username && userInfo.usernames && userInfo.usernames.active_usernames) {
+ userInfo.username = userInfo.usernames.active_usernames[0]
+ }
memberData.user = userInfo;
memberData.bot_info = memberData.bot_info || {};
pageContent.membersList.append(memberData);
diff --git a/qml/components/settingsPage/SettingsBehavior.qml b/qml/components/settingsPage/SettingsBehavior.qml
index f0b2ea2..18b487e 100644
--- a/qml/components/settingsPage/SettingsBehavior.qml
+++ b/qml/components/settingsPage/SettingsBehavior.qml
@@ -70,6 +70,17 @@ AccordionItem {
}
}
+ TextSwitch {
+ width: parent.columnWidth
+ checked: appSettings.highlightUnreadConversations
+ text: qsTr("Highlight unread messages")
+ description: qsTr("Highlight Conversations with unread messages")
+ automaticCheck: false
+ onClicked: {
+ appSettings.highlightUnreadConversations = !checked
+ }
+ }
+
TextSwitch {
width: parent.columnWidth
checked: appSettings.useOpenWith
@@ -81,6 +92,17 @@ AccordionItem {
}
}
+ TextSwitch {
+ width: parent.columnWidth
+ checked: appSettings.notificationAlwaysShowPreview
+ text: qsTr("Always append message preview to notifications")
+ description: qsTr("In addition to showing the number of unread messages, the latest message will also be appended to notifications.")
+ automaticCheck: false
+ onClicked: {
+ appSettings.notificationAlwaysShowPreview = !checked
+ }
+ }
+
ComboBox {
id: feedbackComboBox
width: parent.columnWidth
@@ -135,35 +157,53 @@ AccordionItem {
}
}
- TextSwitch {
- width: parent.columnWidth
- checked: appSettings.notificationTurnsDisplayOn && enabled
- text: qsTr("Notification turns on the display")
- enabled: appSettings.notificationFeedback !== AppSettings.NotificationFeedbackNone
- height: enabled ? implicitHeight: 0
- clip: height < implicitHeight
- visible: height > 0
- automaticCheck: false
- onClicked: {
- appSettings.notificationTurnsDisplayOn = !checked
- }
- Behavior on height { SmoothedAnimation { duration: 200 } }
+ Item {
+ // Occupies one grid cell so that the column ends up under the combo box
+ // in the landscape layout
+ visible: parent.columns === 2
+ width: 1
+ height: 1
}
- TextSwitch {
- width: parent.columnWidth
- checked: appSettings.notificationSoundsEnabled && enabled
- text: qsTr("Enable notification sounds")
- description: qsTr("When sounds are enabled, Fernschreiber will use the current Sailfish OS notification sound for chats, which can be configured in the system settings.")
+ Column {
enabled: appSettings.notificationFeedback !== AppSettings.NotificationFeedbackNone
+ width: parent.columnWidth
height: enabled ? implicitHeight: 0
clip: height < implicitHeight
visible: height > 0
- automaticCheck: false
- onClicked: {
- appSettings.notificationSoundsEnabled = !checked
- }
+
Behavior on height { SmoothedAnimation { duration: 200 } }
+
+ TextSwitch {
+ checked: appSettings.notificationSuppressContent && enabled
+ text: qsTr("Hide content in notifications")
+ enabled: parent.enabled
+ automaticCheck: false
+ onClicked: {
+ appSettings.notificationSuppressContent = !checked
+ }
+ }
+
+ TextSwitch {
+ checked: appSettings.notificationTurnsDisplayOn && enabled
+ text: qsTr("Notification turns on the display")
+ enabled: parent.enabled
+ automaticCheck: false
+ onClicked: {
+ appSettings.notificationTurnsDisplayOn = !checked
+ }
+ }
+
+ TextSwitch {
+ checked: appSettings.notificationSoundsEnabled && enabled
+ text: qsTr("Enable notification sounds")
+ description: qsTr("When sounds are enabled, Fernschreiber will use the current Sailfish OS notification sound for chats, which can be configured in the system settings.")
+ enabled: parent.enabled
+ automaticCheck: false
+ onClicked: {
+ appSettings.notificationSoundsEnabled = !checked
+ }
+ }
}
}
}
diff --git a/qml/components/settingsPage/SettingsSession.qml b/qml/components/settingsPage/SettingsSession.qml
index 038c774..9f5a9b6 100644
--- a/qml/components/settingsPage/SettingsSession.qml
+++ b/qml/components/settingsPage/SettingsSession.qml
@@ -141,18 +141,6 @@ AccordionItem {
}
}
- Label {
- width: parent.width
- text: qsTr("IP address: %1, origin: %2").arg(modelData.ip).arg(modelData.country)
- font.pixelSize: Theme.fontSizeExtraSmall
- color: Theme.secondaryColor
- maximumLineCount: 1
- truncationMode: TruncationMode.Fade
- anchors {
- horizontalCenter: parent.horizontalCenter
- }
- }
-
Label {
width: parent.width
text: qsTr("Active since: %1, last online: %2").arg(Functions.getDateTimeTimepoint(modelData.log_in_date)).arg(Functions.getDateTimeElapsed(modelData.last_active_date))
diff --git a/qml/components/settingsPage/SettingsUserProfile.qml b/qml/components/settingsPage/SettingsUserProfile.qml
index f4fad97..169c2a6 100644
--- a/qml/components/settingsPage/SettingsUserProfile.qml
+++ b/qml/components/settingsPage/SettingsUserProfile.qml
@@ -143,7 +143,7 @@ AccordionItem {
visible: true
canEdit: true
headerText: qsTr("Username", "user name of the logged-in profile - header")
- text: userInformation.username
+ text: userInformation.usernames.editable_username
width: parent.columnWidth
headerLeftAligned: true
diff --git a/qml/pages/ChatPage.qml b/qml/pages/ChatPage.qml
index 7d60d2d..9e9c231 100644
--- a/qml/pages/ChatPage.qml
+++ b/qml/pages/ChatPage.qml
@@ -63,9 +63,10 @@ Page {
)
property var selectedMessages: []
readonly property bool isSelecting: selectedMessages.length > 0
- readonly property bool canSendMessages: hasSendPrivilege("can_send_messages")
+ readonly property bool canSendMessages: hasSendPrivilege("can_send_basic_messages")
property bool doSendBotStartMessage
property string sendBotStartMessageParameter
+ property var availableReactions
states: [
State {
@@ -184,7 +185,7 @@ Page {
}
tdLibWrapper.getChatPinnedMessage(chatInformation.id);
tdLibWrapper.toggleChatIsMarkedAsUnread(chatInformation.id, false);
-
+ availableReactions = tdLibWrapper.getChatReactions(chatInformation.id);
}
function getMessageStatusText(message, listItemIndex, lastReadSentIndex, useElapsed) {
@@ -439,7 +440,8 @@ Page {
Component.onDestruction: {
if (chatPage.canSendMessages && !chatPage.isDeletedUser) {
- tdLibWrapper.setChatDraftMessage(chatInformation.id, 0, newMessageColumn.replyToMessageId, newMessageTextField.text);
+ tdLibWrapper.setChatDraftMessage(chatInformation.id, 0, newMessageColumn.replyToMessageId, newMessageTextField.text,
+ newMessageInReplyToRow.inReplyToMessage ? newMessageInReplyToRow.inReplyToMessage.id : 0);
}
fernschreiberUtils.stopGeoLocationUpdates();
tdLibWrapper.closeChat(chatInformation.id);
@@ -562,12 +564,12 @@ Page {
}
}
onUserFullInfoReceived: {
- if(userFullInfo["@extra"] === chatPartnerInformation.id.toString()) {
+ if ((isPrivateChat || isSecretChat) && userFullInfo["@extra"] === chatPartnerInformation.id.toString()) {
chatPage.botInformation = userFullInfo;
}
}
onUserFullInfoUpdated: {
- if(userId === chatPartnerInformation.id) {
+ if ((isPrivateChat || isSecretChat) && userId === chatPartnerInformation.id) {
chatPage.botInformation = userFullInfo;
}
}
@@ -1348,6 +1350,7 @@ Page {
messageId: model.message_id
messageViewCount: model.view_count
reactions: model.reactions
+ chatReactions: availableReactions
messageIndex: model.index
hasContentComponent: !!myMessage.content && chatView.delegateMessagesContent.indexOf(model.content_type) > -1
canReplyToMessage: chatPage.canSendMessages
@@ -1596,7 +1599,7 @@ Page {
IconButton {
id: attachImageIconButton
- visible: chatPage.hasSendPrivilege("can_send_media_messages")
+ visible: chatPage.hasSendPrivilege("can_send_photos")
icon.source: "image://theme/icon-m-image"
onClicked: {
var picker = pageStack.push("Sailfish.Pickers.ImagePickerPage", {
@@ -1612,7 +1615,7 @@ Page {
}
}
IconButton {
- visible: chatPage.hasSendPrivilege("can_send_media_messages")
+ visible: chatPage.hasSendPrivilege("can_send_videos")
icon.source: "image://theme/icon-m-video"
onClicked: {
var picker = pageStack.push("Sailfish.Pickers.VideoPickerPage", {
@@ -1628,7 +1631,7 @@ Page {
}
}
IconButton {
- visible: chatPage.hasSendPrivilege("can_send_media_messages")
+ visible: chatPage.hasSendPrivilege("can_send_voice_notes")
icon.source: "image://theme/icon-m-mic"
icon.sourceSize {
width: Theme.iconSizeMedium
@@ -1641,7 +1644,7 @@ Page {
}
}
IconButton {
- visible: chatPage.hasSendPrivilege("can_send_media_messages")
+ visible: chatPage.hasSendPrivilege("can_send_documents")
icon.source: "image://theme/icon-m-document"
onClicked: {
var picker = pageStack.push("Sailfish.Pickers.FilePickerPage", {
diff --git a/rpm/harbour-fernschreiber.spec b/rpm/harbour-fernschreiber.spec
index be4d9fc..4bb0e4f 100644
--- a/rpm/harbour-fernschreiber.spec
+++ b/rpm/harbour-fernschreiber.spec
@@ -10,9 +10,9 @@ Name: harbour-fernschreiber
%define __requires_exclude ^lib(tdjson|ssl|crypto).*$
# << macros
-Summary: Fernschreiber is a Telegram client for Sailfish OS
+Summary: Fernschreiber is a Telegram client for Aurora OS
Version: 0.17
-Release: 3
+Release: 4
Group: Qt/Qt
License: LICENSE
URL: http://werkwolf.eu/
diff --git a/src/appsettings.cpp b/src/appsettings.cpp
index c5af969..caf64d5 100644
--- a/src/appsettings.cpp
+++ b/src/appsettings.cpp
@@ -29,7 +29,9 @@ namespace {
const QString KEY_ANIMATE_STICKERS("animateStickers");
const QString KEY_NOTIFICATION_TURNS_DISPLAY_ON("notificationTurnsDisplayOn");
const QString KEY_NOTIFICATION_SOUNDS_ENABLED("notificationSoundsEnabled");
+ const QString KEY_NOTIFICATION_SUPPRESS_ENABLED("notificationSuppressContent");
const QString KEY_NOTIFICATION_FEEDBACK("notificationFeedback");
+ const QString KEY_NOTIFICATION_ALWAYS_SHOW_PREVIEW("notificationAlwaysShowPreview");
const QString KEY_STORAGE_OPTIMIZER("useStorageOptimizer");
const QString KEY_INLINEBOT_LOCATION_ACCESS("allowInlineBotLocationAccess");
const QString KEY_REMAINING_INTERACTION_HINTS("remainingInteractionHints");
@@ -37,6 +39,7 @@ namespace {
const QString KEY_DELAY_MESSAGE_READ("delayMessageRead");
const QString KEY_FOCUS_TEXTAREA_ON_CHAT_OPEN("focusTextAreaOnChatOpen");
const QString KEY_SPONSORED_MESS("sponsoredMess");
+ const QString KEY_HIGHLIGHT_UNREADCONVS("highlightUnreadConversations");
}
AppSettings::AppSettings(QObject *parent) : QObject(parent), settings(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/de.ygriega/fernschreiber/settings.conf", QSettings::NativeFormat)
@@ -155,6 +158,20 @@ void AppSettings::setNotificationSoundsEnabled(bool enable)
}
}
+bool AppSettings::notificationSuppressContent() const
+{
+ return settings.value(KEY_NOTIFICATION_SUPPRESS_ENABLED, false).toBool();
+}
+
+void AppSettings::setNotificationSuppressContent(bool enable)
+{
+ if (notificationSuppressContent() != enable) {
+ LOG(KEY_NOTIFICATION_SUPPRESS_ENABLED << enable);
+ settings.setValue(KEY_NOTIFICATION_SUPPRESS_ENABLED, enable);
+ emit notificationSuppressContentChanged();
+ }
+}
+
AppSettings::NotificationFeedback AppSettings::notificationFeedback() const
{
return (NotificationFeedback) settings.value(KEY_NOTIFICATION_FEEDBACK, (int) NotificationFeedbackAll).toInt();
@@ -169,6 +186,20 @@ void AppSettings::setNotificationFeedback(NotificationFeedback feedback)
}
}
+bool AppSettings::notificationAlwaysShowPreview() const
+{
+ return settings.value(KEY_NOTIFICATION_ALWAYS_SHOW_PREVIEW, false).toBool();
+}
+
+void AppSettings::setNotificationAlwaysShowPreview(bool enable)
+{
+ if (notificationAlwaysShowPreview() != enable) {
+ LOG(KEY_NOTIFICATION_ALWAYS_SHOW_PREVIEW << enable);
+ settings.setValue(KEY_NOTIFICATION_ALWAYS_SHOW_PREVIEW, enable);
+ emit notificationAlwaysShowPreviewChanged();
+ }
+}
+
bool AppSettings::storageOptimizer() const
{
return settings.value(KEY_STORAGE_OPTIMIZER, true).toBool();
@@ -240,6 +271,20 @@ void AppSettings::setDelayMessageRead(bool enable)
}
}
+bool AppSettings::highlightUnreadConversations() const
+{
+ return settings.value(KEY_HIGHLIGHT_UNREADCONVS, true).toBool();
+}
+
+void AppSettings::setHighlightUnreadConversations(bool enable)
+{
+ if (highlightUnreadConversations() != enable) {
+ LOG(KEY_HIGHLIGHT_UNREADCONVS << enable);
+ settings.setValue(KEY_HIGHLIGHT_UNREADCONVS, enable);
+ emit highlightUnreadConversationsChanged();
+ }
+}
+
bool AppSettings::getFocusTextAreaOnChatOpen() const
{
return settings.value(KEY_FOCUS_TEXTAREA_ON_CHAT_OPEN, false).toBool();
diff --git a/src/appsettings.h b/src/appsettings.h
index fbd5709..e4a1a2d 100644
--- a/src/appsettings.h
+++ b/src/appsettings.h
@@ -32,7 +32,9 @@ class AppSettings : public QObject {
Q_PROPERTY(bool animateStickers READ animateStickers WRITE setAnimateStickers NOTIFY animateStickersChanged)
Q_PROPERTY(bool notificationTurnsDisplayOn READ notificationTurnsDisplayOn WRITE setNotificationTurnsDisplayOn NOTIFY notificationTurnsDisplayOnChanged)
Q_PROPERTY(bool notificationSoundsEnabled READ notificationSoundsEnabled WRITE setNotificationSoundsEnabled NOTIFY notificationSoundsEnabledChanged)
+ Q_PROPERTY(bool notificationSuppressContent READ notificationSuppressContent WRITE setNotificationSuppressContent NOTIFY notificationSuppressContentChanged)
Q_PROPERTY(NotificationFeedback notificationFeedback READ notificationFeedback WRITE setNotificationFeedback NOTIFY notificationFeedbackChanged)
+ Q_PROPERTY(bool notificationAlwaysShowPreview READ notificationAlwaysShowPreview WRITE setNotificationAlwaysShowPreview NOTIFY notificationAlwaysShowPreviewChanged)
Q_PROPERTY(bool storageOptimizer READ storageOptimizer WRITE setStorageOptimizer NOTIFY storageOptimizerChanged)
Q_PROPERTY(bool allowInlineBotLocationAccess READ allowInlineBotLocationAccess WRITE setAllowInlineBotLocationAccess NOTIFY allowInlineBotLocationAccessChanged)
Q_PROPERTY(int remainingInteractionHints READ remainingInteractionHints WRITE setRemainingInteractionHints NOTIFY remainingInteractionHintsChanged)
@@ -40,6 +42,7 @@ class AppSettings : public QObject {
Q_PROPERTY(bool delayMessageRead READ delayMessageRead WRITE setDelayMessageRead NOTIFY delayMessageReadChanged)
Q_PROPERTY(bool focusTextAreaOnChatOpen READ getFocusTextAreaOnChatOpen WRITE setFocusTextAreaOnChatOpen NOTIFY focusTextAreaOnChatOpenChanged)
Q_PROPERTY(SponsoredMess sponsoredMess READ getSponsoredMess WRITE setSponsoredMess NOTIFY sponsoredMessChanged)
+ Q_PROPERTY(bool highlightUnreadConversations READ highlightUnreadConversations WRITE setHighlightUnreadConversations NOTIFY highlightUnreadConversationsChanged)
public:
enum SponsoredMess {
@@ -83,9 +86,15 @@ public:
bool notificationSoundsEnabled() const;
void setNotificationSoundsEnabled(bool enable);
+ bool notificationSuppressContent() const;
+ void setNotificationSuppressContent(bool enable);
+
NotificationFeedback notificationFeedback() const;
void setNotificationFeedback(NotificationFeedback feedback);
+ bool notificationAlwaysShowPreview() const;
+ void setNotificationAlwaysShowPreview(bool enable);
+
bool storageOptimizer() const;
void setStorageOptimizer(bool enable);
@@ -107,6 +116,9 @@ public:
SponsoredMess getSponsoredMess() const;
void setSponsoredMess(SponsoredMess sponsoredMess);
+ bool highlightUnreadConversations() const;
+ void setHighlightUnreadConversations(bool enable);
+
signals:
void sendByEnterChanged();
void focusTextAreaAfterSendChanged();
@@ -116,7 +128,9 @@ signals:
void animateStickersChanged();
void notificationTurnsDisplayOnChanged();
void notificationSoundsEnabledChanged();
+ void notificationSuppressContentChanged();
void notificationFeedbackChanged();
+ void notificationAlwaysShowPreviewChanged();
void storageOptimizerChanged();
void allowInlineBotLocationAccessChanged();
void remainingInteractionHintsChanged();
@@ -124,6 +138,7 @@ signals:
void delayMessageReadChanged();
void focusTextAreaOnChatOpenChanged();
void sponsoredMessChanged();
+ void highlightUnreadConversationsChanged();
private:
QSettings settings;
diff --git a/src/contactsmodel.cpp b/src/contactsmodel.cpp
index fa24b24..2c59801 100644
--- a/src/contactsmodel.cpp
+++ b/src/contactsmodel.cpp
@@ -68,7 +68,7 @@ QVariant ContactsModel::data(const QModelIndex &index, int role) const
case ContactRole::RoleDisplay: return requestedContact;
case ContactRole::RoleTitle: return QString(requestedContact.value("first_name").toString() + " " + requestedContact.value("last_name").toString()).trimmed();
case ContactRole::RoleUserId: return requestedContact.value("id");
- case ContactRole::RoleUsername: return requestedContact.value("username");
+ case ContactRole::RoleUsername: return requestedContact.value("usernames").toMap().value("editable_username").toString();
case ContactRole::RolePhotoSmall: return requestedContact.value("profile_photo").toMap().value("small");
case ContactRole::RoleUserStatus: return requestedContact.value("status").toMap().value("@type");
case ContactRole::RoleUserLastOnline: return requestedContact.value("status").toMap().value("was_online");
diff --git a/src/notificationmanager.cpp b/src/notificationmanager.cpp
index f45f743..f4d6127 100644
--- a/src/notificationmanager.cpp
+++ b/src/notificationmanager.cpp
@@ -341,8 +341,18 @@ void NotificationManager::publishNotification(const NotificationGroup *notificat
QString notificationBody;
const QVariantMap senderInformation = messageMap.value(SENDER_ID).toMap();
- if (notificationGroup->totalCount == 1 && !messageMap.isEmpty()) {
+ bool outputMessageCount = notificationGroup->totalCount > 1;
+ bool messageIsEmpty = messageMap.isEmpty();
+ if (outputMessageCount || messageIsEmpty) {
+ // Either we have more than one notification or we have no content to display
+ LOG("Group" << notificationGroup->notificationGroupId << "has" << notificationGroup->totalCount << "notifications");
+ notificationBody = tr("%Ln unread messages", "", notificationGroup->totalCount);
+ }
+ if ((!outputMessageCount || appSettings->notificationAlwaysShowPreview()) && !messageIsEmpty) {
LOG("Group" << notificationGroup->notificationGroupId << "has 1 notification");
+ if (outputMessageCount) {
+ notificationBody += "; ";
+ }
if (chatInformation && (chatInformation->type == TDLibWrapper::ChatTypeBasicGroup ||
(chatInformation->type == TDLibWrapper::ChatTypeSupergroup && !chatInformation->isChannel))) {
// Add author
@@ -352,15 +362,9 @@ void NotificationManager::publishNotification(const NotificationGroup *notificat
} else {
fullName = FernschreiberUtils::getUserName(tdLibWrapper->getUserInformation(senderInformation.value(USER_ID).toString()));
}
-
- notificationBody = notificationBody + fullName.trimmed() + ": ";
+ notificationBody += fullName.trimmed() + ": ";
}
notificationBody += FernschreiberUtils::getMessageShortText(tdLibWrapper, messageMap.value(CONTENT).toMap(), (chatInformation ? chatInformation->isChannel : false), tdLibWrapper->getUserInformation().value(ID).toLongLong(), senderInformation );
- nemoNotification->setBody(notificationBody);
- } else {
- // Either we have more than one notification or we have no content to display
- LOG("Group" << notificationGroup->notificationGroupId << "has" << notificationGroup->totalCount << "notifications");
- notificationBody = tr("%Ln unread messages", "", notificationGroup->totalCount);
}
const QString summary(chatInformation ? chatInformation->title : QString());
@@ -377,7 +381,11 @@ void NotificationManager::publishNotification(const NotificationGroup *notificat
nemoNotification->setHintValue(HINT_VISIBILITY, QString());
nemoNotification->setUrgency(Notification::Low);
} else {
- nemoNotification->setPreviewBody(notificationBody);
+ if (!appSettings->notificationSuppressContent()) {
+ nemoNotification->setPreviewBody(notificationBody);
+ } else {
+ nemoNotification->setPreviewBody(tr("%Ln unread messages", "", notificationGroup->totalCount));
+ }
nemoNotification->setPreviewSummary(summary);
nemoNotification->setHintValue(HINT_SUPPRESS_SOUND, !appSettings->notificationSoundsEnabled());
nemoNotification->setHintValue(HINT_DISPLAY_ON, appSettings->notificationTurnsDisplayOn());
diff --git a/src/tdlibreceiver.cpp b/src/tdlibreceiver.cpp
index 985e7b7..11a46dc 100644
--- a/src/tdlibreceiver.cpp
+++ b/src/tdlibreceiver.cpp
@@ -60,6 +60,11 @@ namespace {
const QString CONTENT("content");
const QString NEW_CONTENT("new_content");
const QString SETS("sets");
+ const QString EMOJIS("emojis");
+ const QString REPLY_TO("reply_to");
+ const QString REPLY_IN_CHAT_ID("reply_in_chat_id");
+ const QString REPLY_TO_MESSAGE_ID("reply_to_message_id");
+ const QString DRAFT_MESSAGE("draft_message");
const QString _TYPE("@type");
const QString _EXTRA("@extra");
@@ -70,8 +75,11 @@ namespace {
const QString TYPE_MESSAGE("message");
const QString TYPE_STICKER("sticker");
const QString TYPE_MESSAGE_STICKER("messageSticker");
+ const QString TYPE_MESSAGE_REPLY_TO_MESSAGE("messageReplyToMessage");
const QString TYPE_MESSAGE_ANIMATED_EMOJI("messageAnimatedEmoji");
const QString TYPE_ANIMATED_EMOJI("animatedEmoji");
+ const QString TYPE_INPUT_MESSAGE_REPLY_TO_MESSAGE("inputMessageReplyToMessage");
+ const QString TYPE_DRAFT_MESSAGE("draftMessage");
}
static QString getChatPositionOrder(const QVariantMap &position)
@@ -119,7 +127,8 @@ TDLibReceiver::TDLibReceiver(void *tdLibClient, QObject *parent) : QThread(paren
handlers.insert("updateSupergroup", &TDLibReceiver::processUpdateSuperGroup);
handlers.insert("updateChatOnlineMemberCount", &TDLibReceiver::processChatOnlineMemberCountUpdated);
handlers.insert("messages", &TDLibReceiver::processMessages);
- handlers.insert("sponsoredMessage", &TDLibReceiver::processSponsoredMessage);
+ handlers.insert("sponsoredMessage", &TDLibReceiver::processSponsoredMessage); // TdLib <= 1.8.7
+ handlers.insert("sponsoredMessages", &TDLibReceiver::processSponsoredMessages); // TdLib >= 1.8.8
handlers.insert("updateNewMessage", &TDLibReceiver::processUpdateNewMessage);
handlers.insert("message", &TDLibReceiver::processMessage);
handlers.insert("messageLinkInfo", &TDLibReceiver::processMessageLinkInfo);
@@ -167,6 +176,7 @@ TDLibReceiver::TDLibReceiver(void *tdLibClient, QObject *parent) : QThread(paren
handlers.insert("availableReactions", &TDLibReceiver::processAvailableReactions);
handlers.insert("updateChatUnreadMentionCount", &TDLibReceiver::processUpdateChatUnreadMentionCount);
handlers.insert("updateChatUnreadReactionCount", &TDLibReceiver::processUpdateChatUnreadReactionCount);
+ handlers.insert("updateActiveEmojiReactions", &TDLibReceiver::processUpdateActiveEmojiReactions);
}
void TDLibReceiver::setActive(bool active)
@@ -382,11 +392,24 @@ void TDLibReceiver::processMessages(const QVariantMap &receivedInformation)
void TDLibReceiver::processSponsoredMessage(const QVariantMap &receivedInformation)
{
+ // TdLib <= 1.8.7
const qlonglong chatId = receivedInformation.value(_EXTRA).toLongLong(); // See TDLibWrapper::getChatSponsoredMessage
LOG("Received sponsored message for chat" << chatId);
emit sponsoredMessageReceived(chatId, receivedInformation);
}
+void TDLibReceiver::processSponsoredMessages(const QVariantMap &receivedInformation)
+{
+ // TdLib >= 1.8.8
+ const qlonglong chatId = receivedInformation.value(_EXTRA).toLongLong(); // See TDLibWrapper::getChatSponsoredMessage
+ const QVariantList messages(receivedInformation.value(MESSAGES).toList());
+ LOG("Received" << messages.count() << "sponsored messages for chat" << chatId);
+ QListIterator it(messages);
+ while (it.hasNext()) {
+ emit sponsoredMessageReceived(chatId, it.next().toMap());
+ }
+}
+
void TDLibReceiver::processUpdateNewMessage(const QVariantMap &receivedInformation)
{
const QVariantMap message = receivedInformation.value(MESSAGE).toMap();
@@ -400,7 +423,7 @@ void TDLibReceiver::processMessage(const QVariantMap &receivedInformation)
const qlonglong chatId = receivedInformation.value(CHAT_ID).toLongLong();
const qlonglong messageId = receivedInformation.value(ID).toLongLong();
LOG("Received message " << chatId << messageId);
- emit messageInformation(chatId, messageId, receivedInformation);
+ emit messageInformation(chatId, messageId, cleanupMap(receivedInformation));
}
void TDLibReceiver::processMessageLinkInfo(const QVariantMap &receivedInformation)
@@ -425,7 +448,7 @@ void TDLibReceiver::processMessageSendSucceeded(const QVariantMap &receivedInfor
const QVariantMap message = receivedInformation.value(MESSAGE).toMap();
const qlonglong messageId = message.value(ID).toLongLong();
LOG("Message send succeeded" << messageId << oldMessageId);
- emit messageSendSucceeded(messageId, oldMessageId, message);
+ emit messageSendSucceeded(messageId, oldMessageId, cleanupMap(message));
}
void TDLibReceiver::processUpdateActiveNotifications(const QVariantMap &receivedInformation)
@@ -652,7 +675,7 @@ void TDLibReceiver::processUpdateChatIsMarkedAsUnread(const QVariantMap &receive
void TDLibReceiver::processUpdateChatDraftMessage(const QVariantMap &receivedInformation)
{
LOG("Draft message was updated");
- emit chatDraftMessageUpdated(receivedInformation.value(CHAT_ID).toLongLong(), receivedInformation.value("draft_message").toMap(), findChatPositionOrder(receivedInformation.value(POSITIONS).toList()));
+ emit chatDraftMessageUpdated(receivedInformation.value(CHAT_ID).toLongLong(), cleanupMap(receivedInformation.value(DRAFT_MESSAGE).toMap()), findChatPositionOrder(receivedInformation.value(POSITIONS).toList()));
}
void TDLibReceiver::processInlineQueryResults(const QVariantMap &receivedInformation)
@@ -718,6 +741,13 @@ void TDLibReceiver::processUpdateChatUnreadReactionCount(const QVariantMap &rece
emit chatUnreadReactionCountUpdated(chatId, unreadReactionCount);
}
+void TDLibReceiver::processUpdateActiveEmojiReactions(const QVariantMap &receivedInformation)
+{
+ // updateActiveEmojiReactions was introduced between 1.8.5 and 1.8.6
+ // See https://github.com/tdlib/td/commit/d29d367
+ emit activeEmojiReactionsUpdated(receivedInformation.value(EMOJIS).toStringList());
+}
+
// Recursively removes (some) unused entries from QVariantMaps to reduce
// memory usage. QStrings allocated by QVariantMaps are the top consumers
// of memory. The biggest saving is achieved by removing "outline" from
@@ -747,17 +777,65 @@ const QVariantMap TDLibReceiver::cleanupMap(const QVariantMap& map, bool *update
return animated_emoji;
}
} else if (type == TYPE_MESSAGE) {
- bool cleaned = false;
- const QVariantMap content(cleanupMap(map.value(CONTENT).toMap(), &cleaned));
- if (cleaned) {
- QVariantMap message(map);
+ QVariantMap message(map);
+ bool messageChanged = false;
+ const QVariantMap content(cleanupMap(map.value(CONTENT).toMap(), &messageChanged));
+ if (messageChanged) {
message.remove(CONTENT);
message.insert(CONTENT, content);
+ }
+ if (map.contains(REPLY_TO)) {
+ // In TdLib 1.8.15 reply_to_message_id and reply_in_chat_id attributes
+ // had been replaced with reply_to structure, e.g:
+ //
+ // "reply_to": {
+ // "@type": "messageReplyToMessage",
+ // "chat_id": -1001234567890,
+ // "is_quote_manual": false,
+ // "message_id": 234567890,
+ // "origin_send_date": 0
+ // }
+ //
+ QVariantMap reply_to(message.value(REPLY_TO).toMap());
+ if (reply_to.value(_TYPE).toString() == TYPE_MESSAGE_REPLY_TO_MESSAGE) {
+ if (reply_to.contains(MESSAGE_ID) &&
+ !message.contains(REPLY_TO_MESSAGE_ID)) {
+ message.insert(REPLY_TO_MESSAGE_ID, reply_to.value(MESSAGE_ID));
+ }
+ if (reply_to.contains(CHAT_ID) &&
+ !message.contains(REPLY_IN_CHAT_ID)) {
+ message.insert(REPLY_IN_CHAT_ID, reply_to.value(CHAT_ID));
+ }
+ reply_to.remove(_TYPE);
+ reply_to.insert(_TYPE, TYPE_MESSAGE_REPLY_TO_MESSAGE);
+ message.insert(REPLY_TO, reply_to);
+ messageChanged = true;
+ }
+ }
+ if (messageChanged) {
message.remove(_TYPE);
message.insert(_TYPE, TYPE_MESSAGE); // Replace with a shared value
if (updated) *updated = true;
return message;
}
+ } else if (type == TYPE_DRAFT_MESSAGE) {
+ QVariantMap draftMessage(map);
+ QVariantMap reply_to(draftMessage.value(REPLY_TO).toMap());
+ // In TdLib 1.8.21 reply_to_message_id has been replaced with reply_to
+ if (reply_to.value(_TYPE).toString() == TYPE_INPUT_MESSAGE_REPLY_TO_MESSAGE) {
+ if (reply_to.contains(MESSAGE_ID) &&
+ !draftMessage.contains(REPLY_TO_MESSAGE_ID)) {
+ // reply_to_message_id is what QML (still) expects
+ draftMessage.insert(REPLY_TO_MESSAGE_ID, reply_to.value(MESSAGE_ID));
+ }
+ reply_to.remove(_TYPE);
+ reply_to.insert(_TYPE, TYPE_INPUT_MESSAGE_REPLY_TO_MESSAGE); // Shared value
+ draftMessage.insert(REPLY_TO, reply_to);
+ draftMessage.remove(_TYPE);
+ draftMessage.insert(_TYPE, DRAFT_MESSAGE); // Shared value
+ if (updated) *updated = true;
+ return draftMessage;
+ }
} else if (type == TYPE_MESSAGE_STICKER) {
bool cleaned = false;
const QVariantMap content(cleanupMap(map.value(CONTENT).toMap(), &cleaned));
diff --git a/src/tdlibreceiver.h b/src/tdlibreceiver.h
index b033d9d..a13ae04 100644
--- a/src/tdlibreceiver.h
+++ b/src/tdlibreceiver.h
@@ -105,6 +105,7 @@ signals:
void availableReactionsReceived(qlonglong messageId, const QStringList &reactions);
void chatUnreadMentionCountUpdated(qlonglong chatId, int unreadMentionCount);
void chatUnreadReactionCountUpdated(qlonglong chatId, int unreadReactionCount);
+ void activeEmojiReactionsUpdated(const QStringList& emojis);
private:
typedef void (TDLibReceiver::*Handler)(const QVariantMap &);
@@ -139,6 +140,7 @@ private:
void processChatOnlineMemberCountUpdated(const QVariantMap &receivedInformation);
void processMessages(const QVariantMap &receivedInformation);
void processSponsoredMessage(const QVariantMap &receivedInformation);
+ void processSponsoredMessages(const QVariantMap &receivedInformation);
void processUpdateNewMessage(const QVariantMap &receivedInformation);
void processMessage(const QVariantMap &receivedInformation);
void processMessageLinkInfo(const QVariantMap &receivedInformation);
@@ -186,6 +188,7 @@ private:
void processAvailableReactions(const QVariantMap &receivedInformation);
void processUpdateChatUnreadMentionCount(const QVariantMap &receivedInformation);
void processUpdateChatUnreadReactionCount(const QVariantMap &receivedInformation);
+ void processUpdateActiveEmojiReactions(const QVariantMap &receivedInformation);
};
#endif // TDLIBRECEIVER_H
diff --git a/src/tdlibwrapper.cpp b/src/tdlibwrapper.cpp
index 53be644..509e7cc 100644
--- a/src/tdlibwrapper.cpp
+++ b/src/tdlibwrapper.cpp
@@ -36,6 +36,9 @@
#define DEBUG_MODULE TDLibWrapper
#include "debuglog.h"
+#define VERSION_NUMBER(x,y,z) \
+ ((((x) & 0x3ff) << 20) | (((y) & 0x3ff) << 10) | ((z) & 0x3ff))
+
namespace {
const QString STATUS("status");
const QString ID("id");
@@ -48,23 +51,35 @@ namespace {
const QString THREAD_ID("thread_id");
const QString VALUE("value");
const QString CHAT_LIST_TYPE("chat_list_type");
+ const QString REPLY_TO_MESSAGE_ID("reply_to_message_id");
+ const QString REPLY_TO("reply_to");
const QString _TYPE("@type");
const QString _EXTRA("@extra");
const QString CHAT_LIST_MAIN("chatListMain");
+ const QString CHAT_AVAILABLE_REACTIONS("available_reactions");
+ const QString CHAT_AVAILABLE_REACTIONS_ALL("chatAvailableReactionsAll");
+ const QString CHAT_AVAILABLE_REACTIONS_SOME("chatAvailableReactionsSome");
+ const QString REACTIONS("reactions");
+ const QString REACTION_TYPE("reaction_type");
+ const QString REACTION_TYPE_EMOJI("reactionTypeEmoji");
+ const QString EMOJI("emoji");
+ const QString TYPE_MESSAGE_REPLY_TO_MESSAGE("messageReplyToMessage");
+ const QString TYPE_INPUT_MESSAGE_REPLY_TO_MESSAGE("inputMessageReplyToMessage");
}
-TDLibWrapper::TDLibWrapper(AppSettings *appSettings, MceInterface *mceInterface, QObject *parent)
+TDLibWrapper::TDLibWrapper(AppSettings *settings, MceInterface *mce, QObject *parent)
: QObject(parent)
+ , tdLibClient(td_json_client_create())
, manager(new QNetworkAccessManager(this))
, networkConfigurationManager(new QNetworkConfigurationManager(this))
+ , appSettings(settings)
+ , mceInterface(mce)
+ , authorizationState(AuthorizationState::Closed)
+ , versionNumber(0)
, joinChatRequested(false)
+ , isLoggingOut(false)
{
LOG("Initializing TD Lib...");
- this->appSettings = appSettings;
- this->mceInterface = mceInterface;
- this->tdLibClient = td_json_client_create();
- this->authorizationState = AuthorizationState::Closed;
- this->isLoggingOut = false;
initializeTDLibReceiver();
@@ -174,6 +189,7 @@ void TDLibWrapper::initializeTDLibReceiver() {
connect(this->tdLibReceiver, SIGNAL(availableReactionsReceived(qlonglong, QStringList)), this, SIGNAL(availableReactionsReceived(qlonglong, QStringList)));
connect(this->tdLibReceiver, SIGNAL(chatUnreadMentionCountUpdated(qlonglong, int)), this, SIGNAL(chatUnreadMentionCountUpdated(qlonglong, int)));
connect(this->tdLibReceiver, SIGNAL(chatUnreadReactionCountUpdated(qlonglong, int)), this, SIGNAL(chatUnreadReactionCountUpdated(qlonglong, int)));
+ connect(this->tdLibReceiver, SIGNAL(activeEmojiReactionsUpdated(QStringList)), this, SLOT(handleActiveEmojiReactionsUpdated(QStringList)));
this->tdLibReceiver->start();
}
@@ -192,7 +208,7 @@ void TDLibWrapper::sendRequest(const QVariantMap &requestObject)
QString TDLibWrapper::getVersion()
{
- return this->version;
+ return this->versionString;
}
TDLibWrapper::AuthorizationState TDLibWrapper::getAuthorizationState()
@@ -255,7 +271,7 @@ void TDLibWrapper::logout()
{
LOG("Logging out");
QVariantMap requestObject;
- requestObject.insert("@type", "logOut");
+ requestObject.insert(_TYPE, "logOut");
this->sendRequest(requestObject);
this->isLoggingOut = true;
@@ -389,15 +405,33 @@ static bool compareReplacements(const QVariant &replacement1, const QVariant &re
}
}
-void TDLibWrapper::sendTextMessage(const QString &chatId, const QString &message, const QString &replyToMessageId)
+QVariantMap TDLibWrapper::newSendMessageRequest(qlonglong chatId, qlonglong replyToMessageId)
+{
+ QVariantMap request;
+ request.insert(_TYPE, "sendMessage");
+ request.insert(CHAT_ID, chatId);
+ if (replyToMessageId) {
+ if (versionNumber > VERSION_NUMBER(1,8,14)) {
+ QVariantMap replyTo;
+ if (versionNumber > VERSION_NUMBER(1,8,20)) {
+ replyTo.insert(_TYPE, TYPE_INPUT_MESSAGE_REPLY_TO_MESSAGE);
+ } else {
+ replyTo.insert(_TYPE, TYPE_MESSAGE_REPLY_TO_MESSAGE);
+ }
+ replyTo.insert(CHAT_ID, chatId);
+ replyTo.insert(MESSAGE_ID, replyToMessageId);
+ request.insert(REPLY_TO, replyTo);
+ } else {
+ request.insert(REPLY_TO_MESSAGE_ID, replyToMessageId);
+ }
+ }
+ return request;
+}
+
+void TDLibWrapper::sendTextMessage(qlonglong chatId, const QString &message, qlonglong replyToMessageId)
{
LOG("Sending text message" << chatId << message << replyToMessageId);
- QVariantMap requestObject;
- requestObject.insert(_TYPE, "sendMessage");
- requestObject.insert(CHAT_ID, chatId);
- if (replyToMessageId != "0") {
- requestObject.insert("reply_to_message_id", replyToMessageId);
- }
+ QVariantMap requestObject(newSendMessageRequest(chatId, replyToMessageId));
QVariantMap inputMessageContent;
inputMessageContent.insert(_TYPE, "inputMessageText");
@@ -436,7 +470,7 @@ void TDLibWrapper::sendTextMessage(const QString &chatId, const QString &message
QVariantMap entityType;
entityType.insert(_TYPE, "textEntityTypeMentionName");
entityType.insert("user_id", nextReplacement.value("userId").toString());
- entity.insert("type", entityType);
+ entity.insert(TYPE, entityType);
entities.append(entity);
offsetCorrection += replacementLength - replacementPlainText.length();
}
@@ -450,17 +484,13 @@ void TDLibWrapper::sendTextMessage(const QString &chatId, const QString &message
this->sendRequest(requestObject);
}
-void TDLibWrapper::sendPhotoMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId)
+void TDLibWrapper::sendPhotoMessage(qlonglong chatId, const QString &filePath, const QString &message, qlonglong replyToMessageId)
{
LOG("Sending photo message" << chatId << filePath << message << replyToMessageId);
- QVariantMap requestObject;
- requestObject.insert(_TYPE, "sendMessage");
- requestObject.insert(CHAT_ID, chatId);
- if (replyToMessageId != "0") {
- requestObject.insert("reply_to_message_id", replyToMessageId);
- }
+ QVariantMap requestObject(newSendMessageRequest(chatId, replyToMessageId));
QVariantMap inputMessageContent;
inputMessageContent.insert(_TYPE, "inputMessagePhoto");
+
QVariantMap formattedText;
formattedText.insert("text", message);
formattedText.insert(_TYPE, "formattedText");
@@ -474,17 +504,13 @@ void TDLibWrapper::sendPhotoMessage(const QString &chatId, const QString &filePa
this->sendRequest(requestObject);
}
-void TDLibWrapper::sendVideoMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId)
+void TDLibWrapper::sendVideoMessage(qlonglong chatId, const QString &filePath, const QString &message, qlonglong replyToMessageId)
{
LOG("Sending video message" << chatId << filePath << message << replyToMessageId);
- QVariantMap requestObject;
- requestObject.insert(_TYPE, "sendMessage");
- requestObject.insert(CHAT_ID, chatId);
- if (replyToMessageId != "0") {
- requestObject.insert("reply_to_message_id", replyToMessageId);
- }
+ QVariantMap requestObject(newSendMessageRequest(chatId, replyToMessageId));
QVariantMap inputMessageContent;
inputMessageContent.insert(_TYPE, "inputMessageVideo");
+
QVariantMap formattedText;
formattedText.insert("text", message);
formattedText.insert(_TYPE, "formattedText");
@@ -498,17 +524,13 @@ void TDLibWrapper::sendVideoMessage(const QString &chatId, const QString &filePa
this->sendRequest(requestObject);
}
-void TDLibWrapper::sendDocumentMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId)
+void TDLibWrapper::sendDocumentMessage(qlonglong chatId, const QString &filePath, const QString &message, qlonglong replyToMessageId)
{
LOG("Sending document message" << chatId << filePath << message << replyToMessageId);
- QVariantMap requestObject;
- requestObject.insert(_TYPE, "sendMessage");
- requestObject.insert(CHAT_ID, chatId);
- if (replyToMessageId != "0") {
- requestObject.insert("reply_to_message_id", replyToMessageId);
- }
+ QVariantMap requestObject(newSendMessageRequest(chatId, replyToMessageId));
QVariantMap inputMessageContent;
inputMessageContent.insert(_TYPE, "inputMessageDocument");
+
QVariantMap formattedText;
formattedText.insert("text", message);
formattedText.insert(_TYPE, "formattedText");
@@ -522,17 +544,13 @@ void TDLibWrapper::sendDocumentMessage(const QString &chatId, const QString &fil
this->sendRequest(requestObject);
}
-void TDLibWrapper::sendVoiceNoteMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId)
+void TDLibWrapper::sendVoiceNoteMessage(qlonglong chatId, const QString &filePath, const QString &message, qlonglong replyToMessageId)
{
LOG("Sending voice note message" << chatId << filePath << message << replyToMessageId);
- QVariantMap requestObject;
- requestObject.insert(_TYPE, "sendMessage");
- requestObject.insert(CHAT_ID, chatId);
- if (replyToMessageId != "0") {
- requestObject.insert("reply_to_message_id", replyToMessageId);
- }
+ QVariantMap requestObject(newSendMessageRequest(chatId, replyToMessageId));
QVariantMap inputMessageContent;
inputMessageContent.insert(_TYPE, "inputMessageVoiceNote");
+
QVariantMap formattedText;
formattedText.insert("text", message);
formattedText.insert(_TYPE, "formattedText");
@@ -546,24 +564,19 @@ void TDLibWrapper::sendVoiceNoteMessage(const QString &chatId, const QString &fi
this->sendRequest(requestObject);
}
-void TDLibWrapper::sendLocationMessage(const QString &chatId, double latitude, double longitude, double horizontalAccuracy, const QString &replyToMessageId)
+void TDLibWrapper::sendLocationMessage(qlonglong chatId, double latitude, double longitude, double horizontalAccuracy, qlonglong replyToMessageId)
{
LOG("Sending location message" << chatId << latitude << longitude << horizontalAccuracy << replyToMessageId);
- QVariantMap requestObject;
- requestObject.insert(_TYPE, "sendMessage");
- requestObject.insert(CHAT_ID, chatId);
- if (replyToMessageId != "0") {
- requestObject.insert("reply_to_message_id", replyToMessageId);
- }
+ QVariantMap requestObject(newSendMessageRequest(chatId, replyToMessageId));
QVariantMap inputMessageContent;
inputMessageContent.insert(_TYPE, "inputMessageLocation");
+
QVariantMap location;
location.insert("latitude", latitude);
location.insert("longitude", longitude);
location.insert("horizontal_accuracy", horizontalAccuracy);
location.insert(_TYPE, "location");
inputMessageContent.insert("location", location);
-
inputMessageContent.insert("live_period", 0);
inputMessageContent.insert("heading", 0);
inputMessageContent.insert("proximity_alert_radius", 0);
@@ -572,21 +585,16 @@ void TDLibWrapper::sendLocationMessage(const QString &chatId, double latitude, d
this->sendRequest(requestObject);
}
-void TDLibWrapper::sendStickerMessage(const QString &chatId, const QString &fileId, const QString &replyToMessageId)
+void TDLibWrapper::sendStickerMessage(qlonglong chatId, const QString &fileId, qlonglong replyToMessageId)
{
LOG("Sending sticker message" << chatId << fileId << replyToMessageId);
- QVariantMap requestObject;
- requestObject.insert(_TYPE, "sendMessage");
- requestObject.insert(CHAT_ID, chatId);
- if (replyToMessageId != "0") {
- requestObject.insert("reply_to_message_id", replyToMessageId);
- }
+ QVariantMap requestObject(newSendMessageRequest(chatId, replyToMessageId));
QVariantMap inputMessageContent;
inputMessageContent.insert(_TYPE, "inputMessageSticker");
QVariantMap stickerInputFile;
stickerInputFile.insert(_TYPE, "inputFileRemote");
- stickerInputFile.insert("id", fileId);
+ stickerInputFile.insert(ID, fileId);
inputMessageContent.insert("sticker", stickerInputFile);
@@ -594,15 +602,10 @@ void TDLibWrapper::sendStickerMessage(const QString &chatId, const QString &file
this->sendRequest(requestObject);
}
-void TDLibWrapper::sendPollMessage(const QString &chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &explanation, const QString &replyToMessageId)
+void TDLibWrapper::sendPollMessage(qlonglong chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &explanation, qlonglong replyToMessageId)
{
LOG("Sending poll message" << chatId << question << replyToMessageId);
- QVariantMap requestObject;
- requestObject.insert(_TYPE, "sendMessage");
- requestObject.insert(CHAT_ID, chatId);
- if (replyToMessageId != "0") {
- requestObject.insert("reply_to_message_id", replyToMessageId);
- }
+ QVariantMap requestObject(newSendMessageRequest(chatId, replyToMessageId));
QVariantMap inputMessageContent;
inputMessageContent.insert(_TYPE, "inputMessagePoll");
@@ -620,7 +623,7 @@ void TDLibWrapper::sendPollMessage(const QString &chatId, const QString &questio
pollType.insert("allow_multiple_answers", multiple);
}
- inputMessageContent.insert("type", pollType);
+ inputMessageContent.insert(TYPE, pollType);
inputMessageContent.insert("question", question);
inputMessageContent.insert("options", options);
inputMessageContent.insert("is_anonymous", anonymous);
@@ -709,7 +712,11 @@ void TDLibWrapper::getChatSponsoredMessage(qlonglong chatId)
{
LOG("Retrieving sponsored message" << chatId);
QVariantMap requestObject;
- requestObject.insert(_TYPE, "getChatSponsoredMessage");
+ // getChatSponsoredMessage has been replaced with getChatSponsoredMessages
+ // between 1.8.7 and 1.8.8
+ // See https://github.com/tdlib/td/commit/ec1310a
+ requestObject.insert(_TYPE, QString((versionNumber > VERSION_NUMBER(1,8,7)) ?
+ "getChatSponsoredMessages" : "getChatSponsoredMessage"));
requestObject.insert(CHAT_ID, chatId);
requestObject.insert(_EXTRA, chatId); // see TDLibReceiver::processSponsoredMessage
this->sendRequest(requestObject);
@@ -1171,9 +1178,18 @@ void TDLibWrapper::setChatDraftMessage(qlonglong chatId, qlonglong threadId, qlo
inputMessageContent.insert(_TYPE, "inputMessageText");
inputMessageContent.insert("text", formattedText);
draftMessage.insert(_TYPE, "draftMessage");
- draftMessage.insert("reply_to_message_id", replyToMessageId);
draftMessage.insert("input_message_text", inputMessageContent);
+ if (versionNumber > VERSION_NUMBER(1,8,20)) {
+ QVariantMap replyTo;
+ replyTo.insert(_TYPE, TYPE_INPUT_MESSAGE_REPLY_TO_MESSAGE);
+ replyTo.insert(CHAT_ID, chatId);
+ replyTo.insert(MESSAGE_ID, replyToMessageId);
+ draftMessage.insert(REPLY_TO, replyTo);
+ } else {
+ draftMessage.insert(REPLY_TO_MESSAGE_ID, replyToMessageId);
+ }
+
requestObject.insert("draft_message", draftMessage);
this->sendRequest(requestObject);
}
@@ -1433,8 +1449,8 @@ void TDLibWrapper::getMessageAvailableReactions(qlonglong chatId, qlonglong mess
QVariantMap requestObject;
requestObject.insert(_TYPE, "getMessageAvailableReactions");
requestObject.insert(_EXTRA, QString::number(messageId));
- requestObject.insert("chat_id", chatId);
- requestObject.insert("message_id", messageId);
+ requestObject.insert(CHAT_ID, chatId);
+ requestObject.insert(MESSAGE_ID, messageId);
this->sendRequest(requestObject);
}
@@ -1457,11 +1473,23 @@ void TDLibWrapper::setMessageReaction(qlonglong chatId, qlonglong messageId, con
{
LOG("Set message reaction" << chatId << messageId << reaction);
QVariantMap requestObject;
- requestObject.insert(_TYPE, "setMessageReaction");
- requestObject.insert("chat_id", chatId);
- requestObject.insert("message_id", messageId);
- requestObject.insert("reaction", reaction);
+ requestObject.insert(CHAT_ID, chatId);
+ requestObject.insert(MESSAGE_ID, messageId);
requestObject.insert("is_big", false);
+ if (versionNumber > VERSION_NUMBER(1,8,5)) {
+ // "reaction_type": {
+ // "@type": "reactionTypeEmoji",
+ // "emoji": "..."
+ // }
+ QVariantMap reactionType;
+ reactionType.insert(_TYPE, REACTION_TYPE_EMOJI);
+ reactionType.insert(EMOJI, reaction);
+ requestObject.insert(REACTION_TYPE, reactionType);
+ requestObject.insert(_TYPE, "addMessageReaction");
+ } else {
+ requestObject.insert("reaction", reaction);
+ requestObject.insert(_TYPE, "setMessageReaction");
+ }
this->sendRequest(requestObject);
}
@@ -1494,7 +1522,7 @@ void TDLibWrapper::setNetworkType(NetworkType networkType)
break;
}
- requestObject.insert("type", networkTypeObject);
+ requestObject.insert(TYPE, networkTypeObject);
this->sendRequest(requestObject);
}
@@ -1575,6 +1603,43 @@ QVariantMap TDLibWrapper::getChat(const QString &chatId)
return this->chats.value(chatId).toMap();
}
+QStringList TDLibWrapper::getChatReactions(const QString &chatId)
+{
+ const QVariant available_reactions(chats.value(chatId).toMap().value(CHAT_AVAILABLE_REACTIONS));
+ const QVariantMap map(available_reactions.toMap());
+ const QString reactions_type(map.value(_TYPE).toString());
+ if (reactions_type == CHAT_AVAILABLE_REACTIONS_ALL) {
+ return activeEmojiReactions;
+ } else if (reactions_type == CHAT_AVAILABLE_REACTIONS_SOME) {
+ const QVariantList reactions(map.value(REACTIONS).toList());
+ const int n = reactions.count();
+ QStringList emojis;
+
+ // "available_reactions": {
+ // "@type": "chatAvailableReactionsSome",
+ // "reactions": [
+ // {
+ // "@type": "reactionTypeEmoji",
+ // "emoji": "..."
+ // },
+ emojis.reserve(n);
+ for (int i = 0; i < n; i++) {
+ const QVariantMap reaction(reactions.at(i).toMap());
+ if (reaction.value(_TYPE).toString() == REACTION_TYPE_EMOJI) {
+ const QString emoji(reaction.value(EMOJI).toString());
+ if (!emoji.isEmpty()) {
+ emojis.append(emoji);
+ }
+ }
+ }
+ return emojis;
+ } else if (reactions_type.isEmpty()) {
+ return available_reactions.toStringList();
+ } else {
+ return QStringList();
+ }
+}
+
QVariantMap TDLibWrapper::getSecretChatFromCache(qlonglong secretChatId)
{
return this->secretChats.value(secretChatId);
@@ -1645,7 +1710,16 @@ DBusAdaptor *TDLibWrapper::getDBusAdaptor()
void TDLibWrapper::handleVersionDetected(const QString &version)
{
- this->version = version;
+ this->versionString = version;
+ const QStringList parts(version.split('.'));
+ uint major, minor, release;
+ bool ok;
+ if (parts.count() >= 3 &&
+ (major = parts.at(0).toInt(&ok), ok) &&
+ (minor = parts.at(1).toInt(&ok), ok) &&
+ (release = parts.at(2).toInt(&ok), ok)) {
+ versionNumber = VERSION_NUMBER(major, minor, release);
+ }
emit versionDetected(version);
}
@@ -1758,7 +1832,7 @@ void TDLibWrapper::handleConnectionStateChanged(const QString &connectionState)
void TDLibWrapper::handleUserUpdated(const QVariantMap &userInformation)
{
- QString updatedUserId = userInformation.value("id").toString();
+ QString updatedUserId = userInformation.value(ID).toString();
if (updatedUserId == this->options.value("my_id").toString()) {
LOG("Own user information updated :)");
this->userInformation = userInformation;
@@ -1774,11 +1848,11 @@ void TDLibWrapper::handleUserStatusUpdated(const QString &userId, const QVariant
{
if (userId == this->options.value("my_id").toString()) {
LOG("Own user status information updated :)");
- this->userInformation.insert("status", userStatusInformation);
+ this->userInformation.insert(STATUS, userStatusInformation);
}
LOG("User status information updated:" << userId << userStatusInformation.value(_TYPE).toString());
QVariantMap updatedUserInformation = this->allUsers.value(userId).toMap();
- updatedUserInformation.insert("status", userStatusInformation);
+ updatedUserInformation.insert(STATUS, userStatusInformation);
this->allUsers.insert(userId, updatedUserInformation);
this->allUserNames.insert(userInformation.value(USERNAME).toString(), userInformation);
emit userUpdated(userId, updatedUserInformation);
@@ -1786,12 +1860,12 @@ void TDLibWrapper::handleUserStatusUpdated(const QString &userId, const QVariant
void TDLibWrapper::handleFileUpdated(const QVariantMap &fileInformation)
{
- emit fileUpdated(fileInformation.value("id").toInt(), fileInformation);
+ emit fileUpdated(fileInformation.value(ID).toInt(), fileInformation);
}
void TDLibWrapper::handleNewChatDiscovered(const QVariantMap &chatInformation)
{
- QString chatId = chatInformation.value("id").toString();
+ QString chatId = chatInformation.value(ID).toString();
this->chats.insert(chatId, chatInformation);
emit newChatDiscovered(chatId, chatInformation);
}
@@ -1856,7 +1930,7 @@ void TDLibWrapper::handleStickerSets(const QVariantList &stickerSets)
QListIterator stickerSetIterator(stickerSets);
while (stickerSetIterator.hasNext()) {
QVariantMap stickerSet = stickerSetIterator.next().toMap();
- this->getStickerSet(stickerSet.value("id").toString());
+ this->getStickerSet(stickerSet.value(ID).toString());
}
emit this->stickerSetsReceived(stickerSets);
}
@@ -1988,6 +2062,13 @@ void TDLibWrapper::handleSponsoredMessage(qlonglong chatId, const QVariantMap &m
}
}
+void TDLibWrapper::handleActiveEmojiReactionsUpdated(const QStringList& emojis)
+{
+ if (activeEmojiReactions != emojis) {
+ activeEmojiReactions = emojis;
+ LOG(emojis.count() << "reaction(s) available");
+ }
+}
void TDLibWrapper::handleNetworkConfigurationChanged(const QNetworkConfiguration &config)
{
@@ -2077,28 +2158,40 @@ void TDLibWrapper::handleGetPageSourceFinished()
}
}
+QVariantMap& TDLibWrapper::fillTdlibParameters(QVariantMap& parameters)
+{
+ parameters.insert("api_id", TDLIB_API_ID);
+ parameters.insert("api_hash", TDLIB_API_HASH);
+ parameters.insert("database_directory", QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/tdlib");
+ bool onlineOnlyMode = this->appSettings->onlineOnlyMode();
+ parameters.insert("use_file_database", !onlineOnlyMode);
+ parameters.insert("use_chat_info_database", !onlineOnlyMode);
+ parameters.insert("use_message_database", !onlineOnlyMode);
+ parameters.insert("use_secret_chats", true);
+ parameters.insert("system_language_code", QLocale::system().name());
+ QSettings hardwareSettings("/etc/hw-release", QSettings::NativeFormat);
+ parameters.insert("device_model", hardwareSettings.value("NAME", "Unknown Mobile Device").toString());
+ parameters.insert("system_version", QSysInfo::prettyProductName());
+ parameters.insert("application_version", "0.17");
+ parameters.insert("enable_storage_optimizer", appSettings->storageOptimizer());
+ // parameters.insert("use_test_dc", true);
+ return parameters;
+}
+
void TDLibWrapper::setInitialParameters()
{
LOG("Sending initial parameters to TD Lib");
QVariantMap requestObject;
requestObject.insert(_TYPE, "setTdlibParameters");
- QVariantMap initialParameters;
- initialParameters.insert("api_id", TDLIB_API_ID);
- initialParameters.insert("api_hash", TDLIB_API_HASH);
- initialParameters.insert("database_directory", QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/tdlib");
- bool onlineOnlyMode = this->appSettings->onlineOnlyMode();
- initialParameters.insert("use_file_database", !onlineOnlyMode);
- initialParameters.insert("use_chat_info_database", !onlineOnlyMode);
- initialParameters.insert("use_message_database", !onlineOnlyMode);
- initialParameters.insert("use_secret_chats", true);
- initialParameters.insert("system_language_code", QLocale::system().name());
- QSettings hardwareSettings("/etc/hw-release", QSettings::NativeFormat);
- initialParameters.insert("device_model", hardwareSettings.value("NAME", "Unknown Mobile Device").toString());
- initialParameters.insert("system_version", QSysInfo::prettyProductName());
- initialParameters.insert("application_version", "0.17");
- initialParameters.insert("enable_storage_optimizer", appSettings->storageOptimizer());
- // initialParameters.insert("use_test_dc", true);
- requestObject.insert("parameters", initialParameters);
+ // tdlibParameters were inlined between 1.8.5 and 1.8.6
+ // See https://github.com/tdlib/td/commit/f6a2ecd
+ if (versionNumber > VERSION_NUMBER(1,8,5)) {
+ fillTdlibParameters(requestObject);
+ } else {
+ QVariantMap initialParameters;
+ fillTdlibParameters(initialParameters);
+ requestObject.insert("parameters", initialParameters);
+ }
this->sendRequest(requestObject);
}
diff --git a/src/tdlibwrapper.h b/src/tdlibwrapper.h
index 1d1ec6d..33e29b4 100644
--- a/src/tdlibwrapper.h
+++ b/src/tdlibwrapper.h
@@ -148,6 +148,7 @@ public:
Q_INVOKABLE QVariantMap getSuperGroup(qlonglong groupId) const;
Q_INVOKABLE QVariantMap getChat(const QString &chatId);
Q_INVOKABLE QVariantMap getSecretChatFromCache(qlonglong secretChatId);
+ Q_INVOKABLE QStringList getChatReactions(const QString &chatId);
Q_INVOKABLE QString getOptionString(const QString &optionName);
Q_INVOKABLE void copyFileToDownloads(const QString &filePath, bool openAfterCopy = false);
Q_INVOKABLE void openFileOnDevice(const QString &filePath);
@@ -175,14 +176,14 @@ public:
Q_INVOKABLE void viewMessage(qlonglong chatId, qlonglong messageId, bool force);
Q_INVOKABLE void pinMessage(const QString &chatId, const QString &messageId, bool disableNotification = false);
Q_INVOKABLE void unpinMessage(const QString &chatId, const QString &messageId);
- Q_INVOKABLE void sendTextMessage(const QString &chatId, const QString &message, const QString &replyToMessageId = "0");
- Q_INVOKABLE void sendPhotoMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
- Q_INVOKABLE void sendVideoMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
- Q_INVOKABLE void sendDocumentMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
- Q_INVOKABLE void sendVoiceNoteMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
- Q_INVOKABLE void sendLocationMessage(const QString &chatId, double latitude, double longitude, double horizontalAccuracy, const QString &replyToMessageId = "0");
- Q_INVOKABLE void sendStickerMessage(const QString &chatId, const QString &fileId, const QString &replyToMessageId = "0");
- Q_INVOKABLE void sendPollMessage(const QString &chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &explanation, const QString &replyToMessageId = "0");
+ Q_INVOKABLE void sendTextMessage(qlonglong chatId, const QString &message, qlonglong replyToMessageId = 0);
+ Q_INVOKABLE void sendPhotoMessage(qlonglong chatId, const QString &filePath, const QString &message, qlonglong replyToMessageId = 0);
+ Q_INVOKABLE void sendVideoMessage(qlonglong chatId, const QString &filePath, const QString &message, qlonglong replyToMessageId = 0);
+ Q_INVOKABLE void sendDocumentMessage(qlonglong chatId, const QString &filePath, const QString &message, qlonglong replyToMessageId = 0);
+ Q_INVOKABLE void sendVoiceNoteMessage(qlonglong chatId, const QString &filePath, const QString &message, qlonglong replyToMessageId = 0);
+ Q_INVOKABLE void sendLocationMessage(qlonglong chatId, double latitude, double longitude, double horizontalAccuracy, qlonglong replyToMessageId = 0);
+ Q_INVOKABLE void sendStickerMessage(qlonglong chatId, const QString &fileId, qlonglong replyToMessageId = 0);
+ Q_INVOKABLE void sendPollMessage(qlonglong chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &explanation, qlonglong replyToMessageId = 0);
Q_INVOKABLE void forwardMessages(const QString &chatId, const QString &fromChatId, const QVariantList &messageIds, bool sendCopy, bool removeCaption);
Q_INVOKABLE void getMessage(qlonglong chatId, qlonglong messageId);
Q_INVOKABLE void getMessageLinkInfo(const QString &url, const QString &extra = "");
@@ -364,7 +365,7 @@ public slots:
void handleUpdatedUserPrivacySettingRules(const QVariantMap &updatedRules);
void handleSponsoredMessage(qlonglong chatId, const QVariantMap &message);
void handleNetworkConfigurationChanged(const QNetworkConfiguration &config);
-
+ void handleActiveEmojiReactionsUpdated(const QStringList& emojis);
void handleGetPageSourceFinished();
private:
@@ -372,7 +373,9 @@ private:
void setInitialParameters();
void setEncryptionKey();
void setLogVerbosityLevel();
+ QVariantMap &fillTdlibParameters(QVariantMap ¶meters);
const Group *updateGroup(qlonglong groupId, const QVariantMap &groupInfo, QHash *groups);
+ QVariantMap newSendMessageRequest(qlonglong chatId, qlonglong replyToMessageId);
void initializeTDLibReceiver();
private:
@@ -383,7 +386,7 @@ private:
MceInterface *mceInterface;
TDLibReceiver *tdLibReceiver;
DBusInterface *dbusInterface;
- QString version;
+ QString versionString;
TDLibWrapper::AuthorizationState authorizationState;
QVariantMap authorizationStateData;
TDLibWrapper::ConnectionState connectionState;
@@ -399,7 +402,9 @@ private:
QHash basicGroups;
QHash superGroups;
EmojiSearchWorker emojiSearchWorker;
+ QStringList activeEmojiReactions;
+ int versionNumber;
QString activeChatSearchName;
bool joinChatRequested;
bool isLoggingOut;
diff --git a/tdlib/include/td/telegram/Client.h b/tdlib/include/td/telegram/Client.h
index 211d17f..2f2165e 100644
--- a/tdlib/include/td/telegram/Client.h
+++ b/tdlib/include/td/telegram/Client.h
@@ -1,5 +1,5 @@
//
-// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021
+// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -23,7 +23,7 @@ namespace td {
* Requests can be sent using the method ClientManager::send from any thread.
* New updates and responses to requests can be received using the method ClientManager::receive from any thread after
* the first request has been sent to the client instance. ClientManager::receive must not be called simultaneously from
- * two different threads. Also note that all updates and responses to requests should be applied in the same order as
+ * two different threads. Also, note that all updates and responses to requests should be applied in the same order as
* they were received, to ensure consistency.
* Some TDLib requests can be executed synchronously from any thread using the method ClientManager::execute.
*
@@ -96,7 +96,7 @@ class ClientManager final {
ClientId client_id;
/**
- * Request identifier, to which the response corresponds, or 0 for incoming updates from TDLib.
+ * Request identifier to which the response corresponds, or 0 for incoming updates from TDLib.
*/
RequestId request_id;
@@ -126,10 +126,10 @@ class ClientManager final {
/**
* A type of callback function that will be called when a message is added to the internal TDLib log.
*
- * \param verbosity_level Log verbosity level with which the message was added (-1 - 1024).
+ * \param verbosity_level Log verbosity level with which the message was added from -1 up to 1024.
* If 0, then TDLib will crash as soon as the callback returns.
* None of the TDLib methods can be called from the callback.
- * \param message Null-terminated string with the message added to the log.
+ * \param message Null-terminated UTF-8-encoded string with the message added to the log.
*/
using LogMessageCallbackPtr = void (*)(int verbosity_level, const char *message);
@@ -177,7 +177,7 @@ class ClientManager final {
* The TDLib instance is created for the lifetime of the Client object.
* Requests to TDLib can be sent using the Client::send method from any thread.
* New updates and responses to requests can be received using the Client::receive method from any thread,
- * this function must not be called simultaneously from two different threads. Also note that all updates and
+ * this function must not be called simultaneously from two different threads. Also, note that all updates and
* responses to requests should be applied in the same order as they were received, to ensure consistency.
* Given this information, it's advisable to call this function from a dedicated thread.
* Some service TDLib requests can be executed synchronously from any thread using the Client::execute method.
@@ -199,7 +199,7 @@ class ClientManager final {
* if (response.id == 0) {
* // process response.object as an incoming update of type td_api::Update
* } else {
- * // process response.object as an answer to a sent request with id response.id
+ * // process response.object as an answer to a sent request with identifier response.id
* }
* }
* \endcode
diff --git a/tdlib/include/td/telegram/Log.h b/tdlib/include/td/telegram/Log.h
index 7573c5b..9ad31da 100644
--- a/tdlib/include/td/telegram/Log.h
+++ b/tdlib/include/td/telegram/Log.h
@@ -1,5 +1,5 @@
//
-// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021
+// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
diff --git a/tdlib/include/td/telegram/td_api.h b/tdlib/include/td/telegram/td_api.h
index dc4b818..420c834 100644
--- a/tdlib/include/td/telegram/td_api.h
+++ b/tdlib/include/td/telegram/td_api.h
@@ -64,622 +64,6 @@ std::string to_string(const std::vector> &values) {
return result;
}
-class accountTtl;
-
-class address;
-
-class animatedChatPhoto;
-
-class animatedEmoji;
-
-class animation;
-
-class animations;
-
-class audio;
-
-class authenticationCodeInfo;
-
-class AuthenticationCodeType;
-
-class AuthorizationState;
-
-class autoDownloadSettings;
-
-class autoDownloadSettingsPresets;
-
-class background;
-
-class BackgroundFill;
-
-class BackgroundType;
-
-class backgrounds;
-
-class bankCardActionOpenUrl;
-
-class bankCardInfo;
-
-class basicGroup;
-
-class basicGroupFullInfo;
-
-class botCommand;
-
-class BotCommandScope;
-
-class botCommands;
-
-class call;
-
-class CallDiscardReason;
-
-class callId;
-
-class CallProblem;
-
-class callProtocol;
-
-class callServer;
-
-class CallServerType;
-
-class CallState;
-
-class callbackQueryAnswer;
-
-class CallbackQueryPayload;
-
-class CanTransferOwnershipResult;
-
-class chat;
-
-class ChatAction;
-
-class ChatActionBar;
-
-class chatAdministrator;
-
-class chatAdministrators;
-
-class chatEvent;
-
-class ChatEventAction;
-
-class chatEventLogFilters;
-
-class chatEvents;
-
-class chatFilter;
-
-class chatFilterInfo;
-
-class chatInviteLink;
-
-class chatInviteLinkCount;
-
-class chatInviteLinkCounts;
-
-class chatInviteLinkInfo;
-
-class chatInviteLinkMember;
-
-class chatInviteLinkMembers;
-
-class chatInviteLinks;
-
-class chatJoinRequest;
-
-class chatJoinRequests;
-
-class chatJoinRequestsInfo;
-
-class ChatList;
-
-class chatLists;
-
-class chatLocation;
-
-class chatMember;
-
-class ChatMemberStatus;
-
-class chatMembers;
-
-class ChatMembersFilter;
-
-class chatNearby;
-
-class chatNotificationSettings;
-
-class chatPermissions;
-
-class chatPhoto;
-
-class chatPhotoInfo;
-
-class chatPhotos;
-
-class chatPosition;
-
-class ChatReportReason;
-
-class ChatSource;
-
-class ChatStatistics;
-
-class chatStatisticsAdministratorActionsInfo;
-
-class chatStatisticsInviterInfo;
-
-class chatStatisticsMessageInteractionInfo;
-
-class chatStatisticsMessageSenderInfo;
-
-class chatTheme;
-
-class ChatType;
-
-class chats;
-
-class chatsNearby;
-
-class CheckChatUsernameResult;
-
-class CheckStickerSetNameResult;
-
-class closedVectorPath;
-
-class connectedWebsite;
-
-class connectedWebsites;
-
-class ConnectionState;
-
-class contact;
-
-class count;
-
-class countries;
-
-class countryInfo;
-
-class customRequestResult;
-
-class databaseStatistics;
-
-class date;
-
-class dateRange;
-
-class datedFile;
-
-class deepLinkInfo;
-
-class DeviceToken;
-
-class DiceStickers;
-
-class document;
-
-class draftMessage;
-
-class emailAddressAuthenticationCodeInfo;
-
-class emojis;
-
-class encryptedCredentials;
-
-class encryptedPassportElement;
-
-class error;
-
-class file;
-
-class filePart;
-
-class FileType;
-
-class formattedText;
-
-class foundMessages;
-
-class game;
-
-class gameHighScore;
-
-class gameHighScores;
-
-class groupCall;
-
-class groupCallId;
-
-class groupCallParticipant;
-
-class groupCallParticipantVideoInfo;
-
-class groupCallRecentSpeaker;
-
-class GroupCallVideoQuality;
-
-class groupCallVideoSourceGroup;
-
-class hashtags;
-
-class httpUrl;
-
-class identityDocument;
-
-class importedContacts;
-
-class inlineKeyboardButton;
-
-class InlineKeyboardButtonType;
-
-class InlineQueryResult;
-
-class inlineQueryResults;
-
-class InputBackground;
-
-class InputChatPhoto;
-
-class InputCredentials;
-
-class InputFile;
-
-class inputIdentityDocument;
-
-class InputInlineQueryResult;
-
-class InputMessageContent;
-
-class InputPassportElement;
-
-class inputPassportElementError;
-
-class InputPassportElementErrorSource;
-
-class inputPersonalDocument;
-
-class InputSticker;
-
-class inputThumbnail;
-
-class InternalLinkType;
-
-class invoice;
-
-class jsonObjectMember;
-
-class JsonValue;
-
-class keyboardButton;
-
-class KeyboardButtonType;
-
-class labeledPricePart;
-
-class languagePackInfo;
-
-class languagePackString;
-
-class LanguagePackStringValue;
-
-class languagePackStrings;
-
-class localFile;
-
-class localizationTargetInfo;
-
-class location;
-
-class LogStream;
-
-class logTags;
-
-class logVerbosityLevel;
-
-class LoginUrlInfo;
-
-class MaskPoint;
-
-class maskPosition;
-
-class message;
-
-class messageCalendar;
-
-class messageCalendarDay;
-
-class MessageContent;
-
-class messageCopyOptions;
-
-class MessageFileType;
-
-class messageForwardInfo;
-
-class MessageForwardOrigin;
-
-class messageInteractionInfo;
-
-class messageLink;
-
-class messageLinkInfo;
-
-class messagePosition;
-
-class messagePositions;
-
-class messageReplyInfo;
-
-class MessageSchedulingState;
-
-class messageSendOptions;
-
-class MessageSender;
-
-class messageSenders;
-
-class MessageSendingState;
-
-class messageStatistics;
-
-class messageThreadInfo;
-
-class messages;
-
-class minithumbnail;
-
-class networkStatistics;
-
-class NetworkStatisticsEntry;
-
-class NetworkType;
-
-class notification;
-
-class notificationGroup;
-
-class NotificationGroupType;
-
-class NotificationSettingsScope;
-
-class NotificationType;
-
-class ok;
-
-class OptionValue;
-
-class orderInfo;
-
-class PageBlock;
-
-class pageBlockCaption;
-
-class PageBlockHorizontalAlignment;
-
-class pageBlockListItem;
-
-class pageBlockRelatedArticle;
-
-class pageBlockTableCell;
-
-class PageBlockVerticalAlignment;
-
-class passportAuthorizationForm;
-
-class PassportElement;
-
-class passportElementError;
-
-class PassportElementErrorSource;
-
-class PassportElementType;
-
-class passportElements;
-
-class passportElementsWithErrors;
-
-class passportRequiredElement;
-
-class passportSuitableElement;
-
-class passwordState;
-
-class paymentForm;
-
-class paymentFormTheme;
-
-class paymentReceipt;
-
-class paymentResult;
-
-class paymentsProviderStripe;
-
-class personalDetails;
-
-class personalDocument;
-
-class phoneNumberAuthenticationSettings;
-
-class phoneNumberInfo;
-
-class photo;
-
-class photoSize;
-
-class point;
-
-class poll;
-
-class pollOption;
-
-class PollType;
-
-class profilePhoto;
-
-class proxies;
-
-class proxy;
-
-class ProxyType;
-
-class PublicChatType;
-
-class PushMessageContent;
-
-class pushReceiverId;
-
-class recommendedChatFilter;
-
-class recommendedChatFilters;
-
-class recoveryEmailAddress;
-
-class remoteFile;
-
-class ReplyMarkup;
-
-class ResetPasswordResult;
-
-class RichText;
-
-class savedCredentials;
-
-class scopeNotificationSettings;
-
-class SearchMessagesFilter;
-
-class seconds;
-
-class secretChat;
-
-class SecretChatState;
-
-class session;
-
-class sessions;
-
-class shippingOption;
-
-class sponsoredMessage;
-
-class StatisticalGraph;
-
-class statisticalValue;
-
-class sticker;
-
-class stickerSet;
-
-class stickerSetInfo;
-
-class stickerSets;
-
-class stickers;
-
-class storageStatistics;
-
-class storageStatisticsByChat;
-
-class storageStatisticsByFileType;
-
-class storageStatisticsFast;
-
-class SuggestedAction;
-
-class supergroup;
-
-class supergroupFullInfo;
-
-class SupergroupMembersFilter;
-
-class tMeUrl;
-
-class TMeUrlType;
-
-class tMeUrls;
-
-class tdlibParameters;
-
-class temporaryPasswordState;
-
-class termsOfService;
-
-class testBytes;
-
-class testInt;
-
-class testString;
-
-class testVectorInt;
-
-class testVectorIntObject;
-
-class testVectorString;
-
-class testVectorStringObject;
-
-class text;
-
-class textEntities;
-
-class textEntity;
-
-class TextEntityType;
-
-class TextParseMode;
-
-class themeSettings;
-
-class thumbnail;
-
-class ThumbnailFormat;
-
-class TopChatCategory;
-
-class Update;
-
-class updates;
-
-class user;
-
-class userFullInfo;
-
-class UserPrivacySetting;
-
-class UserPrivacySettingRule;
-
-class userPrivacySettingRules;
-
-class UserStatus;
-
-class UserType;
-
-class users;
-
-class validatedOrderInfo;
-
-class VectorPathCommand;
-
-class venue;
-
-class video;
-
-class videoChat;
-
-class videoNote;
-
-class voiceNote;
-
-class webPage;
-
-class webPageInstantView;
-
-class Object;
-
class Object: public TlObject {
public:
};
@@ -688,6 +72,25 @@ class Function: public TlObject {
public:
};
+class accentColor final : public Object {
+ public:
+ int32 id_;
+ int32 built_in_accent_color_id_;
+ array light_theme_colors_;
+ array dark_theme_colors_;
+
+ accentColor();
+
+ accentColor(int32 id_, int32 built_in_accent_color_id_, array &&light_theme_colors_, array &&dark_theme_colors_);
+
+ static const std::int32_t ID = 1830661068;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class accountTtl final : public Object {
public:
int32 days_;
@@ -704,6 +107,49 @@ class accountTtl final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class MessageSender;
+
+class ReactionType;
+
+class addedReaction final : public Object {
+ public:
+ object_ptr type_;
+ object_ptr sender_id_;
+ bool is_outgoing_;
+ int32 date_;
+
+ addedReaction();
+
+ addedReaction(object_ptr &&type_, object_ptr &&sender_id_, bool is_outgoing_, int32 date_);
+
+ static const std::int32_t ID = 1258586525;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class addedReaction;
+
+class addedReactions final : public Object {
+ public:
+ int32 total_count_;
+ array> reactions_;
+ string next_offset_;
+
+ addedReactions();
+
+ addedReactions(int32 total_count_, array> &&reactions_, string const &next_offset_);
+
+ static const std::int32_t ID = 226352304;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class address final : public Object {
public:
string country_code_;
@@ -725,6 +171,8 @@ class address final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class file;
+
class animatedChatPhoto final : public Object {
public:
int32 length_;
@@ -743,17 +191,23 @@ class animatedChatPhoto final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class file;
+
+class sticker;
+
class animatedEmoji final : public Object {
public:
object_ptr sticker_;
+ int32 sticker_width_;
+ int32 sticker_height_;
int32 fitzpatrick_type_;
object_ptr sound_;
animatedEmoji();
- animatedEmoji(object_ptr &&sticker_, int32 fitzpatrick_type_, object_ptr &&sound_);
+ animatedEmoji(object_ptr &&sticker_, int32 sticker_width_, int32 sticker_height_, int32 fitzpatrick_type_, object_ptr &&sound_);
- static const std::int32_t ID = -1816658231;
+ static const std::int32_t ID = 1378918079;
std::int32_t get_id() const final {
return ID;
}
@@ -761,6 +215,12 @@ class animatedEmoji final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class file;
+
+class minithumbnail;
+
+class thumbnail;
+
class animation final : public Object {
public:
int32 duration_;
@@ -785,6 +245,8 @@ class animation final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class animation;
+
class animations final : public Object {
public:
array> animations_;
@@ -801,6 +263,89 @@ class animations final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class archiveChatListSettings final : public Object {
+ public:
+ bool archive_and_mute_new_chats_from_unknown_users_;
+ bool keep_unmuted_chats_archived_;
+ bool keep_chats_from_folders_archived_;
+
+ archiveChatListSettings();
+
+ archiveChatListSettings(bool archive_and_mute_new_chats_from_unknown_users_, bool keep_unmuted_chats_archived_, bool keep_chats_from_folders_archived_);
+
+ static const std::int32_t ID = 1058499236;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class attachmentMenuBotColor;
+
+class file;
+
+class attachmentMenuBot final : public Object {
+ public:
+ int53 bot_user_id_;
+ bool supports_self_chat_;
+ bool supports_user_chats_;
+ bool supports_bot_chats_;
+ bool supports_group_chats_;
+ bool supports_channel_chats_;
+ bool request_write_access_;
+ bool is_added_;
+ bool show_in_attachment_menu_;
+ bool show_in_side_menu_;
+ bool show_disclaimer_in_side_menu_;
+ string name_;
+ object_ptr name_color_;
+ object_ptr default_icon_;
+ object_ptr ios_static_icon_;
+ object_ptr ios_animated_icon_;
+ object_ptr ios_side_menu_icon_;
+ object_ptr android_icon_;
+ object_ptr android_side_menu_icon_;
+ object_ptr macos_icon_;
+ object_ptr macos_side_menu_icon_;
+ object_ptr icon_color_;
+ object_ptr web_app_placeholder_;
+
+ attachmentMenuBot();
+
+ attachmentMenuBot(int53 bot_user_id_, bool supports_self_chat_, bool supports_user_chats_, bool supports_bot_chats_, bool supports_group_chats_, bool supports_channel_chats_, bool request_write_access_, bool is_added_, bool show_in_attachment_menu_, bool show_in_side_menu_, bool show_disclaimer_in_side_menu_, string const &name_, object_ptr &&name_color_, object_ptr &&default_icon_, object_ptr &&ios_static_icon_, object_ptr &&ios_animated_icon_, object_ptr &&ios_side_menu_icon_, object_ptr &&android_icon_, object_ptr &&android_side_menu_icon_, object_ptr &&macos_icon_, object_ptr &&macos_side_menu_icon_, object_ptr &&icon_color_, object_ptr &&web_app_placeholder_);
+
+ static const std::int32_t ID = -1183966273;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class attachmentMenuBotColor final : public Object {
+ public:
+ int32 light_color_;
+ int32 dark_color_;
+
+ attachmentMenuBotColor();
+
+ attachmentMenuBotColor(int32 light_color_, int32 dark_color_);
+
+ static const std::int32_t ID = 1680039612;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class file;
+
+class minithumbnail;
+
+class thumbnail;
+
class audio final : public Object {
public:
int32 duration_;
@@ -810,13 +355,14 @@ class audio final : public Object {
string mime_type_;
object_ptr album_cover_minithumbnail_;
object_ptr album_cover_thumbnail_;
+ array> external_album_covers_;
object_ptr audio_;
audio();
- audio(int32 duration_, string const &title_, string const &performer_, string const &file_name_, string const &mime_type_, object_ptr &&album_cover_minithumbnail_, object_ptr &&album_cover_thumbnail_, object_ptr &&audio_);
+ audio(int32 duration_, string const &title_, string const &performer_, string const &file_name_, string const &mime_type_, object_ptr &&album_cover_minithumbnail_, object_ptr &&album_cover_thumbnail_, array> &&external_album_covers_, object_ptr &&audio_);
- static const std::int32_t ID = -1179334690;
+ static const std::int32_t ID = -166398841;
std::int32_t get_id() const final {
return ID;
}
@@ -824,6 +370,8 @@ class audio final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class AuthenticationCodeType;
+
class authenticationCodeInfo final : public Object {
public:
string phone_number_;
@@ -928,6 +476,66 @@ class authenticationCodeTypeMissedCall final : public AuthenticationCodeType {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class authenticationCodeTypeFragment final : public AuthenticationCodeType {
+ public:
+ string url_;
+ int32 length_;
+
+ authenticationCodeTypeFragment();
+
+ authenticationCodeTypeFragment(string const &url_, int32 length_);
+
+ static const std::int32_t ID = -2129693491;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class authenticationCodeTypeFirebaseAndroid final : public AuthenticationCodeType {
+ public:
+ bytes nonce_;
+ int32 length_;
+
+ authenticationCodeTypeFirebaseAndroid();
+
+ authenticationCodeTypeFirebaseAndroid(bytes const &nonce_, int32 length_);
+
+ static const std::int32_t ID = -1978562535;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class authenticationCodeTypeFirebaseIos final : public AuthenticationCodeType {
+ public:
+ string receipt_;
+ int32 push_timeout_;
+ int32 length_;
+
+ authenticationCodeTypeFirebaseIos();
+
+ authenticationCodeTypeFirebaseIos(string const &receipt_, int32 push_timeout_, int32 length_);
+
+ static const std::int32_t ID = -11162989;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class EmailAddressResetState;
+
+class authenticationCodeInfo;
+
+class emailAddressAuthenticationCodeInfo;
+
+class termsOfService;
+
class AuthorizationState: public Object {
public:
};
@@ -945,15 +553,12 @@ class authorizationStateWaitTdlibParameters final : public AuthorizationState {
void store(TlStorerToString &s, const char *field_name) const final;
};
-class authorizationStateWaitEncryptionKey final : public AuthorizationState {
+class authorizationStateWaitPhoneNumber final : public AuthorizationState {
public:
- bool is_encrypted_;
- authorizationStateWaitEncryptionKey();
+ authorizationStateWaitPhoneNumber();
- explicit authorizationStateWaitEncryptionKey(bool is_encrypted_);
-
- static const std::int32_t ID = 612103496;
+ static const std::int32_t ID = 306402531;
std::int32_t get_id() const final {
return ID;
}
@@ -961,12 +566,35 @@ class authorizationStateWaitEncryptionKey final : public AuthorizationState {
void store(TlStorerToString &s, const char *field_name) const final;
};
-class authorizationStateWaitPhoneNumber final : public AuthorizationState {
+class authorizationStateWaitEmailAddress final : public AuthorizationState {
public:
+ bool allow_apple_id_;
+ bool allow_google_id_;
- authorizationStateWaitPhoneNumber();
+ authorizationStateWaitEmailAddress();
- static const std::int32_t ID = 306402531;
+ authorizationStateWaitEmailAddress(bool allow_apple_id_, bool allow_google_id_);
+
+ static const std::int32_t ID = 1040478663;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class authorizationStateWaitEmailCode final : public AuthorizationState {
+ public:
+ bool allow_apple_id_;
+ bool allow_google_id_;
+ object_ptr code_info_;
+ object_ptr email_address_reset_state_;
+
+ authorizationStateWaitEmailCode();
+
+ authorizationStateWaitEmailCode(bool allow_apple_id_, bool allow_google_id_, object_ptr &&code_info_, object_ptr &&email_address_reset_state_);
+
+ static const std::int32_t ID = -1868627365;
std::int32_t get_id() const final {
return ID;
}
@@ -1026,13 +654,14 @@ class authorizationStateWaitPassword final : public AuthorizationState {
public:
string password_hint_;
bool has_recovery_email_address_;
+ bool has_passport_data_;
string recovery_email_address_pattern_;
authorizationStateWaitPassword();
- authorizationStateWaitPassword(string const &password_hint_, bool has_recovery_email_address_, string const &recovery_email_address_pattern_);
+ authorizationStateWaitPassword(string const &password_hint_, bool has_recovery_email_address_, bool has_passport_data_, string const &recovery_email_address_pattern_);
- static const std::int32_t ID = 187548796;
+ static const std::int32_t ID = 112238030;
std::int32_t get_id() const final {
return ID;
}
@@ -1096,18 +725,19 @@ class autoDownloadSettings final : public Object {
public:
bool is_auto_download_enabled_;
int32 max_photo_file_size_;
- int32 max_video_file_size_;
- int32 max_other_file_size_;
+ int53 max_video_file_size_;
+ int53 max_other_file_size_;
int32 video_upload_bitrate_;
bool preload_large_videos_;
bool preload_next_audio_;
+ bool preload_stories_;
bool use_less_data_for_calls_;
autoDownloadSettings();
- autoDownloadSettings(bool is_auto_download_enabled_, int32 max_photo_file_size_, int32 max_video_file_size_, int32 max_other_file_size_, int32 video_upload_bitrate_, bool preload_large_videos_, bool preload_next_audio_, bool use_less_data_for_calls_);
+ autoDownloadSettings(bool is_auto_download_enabled_, int32 max_photo_file_size_, int53 max_video_file_size_, int53 max_other_file_size_, int32 video_upload_bitrate_, bool preload_large_videos_, bool preload_next_audio_, bool preload_stories_, bool use_less_data_for_calls_);
- static const std::int32_t ID = -2144418333;
+ static const std::int32_t ID = 991433696;
std::int32_t get_id() const final {
return ID;
}
@@ -1115,6 +745,8 @@ class autoDownloadSettings final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class autoDownloadSettings;
+
class autoDownloadSettingsPresets final : public Object {
public:
object_ptr low_;
@@ -1133,6 +765,151 @@ class autoDownloadSettingsPresets final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class autosaveSettingsException;
+
+class scopeAutosaveSettings;
+
+class autosaveSettings final : public Object {
+ public:
+ object_ptr private_chat_settings_;
+ object_ptr group_settings_;
+ object_ptr channel_settings_;
+ array> exceptions_;
+
+ autosaveSettings();
+
+ autosaveSettings(object_ptr &&private_chat_settings_, object_ptr &&group_settings_, object_ptr &&channel_settings_, array> &&exceptions_);
+
+ static const std::int32_t ID = 1629412502;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class scopeAutosaveSettings;
+
+class autosaveSettingsException final : public Object {
+ public:
+ int53 chat_id_;
+ object_ptr settings_;
+
+ autosaveSettingsException();
+
+ autosaveSettingsException(int53 chat_id_, object_ptr &&settings_);
+
+ static const std::int32_t ID = 1483470280;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class AutosaveSettingsScope: public Object {
+ public:
+};
+
+class autosaveSettingsScopePrivateChats final : public AutosaveSettingsScope {
+ public:
+
+ autosaveSettingsScopePrivateChats();
+
+ static const std::int32_t ID = 1395227007;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class autosaveSettingsScopeGroupChats final : public AutosaveSettingsScope {
+ public:
+
+ autosaveSettingsScopeGroupChats();
+
+ static const std::int32_t ID = 853544526;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class autosaveSettingsScopeChannelChats final : public AutosaveSettingsScope {
+ public:
+
+ autosaveSettingsScopeChannelChats();
+
+ static const std::int32_t ID = -499572783;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class autosaveSettingsScopeChat final : public AutosaveSettingsScope {
+ public:
+ int53 chat_id_;
+
+ autosaveSettingsScopeChat();
+
+ explicit autosaveSettingsScopeChat(int53 chat_id_);
+
+ static const std::int32_t ID = -1632255255;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class ReactionType;
+
+class availableReaction final : public Object {
+ public:
+ object_ptr type_;
+ bool needs_premium_;
+
+ availableReaction();
+
+ availableReaction(object_ptr &&type_, bool needs_premium_);
+
+ static const std::int32_t ID = -117292153;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class availableReaction;
+
+class availableReactions final : public Object {
+ public:
+ array> top_reactions_;
+ array> recent_reactions_;
+ array> popular_reactions_;
+ bool allow_custom_emoji_;
+
+ availableReactions();
+
+ availableReactions(array> &&top_reactions_, array> &&recent_reactions_, array> &&popular_reactions_, bool allow_custom_emoji_);
+
+ static const std::int32_t ID = 1995943616;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class BackgroundType;
+
+class document;
+
class background final : public Object {
public:
int64 id_;
@@ -1208,6 +985,8 @@ class backgroundFillFreeformGradient final : public BackgroundFill {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class BackgroundFill;
+
class BackgroundType: public Object {
public:
};
@@ -1264,6 +1043,8 @@ class backgroundTypeFill final : public BackgroundType {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class background;
+
class backgrounds final : public Object {
public:
array> backgrounds_;
@@ -1297,6 +1078,8 @@ class bankCardActionOpenUrl final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class bankCardActionOpenUrl;
+
class bankCardInfo final : public Object {
public:
string title_;
@@ -1314,6 +1097,8 @@ class bankCardInfo final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class ChatMemberStatus;
+
class basicGroup final : public Object {
public:
int53 id_;
@@ -1334,20 +1119,60 @@ class basicGroup final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class botCommands;
+
+class chatInviteLink;
+
+class chatMember;
+
+class chatPhoto;
+
class basicGroupFullInfo final : public Object {
public:
object_ptr photo_;
string description_;
int53 creator_user_id_;
array> members_;
+ bool can_hide_members_;
+ bool can_toggle_aggressive_anti_spam_;
object_ptr invite_link_;
array> bot_commands_;
basicGroupFullInfo();
- basicGroupFullInfo(object_ptr &&photo_, string const &description_, int53 creator_user_id_, array> &&members_, object_ptr &&invite_link_, array> &&bot_commands_);
+ basicGroupFullInfo(object_ptr &&photo_, string const &description_, int53 creator_user_id_, array> &&members_, bool can_hide_members_, bool can_toggle_aggressive_anti_spam_, object_ptr &&invite_link_, array> &&bot_commands_);
- static const std::int32_t ID = 2022233397;
+ static const std::int32_t ID = -1879035520;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class BlockList: public Object {
+ public:
+};
+
+class blockListMain final : public BlockList {
+ public:
+
+ blockListMain();
+
+ static const std::int32_t ID = 1352930172;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class blockListStories final : public BlockList {
+ public:
+
+ blockListStories();
+
+ static const std::int32_t ID = 103323228;
std::int32_t get_id() const final {
return ID;
}
@@ -1477,6 +1302,8 @@ class botCommandScopeChatMember final : public BotCommandScope {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class botCommand;
+
class botCommands final : public Object {
public:
int53 bot_user_id_;
@@ -1494,6 +1321,128 @@ class botCommands final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class InternalLinkType;
+
+class animation;
+
+class botCommand;
+
+class botMenuButton;
+
+class chatAdministratorRights;
+
+class photo;
+
+class botInfo final : public Object {
+ public:
+ string short_description_;
+ string description_;
+ object_ptr photo_;
+ object_ptr animation_;
+ object_ptr menu_button_;
+ array> commands_;
+ object_ptr default_group_administrator_rights_;
+ object_ptr default_channel_administrator_rights_;
+ object_ptr edit_commands_link_;
+ object_ptr edit_description_link_;
+ object_ptr edit_description_media_link_;
+ object_ptr edit_settings_link_;
+
+ botInfo();
+
+ botInfo(string const &short_description_, string const &description_, object_ptr &&photo_, object_ptr &&animation_, object_ptr &&menu_button_, array> &&commands_, object_ptr &&default_group_administrator_rights_, object_ptr &&default_channel_administrator_rights_, object_ptr &&edit_commands_link_, object_ptr &&edit_description_link_, object_ptr &&edit_description_media_link_, object_ptr &&edit_settings_link_);
+
+ static const std::int32_t ID = -1472546735;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class botMenuButton final : public Object {
+ public:
+ string text_;
+ string url_;
+
+ botMenuButton();
+
+ botMenuButton(string const &text_, string const &url_);
+
+ static const std::int32_t ID = -944407322;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class webApp;
+
+class BotWriteAccessAllowReason: public Object {
+ public:
+};
+
+class botWriteAccessAllowReasonConnectedWebsite final : public BotWriteAccessAllowReason {
+ public:
+ string domain_name_;
+
+ botWriteAccessAllowReasonConnectedWebsite();
+
+ explicit botWriteAccessAllowReasonConnectedWebsite(string const &domain_name_);
+
+ static const std::int32_t ID = 2016325603;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class botWriteAccessAllowReasonAddedToAttachmentMenu final : public BotWriteAccessAllowReason {
+ public:
+
+ botWriteAccessAllowReasonAddedToAttachmentMenu();
+
+ static const std::int32_t ID = -2104795235;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class botWriteAccessAllowReasonLaunchedWebApp final : public BotWriteAccessAllowReason {
+ public:
+ object_ptr web_app_;
+
+ botWriteAccessAllowReasonLaunchedWebApp();
+
+ explicit botWriteAccessAllowReasonLaunchedWebApp(object_ptr &&web_app_);
+
+ static const std::int32_t ID = -240843561;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class botWriteAccessAllowReasonAcceptedRequest final : public BotWriteAccessAllowReason {
+ public:
+
+ botWriteAccessAllowReasonAcceptedRequest();
+
+ static const std::int32_t ID = -1983497220;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class CallState;
+
class call final : public Object {
public:
int32 id_;
@@ -1740,6 +1689,8 @@ class callProtocol final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class CallServerType;
+
class callServer final : public Object {
public:
int64 id_;
@@ -1767,12 +1718,13 @@ class CallServerType: public Object {
class callServerTypeTelegramReflector final : public CallServerType {
public:
bytes peer_tag_;
+ bool is_tcp_;
callServerTypeTelegramReflector();
- explicit callServerTypeTelegramReflector(bytes const &peer_tag_);
+ callServerTypeTelegramReflector(bytes const &peer_tag_, bool is_tcp_);
- static const std::int32_t ID = -1507850700;
+ static const std::int32_t ID = 850343189;
std::int32_t get_id() const final {
return ID;
}
@@ -1799,6 +1751,14 @@ class callServerTypeWebrtc final : public CallServerType {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class CallDiscardReason;
+
+class callProtocol;
+
+class callServer;
+
+class error;
+
class CallState: public Object {
public:
};
@@ -1872,12 +1832,13 @@ class callStateDiscarded final : public CallState {
object_ptr reason_;
bool need_rating_;
bool need_debug_information_;
+ bool need_log_;
callStateDiscarded();
- callStateDiscarded(object_ptr &&reason_, bool need_rating_, bool need_debug_information_);
+ callStateDiscarded(object_ptr &&reason_, bool need_rating_, bool need_debug_information_, bool need_log_);
- static const std::int32_t ID = -190853167;
+ static const std::int32_t ID = 1394310213;
std::int32_t get_id() const final {
return ID;
}
@@ -1972,6 +1933,94 @@ class callbackQueryPayloadGame final : public CallbackQueryPayload {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class CanSendStoryResult: public Object {
+ public:
+};
+
+class canSendStoryResultOk final : public CanSendStoryResult {
+ public:
+
+ canSendStoryResultOk();
+
+ static const std::int32_t ID = 1346171133;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class canSendStoryResultPremiumNeeded final : public CanSendStoryResult {
+ public:
+
+ canSendStoryResultPremiumNeeded();
+
+ static const std::int32_t ID = 1451220585;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class canSendStoryResultBoostNeeded final : public CanSendStoryResult {
+ public:
+
+ canSendStoryResultBoostNeeded();
+
+ static const std::int32_t ID = -1637816017;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class canSendStoryResultActiveStoryLimitExceeded final : public CanSendStoryResult {
+ public:
+
+ canSendStoryResultActiveStoryLimitExceeded();
+
+ static const std::int32_t ID = -1344689450;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class canSendStoryResultWeeklyLimitExceeded final : public CanSendStoryResult {
+ public:
+ int32 retry_after_;
+
+ canSendStoryResultWeeklyLimitExceeded();
+
+ explicit canSendStoryResultWeeklyLimitExceeded(int32 retry_after_);
+
+ static const std::int32_t ID = 323068088;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class canSendStoryResultMonthlyLimitExceeded final : public CanSendStoryResult {
+ public:
+ int32 retry_after_;
+
+ canSendStoryResultMonthlyLimitExceeded();
+
+ explicit canSendStoryResultMonthlyLimitExceeded(int32 retry_after_);
+
+ static const std::int32_t ID = -578665771;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class CanTransferOwnershipResult: public Object {
public:
};
@@ -2034,19 +2083,50 @@ class canTransferOwnershipResultSessionTooFresh final : public CanTransferOwners
void store(TlStorerToString &s, const char *field_name) const final;
};
+class BlockList;
+
+class ChatActionBar;
+
+class ChatAvailableReactions;
+
+class ChatType;
+
+class MessageSender;
+
+class chatBackground;
+
+class chatJoinRequestsInfo;
+
+class chatNotificationSettings;
+
+class chatPermissions;
+
+class chatPhotoInfo;
+
+class chatPosition;
+
+class draftMessage;
+
+class message;
+
+class videoChat;
+
class chat final : public Object {
public:
int53 id_;
object_ptr type_;
string title_;
object_ptr photo_;
+ int32 accent_color_id_;
+ int64 background_custom_emoji_id_;
object_ptr permissions_;
object_ptr last_message_;
array> positions_;
object_ptr message_sender_id_;
+ object_ptr block_list_;
bool has_protected_content_;
+ bool is_translatable_;
bool is_marked_as_unread_;
- bool is_blocked_;
bool has_scheduled_messages_;
bool can_be_deleted_only_for_self_;
bool can_be_deleted_for_all_users_;
@@ -2056,8 +2136,11 @@ class chat final : public Object {
int53 last_read_inbox_message_id_;
int53 last_read_outbox_message_id_;
int32 unread_mention_count_;
+ int32 unread_reaction_count_;
object_ptr notification_settings_;
- int32 message_ttl_;
+ object_ptr available_reactions_;
+ int32 message_auto_delete_time_;
+ object_ptr background_;
string theme_name_;
object_ptr action_bar_;
object_ptr video_chat_;
@@ -2068,9 +2151,9 @@ class chat final : public Object {
chat();
- chat(int53 id_, object_ptr &&type_, string const &title_, object_ptr &&photo_, object_ptr &&permissions_, object_ptr &&last_message_, array> &&positions_, object_ptr &&message_sender_id_, bool has_protected_content_, bool is_marked_as_unread_, bool is_blocked_, bool has_scheduled_messages_, bool can_be_deleted_only_for_self_, bool can_be_deleted_for_all_users_, bool can_be_reported_, bool default_disable_notification_, int32 unread_count_, int53 last_read_inbox_message_id_, int53 last_read_outbox_message_id_, int32 unread_mention_count_, object_ptr &¬ification_settings_, int32 message_ttl_, string const &theme_name_, object_ptr &&action_bar_, object_ptr &&video_chat_, object_ptr &&pending_join_requests_, int53 reply_markup_message_id_, object_ptr &&draft_message_, string const &client_data_);
+ chat(int53 id_, object_ptr &&type_, string const &title_, object_ptr &&photo_, int32 accent_color_id_, int64 background_custom_emoji_id_, object_ptr &&permissions_, object_ptr &&last_message_, array> &&positions_, object_ptr &&message_sender_id_, object_ptr &&block_list_, bool has_protected_content_, bool is_translatable_, bool is_marked_as_unread_, bool has_scheduled_messages_, bool can_be_deleted_only_for_self_, bool can_be_deleted_for_all_users_, bool can_be_reported_, bool default_disable_notification_, int32 unread_count_, int53 last_read_inbox_message_id_, int53 last_read_outbox_message_id_, int32 unread_mention_count_, int32 unread_reaction_count_, object_ptr &¬ification_settings_, object_ptr &&available_reactions_, int32 message_auto_delete_time_, object_ptr &&background_, string const &theme_name_, object_ptr &&action_bar_, object_ptr &&video_chat_, object_ptr &&pending_join_requests_, int53 reply_markup_message_id_, object_ptr &&draft_message_, string const &client_data_);
- static const std::int32_t ID = 1617921149;
+ static const std::int32_t ID = 577146552;
std::int32_t get_id() const final {
return ID;
}
@@ -2402,6 +2485,30 @@ class chatActionBarJoinRequest final : public ChatActionBar {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class StoryList;
+
+class storyInfo;
+
+class chatActiveStories final : public Object {
+ public:
+ int53 chat_id_;
+ object_ptr list_;
+ int53 order_;
+ int32 max_read_story_id_;
+ array> stories_;
+
+ chatActiveStories();
+
+ chatActiveStories(int53 chat_id_, object_ptr &&list_, int53 order_, int32 max_read_story_id_, array> &&stories_);
+
+ static const std::int32_t ID = -1398869529;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class chatAdministrator final : public Object {
public:
int53 user_id_;
@@ -2420,6 +2527,38 @@ class chatAdministrator final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class chatAdministratorRights final : public Object {
+ public:
+ bool can_manage_chat_;
+ bool can_change_info_;
+ bool can_post_messages_;
+ bool can_edit_messages_;
+ bool can_delete_messages_;
+ bool can_invite_users_;
+ bool can_restrict_members_;
+ bool can_pin_messages_;
+ bool can_manage_topics_;
+ bool can_promote_members_;
+ bool can_manage_video_chats_;
+ bool can_post_stories_;
+ bool can_edit_stories_;
+ bool can_delete_stories_;
+ bool is_anonymous_;
+
+ chatAdministratorRights();
+
+ chatAdministratorRights(bool can_manage_chat_, bool can_change_info_, bool can_post_messages_, bool can_edit_messages_, bool can_delete_messages_, bool can_invite_users_, bool can_restrict_members_, bool can_pin_messages_, bool can_manage_topics_, bool can_promote_members_, bool can_manage_video_chats_, bool can_post_stories_, bool can_edit_stories_, bool can_delete_stories_, bool is_anonymous_);
+
+ static const std::int32_t ID = 1599049796;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatAdministrator;
+
class chatAdministrators final : public Object {
public:
array> administrators_;
@@ -2436,6 +2575,241 @@ class chatAdministrators final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class ReactionType;
+
+class ChatAvailableReactions: public Object {
+ public:
+};
+
+class chatAvailableReactionsAll final : public ChatAvailableReactions {
+ public:
+
+ chatAvailableReactionsAll();
+
+ static const std::int32_t ID = -537887666;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatAvailableReactionsSome final : public ChatAvailableReactions {
+ public:
+ array> reactions_;
+
+ chatAvailableReactionsSome();
+
+ explicit chatAvailableReactionsSome(array> &&reactions_);
+
+ static const std::int32_t ID = -640810821;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class background;
+
+class chatBackground final : public Object {
+ public:
+ object_ptr background_;
+ int32 dark_theme_dimming_;
+
+ chatBackground();
+
+ chatBackground(object_ptr &&background_, int32 dark_theme_dimming_);
+
+ static const std::int32_t ID = 1653152104;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class ChatBoostSource;
+
+class chatBoost final : public Object {
+ public:
+ string id_;
+ int32 count_;
+ object_ptr source_;
+ int32 start_date_;
+ int32 expiration_date_;
+
+ chatBoost();
+
+ chatBoost(string const &id_, int32 count_, object_ptr &&source_, int32 start_date_, int32 expiration_date_);
+
+ static const std::int32_t ID = -1765815118;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatBoostLink final : public Object {
+ public:
+ string link_;
+ bool is_public_;
+
+ chatBoostLink();
+
+ chatBoostLink(string const &link_, bool is_public_);
+
+ static const std::int32_t ID = -1253999503;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatBoostLinkInfo final : public Object {
+ public:
+ bool is_public_;
+ int53 chat_id_;
+
+ chatBoostLinkInfo();
+
+ chatBoostLinkInfo(bool is_public_, int53 chat_id_);
+
+ static const std::int32_t ID = -602785660;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatBoostSlot final : public Object {
+ public:
+ int32 slot_id_;
+ int53 currently_boosted_chat_id_;
+ int32 start_date_;
+ int32 expiration_date_;
+ int32 cooldown_until_date_;
+
+ chatBoostSlot();
+
+ chatBoostSlot(int32 slot_id_, int53 currently_boosted_chat_id_, int32 start_date_, int32 expiration_date_, int32 cooldown_until_date_);
+
+ static const std::int32_t ID = 123206343;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatBoostSlot;
+
+class chatBoostSlots final : public Object {
+ public:
+ array> slots_;
+
+ chatBoostSlots();
+
+ explicit chatBoostSlots(array> &&slots_);
+
+ static const std::int32_t ID = 1014966293;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class ChatBoostSource: public Object {
+ public:
+};
+
+class chatBoostSourceGiftCode final : public ChatBoostSource {
+ public:
+ int53 user_id_;
+ string gift_code_;
+
+ chatBoostSourceGiftCode();
+
+ chatBoostSourceGiftCode(int53 user_id_, string const &gift_code_);
+
+ static const std::int32_t ID = -98299206;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatBoostSourceGiveaway final : public ChatBoostSource {
+ public:
+ int53 user_id_;
+ string gift_code_;
+ int53 giveaway_message_id_;
+ bool is_unclaimed_;
+
+ chatBoostSourceGiveaway();
+
+ chatBoostSourceGiveaway(int53 user_id_, string const &gift_code_, int53 giveaway_message_id_, bool is_unclaimed_);
+
+ static const std::int32_t ID = 151854192;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatBoostSourcePremium final : public ChatBoostSource {
+ public:
+ int53 user_id_;
+
+ chatBoostSourcePremium();
+
+ explicit chatBoostSourcePremium(int53 user_id_);
+
+ static const std::int32_t ID = 972011;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class prepaidPremiumGiveaway;
+
+class chatBoostStatus final : public Object {
+ public:
+ string boost_url_;
+ array applied_slot_ids_;
+ int32 level_;
+ int32 gift_code_boost_count_;
+ int32 boost_count_;
+ int32 current_level_boost_count_;
+ int32 next_level_boost_count_;
+ int32 premium_member_count_;
+ double premium_member_percentage_;
+ array> prepaid_giveaways_;
+
+ chatBoostStatus();
+
+ chatBoostStatus(string const &boost_url_, array &&applied_slot_ids_, int32 level_, int32 gift_code_boost_count_, int32 boost_count_, int32 current_level_boost_count_, int32 next_level_boost_count_, int32 premium_member_count_, double premium_member_percentage_, array> &&prepaid_giveaways_);
+
+ static const std::int32_t ID = -347168798;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class ChatEventAction;
+
+class MessageSender;
+
class chatEvent final : public Object {
public:
int64 id_;
@@ -2455,6 +2829,24 @@ class chatEvent final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class ChatAvailableReactions;
+
+class ChatMemberStatus;
+
+class MessageSender;
+
+class chatInviteLink;
+
+class chatLocation;
+
+class chatPermissions;
+
+class chatPhoto;
+
+class forumTopicInfo;
+
+class message;
+
class ChatEventAction: public Object {
public:
};
@@ -2479,28 +2871,13 @@ class chatEventMessageEdited final : public ChatEventAction {
class chatEventMessageDeleted final : public ChatEventAction {
public:
object_ptr message_;
+ bool can_report_anti_spam_false_positive_;
chatEventMessageDeleted();
- explicit chatEventMessageDeleted(object_ptr &&message_);
+ chatEventMessageDeleted(object_ptr &&message_, bool can_report_anti_spam_false_positive_);
- static const std::int32_t ID = -892974601;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
-class chatEventPollStopped final : public ChatEventAction {
- public:
- object_ptr message_;
-
- chatEventPollStopped();
-
- explicit chatEventPollStopped(object_ptr &&message_);
-
- static const std::int32_t ID = 2009893861;
+ static const std::int32_t ID = 935316851;
std::int32_t get_id() const final {
return ID;
}
@@ -2540,6 +2917,22 @@ class chatEventMessageUnpinned final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class chatEventPollStopped final : public ChatEventAction {
+ public:
+ object_ptr message_;
+
+ chatEventPollStopped();
+
+ explicit chatEventPollStopped(object_ptr &&message_);
+
+ static const std::int32_t ID = 2009893861;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class chatEventMemberJoined final : public ChatEventAction {
public:
@@ -2556,12 +2949,13 @@ class chatEventMemberJoined final : public ChatEventAction {
class chatEventMemberJoinedByInviteLink final : public ChatEventAction {
public:
object_ptr invite_link_;
+ bool via_chat_folder_invite_link_;
chatEventMemberJoinedByInviteLink();
- explicit chatEventMemberJoinedByInviteLink(object_ptr &&invite_link_);
+ chatEventMemberJoinedByInviteLink(object_ptr &&invite_link_, bool via_chat_folder_invite_link_);
- static const std::int32_t ID = -253307459;
+ static const std::int32_t ID = -1445536390;
std::int32_t get_id() const final {
return ID;
}
@@ -2586,19 +2980,6 @@ class chatEventMemberJoinedByRequest final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
-class chatEventMemberLeft final : public ChatEventAction {
- public:
-
- chatEventMemberLeft();
-
- static const std::int32_t ID = -948420593;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
class chatEventMemberInvited final : public ChatEventAction {
public:
int53 user_id_;
@@ -2616,6 +2997,19 @@ class chatEventMemberInvited final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class chatEventMemberLeft final : public ChatEventAction {
+ public:
+
+ chatEventMemberLeft();
+
+ static const std::int32_t ID = -948420593;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class chatEventMemberPromoted final : public ChatEventAction {
public:
int53 user_id_;
@@ -2652,33 +3046,16 @@ class chatEventMemberRestricted final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
-class chatEventTitleChanged final : public ChatEventAction {
+class chatEventAvailableReactionsChanged final : public ChatEventAction {
public:
- string old_title_;
- string new_title_;
+ object_ptr old_available_reactions_;
+ object_ptr new_available_reactions_;
- chatEventTitleChanged();
+ chatEventAvailableReactionsChanged();
- chatEventTitleChanged(string const &old_title_, string const &new_title_);
+ chatEventAvailableReactionsChanged(object_ptr &&old_available_reactions_, object_ptr &&new_available_reactions_);
- static const std::int32_t ID = 1134103250;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
-class chatEventPermissionsChanged final : public ChatEventAction {
- public:
- object_ptr old_permissions_;
- object_ptr new_permissions_;
-
- chatEventPermissionsChanged();
-
- chatEventPermissionsChanged(object_ptr &&old_permissions_, object_ptr &&new_permissions_);
-
- static const std::int32_t ID = -1311557720;
+ static const std::int32_t ID = -1749491521;
std::int32_t get_id() const final {
return ID;
}
@@ -2703,56 +3080,6 @@ class chatEventDescriptionChanged final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
-class chatEventUsernameChanged final : public ChatEventAction {
- public:
- string old_username_;
- string new_username_;
-
- chatEventUsernameChanged();
-
- chatEventUsernameChanged(string const &old_username_, string const &new_username_);
-
- static const std::int32_t ID = 1728558443;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
-class chatEventPhotoChanged final : public ChatEventAction {
- public:
- object_ptr old_photo_;
- object_ptr new_photo_;
-
- chatEventPhotoChanged();
-
- chatEventPhotoChanged(object_ptr &&old_photo_, object_ptr &&new_photo_);
-
- static const std::int32_t ID = -811572541;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
-class chatEventInvitesToggled final : public ChatEventAction {
- public:
- bool can_invite_users_;
-
- chatEventInvitesToggled();
-
- explicit chatEventInvitesToggled(bool can_invite_users_);
-
- static const std::int32_t ID = -62548373;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
class chatEventLinkedChatChanged final : public ChatEventAction {
public:
int53 old_linked_chat_id_;
@@ -2770,89 +3097,6 @@ class chatEventLinkedChatChanged final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
-class chatEventSlowModeDelayChanged final : public ChatEventAction {
- public:
- int32 old_slow_mode_delay_;
- int32 new_slow_mode_delay_;
-
- chatEventSlowModeDelayChanged();
-
- chatEventSlowModeDelayChanged(int32 old_slow_mode_delay_, int32 new_slow_mode_delay_);
-
- static const std::int32_t ID = -1653195765;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
-class chatEventMessageTtlChanged final : public ChatEventAction {
- public:
- int32 old_message_ttl_;
- int32 new_message_ttl_;
-
- chatEventMessageTtlChanged();
-
- chatEventMessageTtlChanged(int32 old_message_ttl_, int32 new_message_ttl_);
-
- static const std::int32_t ID = 776386995;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
-class chatEventSignMessagesToggled final : public ChatEventAction {
- public:
- bool sign_messages_;
-
- chatEventSignMessagesToggled();
-
- explicit chatEventSignMessagesToggled(bool sign_messages_);
-
- static const std::int32_t ID = -1313265634;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
-class chatEventHasProtectedContentToggled final : public ChatEventAction {
- public:
- bool has_protected_content_;
-
- chatEventHasProtectedContentToggled();
-
- explicit chatEventHasProtectedContentToggled(bool has_protected_content_);
-
- static const std::int32_t ID = -184270335;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
-class chatEventStickerSetChanged final : public ChatEventAction {
- public:
- int64 old_sticker_set_id_;
- int64 new_sticker_set_id_;
-
- chatEventStickerSetChanged();
-
- chatEventStickerSetChanged(int64 old_sticker_set_id_, int64 new_sticker_set_id_);
-
- static const std::int32_t ID = -1243130481;
- std::int32_t get_id() const final {
- return ID;
- }
-
- void store(TlStorerToString &s, const char *field_name) const final;
-};
-
class chatEventLocationChanged final : public ChatEventAction {
public:
object_ptr old_location_;
@@ -2870,6 +3114,208 @@ class chatEventLocationChanged final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class chatEventMessageAutoDeleteTimeChanged final : public ChatEventAction {
+ public:
+ int32 old_message_auto_delete_time_;
+ int32 new_message_auto_delete_time_;
+
+ chatEventMessageAutoDeleteTimeChanged();
+
+ chatEventMessageAutoDeleteTimeChanged(int32 old_message_auto_delete_time_, int32 new_message_auto_delete_time_);
+
+ static const std::int32_t ID = 17317668;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventPermissionsChanged final : public ChatEventAction {
+ public:
+ object_ptr old_permissions_;
+ object_ptr new_permissions_;
+
+ chatEventPermissionsChanged();
+
+ chatEventPermissionsChanged(object_ptr &&old_permissions_, object_ptr &&new_permissions_);
+
+ static const std::int32_t ID = -1311557720;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventPhotoChanged final : public ChatEventAction {
+ public:
+ object_ptr old_photo_;
+ object_ptr new_photo_;
+
+ chatEventPhotoChanged();
+
+ chatEventPhotoChanged(object_ptr &&old_photo_, object_ptr &&new_photo_);
+
+ static const std::int32_t ID = -811572541;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventSlowModeDelayChanged final : public ChatEventAction {
+ public:
+ int32 old_slow_mode_delay_;
+ int32 new_slow_mode_delay_;
+
+ chatEventSlowModeDelayChanged();
+
+ chatEventSlowModeDelayChanged(int32 old_slow_mode_delay_, int32 new_slow_mode_delay_);
+
+ static const std::int32_t ID = -1653195765;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventStickerSetChanged final : public ChatEventAction {
+ public:
+ int64 old_sticker_set_id_;
+ int64 new_sticker_set_id_;
+
+ chatEventStickerSetChanged();
+
+ chatEventStickerSetChanged(int64 old_sticker_set_id_, int64 new_sticker_set_id_);
+
+ static const std::int32_t ID = -1243130481;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventTitleChanged final : public ChatEventAction {
+ public:
+ string old_title_;
+ string new_title_;
+
+ chatEventTitleChanged();
+
+ chatEventTitleChanged(string const &old_title_, string const &new_title_);
+
+ static const std::int32_t ID = 1134103250;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventUsernameChanged final : public ChatEventAction {
+ public:
+ string old_username_;
+ string new_username_;
+
+ chatEventUsernameChanged();
+
+ chatEventUsernameChanged(string const &old_username_, string const &new_username_);
+
+ static const std::int32_t ID = 1728558443;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventActiveUsernamesChanged final : public ChatEventAction {
+ public:
+ array old_usernames_;
+ array new_usernames_;
+
+ chatEventActiveUsernamesChanged();
+
+ chatEventActiveUsernamesChanged(array &&old_usernames_, array &&new_usernames_);
+
+ static const std::int32_t ID = -1508790810;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventAccentColorChanged final : public ChatEventAction {
+ public:
+ int32 old_accent_color_id_;
+ int32 new_accent_color_id_;
+
+ chatEventAccentColorChanged();
+
+ chatEventAccentColorChanged(int32 old_accent_color_id_, int32 new_accent_color_id_);
+
+ static const std::int32_t ID = 707952178;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventBackgroundCustomEmojiChanged final : public ChatEventAction {
+ public:
+ int64 old_background_custom_emoji_id_;
+ int64 new_background_custom_emoji_id_;
+
+ chatEventBackgroundCustomEmojiChanged();
+
+ chatEventBackgroundCustomEmojiChanged(int64 old_background_custom_emoji_id_, int64 new_background_custom_emoji_id_);
+
+ static const std::int32_t ID = -764993894;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventHasProtectedContentToggled final : public ChatEventAction {
+ public:
+ bool has_protected_content_;
+
+ chatEventHasProtectedContentToggled();
+
+ explicit chatEventHasProtectedContentToggled(bool has_protected_content_);
+
+ static const std::int32_t ID = -184270335;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventInvitesToggled final : public ChatEventAction {
+ public:
+ bool can_invite_users_;
+
+ chatEventInvitesToggled();
+
+ explicit chatEventInvitesToggled(bool can_invite_users_);
+
+ static const std::int32_t ID = -62548373;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class chatEventIsAllHistoryAvailableToggled final : public ChatEventAction {
public:
bool is_all_history_available_;
@@ -2886,6 +3332,38 @@ class chatEventIsAllHistoryAvailableToggled final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class chatEventHasAggressiveAntiSpamEnabledToggled final : public ChatEventAction {
+ public:
+ bool has_aggressive_anti_spam_enabled_;
+
+ chatEventHasAggressiveAntiSpamEnabledToggled();
+
+ explicit chatEventHasAggressiveAntiSpamEnabledToggled(bool has_aggressive_anti_spam_enabled_);
+
+ static const std::int32_t ID = -125348094;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventSignMessagesToggled final : public ChatEventAction {
+ public:
+ bool sign_messages_;
+
+ chatEventSignMessagesToggled();
+
+ explicit chatEventSignMessagesToggled(bool sign_messages_);
+
+ static const std::int32_t ID = -1313265634;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class chatEventInviteLinkEdited final : public ChatEventAction {
public:
object_ptr old_invite_link_;
@@ -2967,6 +3445,22 @@ class chatEventVideoChatEnded final : public ChatEventAction {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class chatEventVideoChatMuteNewParticipantsToggled final : public ChatEventAction {
+ public:
+ bool mute_new_participants_;
+
+ chatEventVideoChatMuteNewParticipantsToggled();
+
+ explicit chatEventVideoChatMuteNewParticipantsToggled(bool mute_new_participants_);
+
+ static const std::int32_t ID = -126547970;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
class chatEventVideoChatParticipantIsMutedToggled final : public ChatEventAction {
public:
object_ptr participant_id_;
@@ -3001,15 +3495,113 @@ class chatEventVideoChatParticipantVolumeLevelChanged final : public ChatEventAc
void store(TlStorerToString &s, const char *field_name) const final;
};
-class chatEventVideoChatMuteNewParticipantsToggled final : public ChatEventAction {
+class chatEventIsForumToggled final : public ChatEventAction {
public:
- bool mute_new_participants_;
+ bool is_forum_;
- chatEventVideoChatMuteNewParticipantsToggled();
+ chatEventIsForumToggled();
- explicit chatEventVideoChatMuteNewParticipantsToggled(bool mute_new_participants_);
+ explicit chatEventIsForumToggled(bool is_forum_);
- static const std::int32_t ID = -126547970;
+ static const std::int32_t ID = 1516491033;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventForumTopicCreated final : public ChatEventAction {
+ public:
+ object_ptr topic_info_;
+
+ chatEventForumTopicCreated();
+
+ explicit chatEventForumTopicCreated(object_ptr &&topic_info_);
+
+ static const std::int32_t ID = 2005269314;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventForumTopicEdited final : public ChatEventAction {
+ public:
+ object_ptr old_topic_info_;
+ object_ptr new_topic_info_;
+
+ chatEventForumTopicEdited();
+
+ chatEventForumTopicEdited(object_ptr &&old_topic_info_, object_ptr &&new_topic_info_);
+
+ static const std::int32_t ID = 1624910860;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventForumTopicToggleIsClosed final : public ChatEventAction {
+ public:
+ object_ptr topic_info_;
+
+ chatEventForumTopicToggleIsClosed();
+
+ explicit chatEventForumTopicToggleIsClosed(object_ptr &&topic_info_);
+
+ static const std::int32_t ID = -962704070;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventForumTopicToggleIsHidden final : public ChatEventAction {
+ public:
+ object_ptr topic_info_;
+
+ chatEventForumTopicToggleIsHidden();
+
+ explicit chatEventForumTopicToggleIsHidden(object_ptr &&topic_info_);
+
+ static const std::int32_t ID = -1609175250;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventForumTopicDeleted final : public ChatEventAction {
+ public:
+ object_ptr topic_info_;
+
+ chatEventForumTopicDeleted();
+
+ explicit chatEventForumTopicDeleted(object_ptr &&topic_info_);
+
+ static const std::int32_t ID = -1332795123;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatEventForumTopicPinned final : public ChatEventAction {
+ public:
+ object_ptr old_topic_info_;
+ object_ptr new_topic_info_;
+
+ chatEventForumTopicPinned();
+
+ chatEventForumTopicPinned(object_ptr &&old_topic_info_, object_ptr &&new_topic_info_);
+
+ static const std::int32_t ID = 2143626222;
std::int32_t get_id() const final {
return ID;
}
@@ -3031,12 +3623,13 @@ class chatEventLogFilters final : public Object {
bool setting_changes_;
bool invite_link_changes_;
bool video_chat_changes_;
+ bool forum_changes_;
chatEventLogFilters();
- chatEventLogFilters(bool message_edits_, bool message_deletions_, bool message_pins_, bool member_joins_, bool member_leaves_, bool member_invites_, bool member_promotions_, bool member_restrictions_, bool info_changes_, bool setting_changes_, bool invite_link_changes_, bool video_chat_changes_);
+ chatEventLogFilters(bool message_edits_, bool message_deletions_, bool message_pins_, bool member_joins_, bool member_leaves_, bool member_invites_, bool member_promotions_, bool member_restrictions_, bool info_changes_, bool setting_changes_, bool invite_link_changes_, bool video_chat_changes_, bool forum_changes_);
- static const std::int32_t ID = 1251197299;
+ static const std::int32_t ID = 1648261677;
std::int32_t get_id() const final {
return ID;
}
@@ -3044,6 +3637,8 @@ class chatEventLogFilters final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class chatEvent;
+
class chatEvents final : public Object {
public:
array> events_;
@@ -3060,10 +3655,13 @@ class chatEvents final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
-class chatFilter final : public Object {
+class chatFolderIcon;
+
+class chatFolder final : public Object {
public:
string title_;
- string icon_name_;
+ object_ptr icon_;
+ bool is_shareable_;
array pinned_chat_ids_;
array included_chat_ids_;
array excluded_chat_ids_;
@@ -3076,11 +3674,11 @@ class chatFilter final : public Object {
bool include_groups_;
bool include_channels_;
- chatFilter();
+ chatFolder();
- chatFilter(string const &title_, string const &icon_name_, array &&pinned_chat_ids_, array &&included_chat_ids_, array &&excluded_chat_ids_, bool exclude_muted_, bool exclude_read_, bool exclude_archived_, bool include_contacts_, bool include_non_contacts_, bool include_bots_, bool include_groups_, bool include_channels_);
+ chatFolder(string const &title_, object_ptr &&icon_, bool is_shareable_, array &&pinned_chat_ids_, array &&included_chat_ids_, array &&excluded_chat_ids_, bool exclude_muted_, bool exclude_read_, bool exclude_archived_, bool include_contacts_, bool include_non_contacts_, bool include_bots_, bool include_groups_, bool include_channels_);
- static const std::int32_t ID = -664815123;
+ static const std::int32_t ID = -459081051;
std::int32_t get_id() const final {
return ID;
}
@@ -3088,17 +3686,93 @@ class chatFilter final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
-class chatFilterInfo final : public Object {
+class chatFolderIcon final : public Object {
+ public:
+ string name_;
+
+ chatFolderIcon();
+
+ explicit chatFolderIcon(string const &name_);
+
+ static const std::int32_t ID = -146104090;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatFolderIcon;
+
+class chatFolderInfo final : public Object {
public:
int32 id_;
string title_;
- string icon_name_;
+ object_ptr icon_;
+ bool is_shareable_;
+ bool has_my_invite_links_;
- chatFilterInfo();
+ chatFolderInfo();
- chatFilterInfo(int32 id_, string const &title_, string const &icon_name_);
+ chatFolderInfo(int32 id_, string const &title_, object_ptr &&icon_, bool is_shareable_, bool has_my_invite_links_);
- static const std::int32_t ID = -943721165;
+ static const std::int32_t ID = 1279189204;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatFolderInviteLink final : public Object {
+ public:
+ string invite_link_;
+ string name_;
+ array chat_ids_;
+
+ chatFolderInviteLink();
+
+ chatFolderInviteLink(string const &invite_link_, string const &name_, array &&chat_ids_);
+
+ static const std::int32_t ID = 493969661;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatFolderInfo;
+
+class chatFolderInviteLinkInfo final : public Object {
+ public:
+ object_ptr chat_folder_info_;
+ array missing_chat_ids_;
+ array added_chat_ids_;
+
+ chatFolderInviteLinkInfo();
+
+ chatFolderInviteLinkInfo(object_ptr &&chat_folder_info_, array &&missing_chat_ids_, array &&added_chat_ids_);
+
+ static const std::int32_t ID = 1119450395;
+ std::int32_t get_id() const final {
+ return ID;
+ }
+
+ void store(TlStorerToString &s, const char *field_name) const final;
+};
+
+class chatFolderInviteLink;
+
+class chatFolderInviteLinks final : public Object {
+ public:
+ array> invite_links_;
+
+ chatFolderInviteLinks();
+
+ explicit chatFolderInviteLinks(array> &&invite_links_);
+
+ static const std::int32_t ID = 1853351525;
std::int32_t get_id() const final {
return ID;
}
@@ -3151,6 +3825,8 @@ class chatInviteLinkCount final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class chatInviteLinkCount;
+
class chatInviteLinkCounts final : public Object {
public:
array> invite_link_counts_;
@@ -3167,24 +3843,32 @@ class chatInviteLinkCounts final : public Object {
void store(TlStorerToString &s, const char *field_name) const final;
};
+class InviteLinkChatType;
+
+class chatPhotoInfo;
+
class chatInviteLinkInfo final : public Object {
public:
int53 chat_id_;
int32 accessible_for_;
- object_ptr type_;
+ object_ptr type_;
string title_;
object_ptr photo_;
+ int32 accent_color_id_;
string description_;
int32 member_count_;
array member_user_ids_;
bool creates_join_request_;
bool is_public_;
+ bool is_verified_;
+ bool is_scam_;
+ bool is_fake_;
chatInviteLinkInfo();
- chatInviteLinkInfo(int53 chat_id_, int32 accessible_for_, object_ptr &&type_, string const &title_, object_ptr