diff --git a/src/components/buttonMenu.ts b/src/components/buttonMenu.ts
index 1f7e208c..319839e6 100644
--- a/src/components/buttonMenu.ts
+++ b/src/components/buttonMenu.ts
@@ -19,9 +19,8 @@ const ButtonMenuItem = (options: ButtonMenuItemOptions) => {
const {icon, text, onClick} = options;
const el = document.createElement('div');
el.className = 'btn-menu-item tgico-' + icon;
- el.append(i18n(text));
-
ripple(el);
+ el.append(i18n(text));
// * cancel keyboard close
attachClickEvent(el, CLICK_EVENT_NAME !== 'click' ? (e) => {
@@ -54,4 +53,4 @@ const ButtonMenu = (buttons: ButtonMenuItemOptions[], listenerSetter?: ListenerS
return el;
};
-export default ButtonMenu;
\ No newline at end of file
+export default ButtonMenu;
diff --git a/src/components/chat/bubbles.ts b/src/components/chat/bubbles.ts
index 513e2884..1b4188de 100644
--- a/src/components/chat/bubbles.ts
+++ b/src/components/chat/bubbles.ts
@@ -811,7 +811,7 @@ export default class ChatBubbles {
if(['IMG', 'DIV', "AVATAR-ELEMENT", 'SPAN'/* , 'A' */].indexOf(target.tagName) === -1) target = findUpTag(target, 'DIV');
- if(['DIV', 'SPAN'].indexOf(target.tagName) !== -1/* || target.tagName === 'A' */) {
+ if(['DIV', 'SPAN', 'AVATAR-ELEMENT'].indexOf(target.tagName) !== -1/* || target.tagName === 'A' */) {
if(target.classList.contains('goto-original')) {
const savedFrom = bubble.dataset.savedFrom;
const splitted = savedFrom.split('_');
@@ -2420,7 +2420,7 @@ export default class ChatBubbles {
} else {
/* const fromTitle = message.fromId === this.myID || appPeersManager.isBroadcast(message.fwdFromId || message.fromId) ? '' : `
${appPeersManager.getPeerTitle(message.fromId)}
`;
nameDiv.innerHTML = fromTitle + 'Forwarded from ' + title; */
- nameDiv.append('Forwarded from ', title);
+ nameDiv.append(i18n('ForwardedFrom', [title]));
if(savedFrom) {
nameDiv.dataset.savedFrom = savedFrom;
diff --git a/src/components/checkboxField.ts b/src/components/checkboxField.ts
index 81c5b067..c6179c9b 100644
--- a/src/components/checkboxField.ts
+++ b/src/components/checkboxField.ts
@@ -3,21 +3,23 @@ import { getDeepProperty } from "../helpers/object";
import { ripple } from "./ripple";
import { LangPackKey, _i18n } from "../lib/langPack";
+export type CheckboxFieldOptions = {
+ text?: LangPackKey,
+ textArgs?: any[],
+ name?: string,
+ round?: boolean,
+ stateKey?: string,
+ disabled?: boolean,
+ checked?: boolean,
+ restriction?: boolean,
+ withRipple?: boolean
+};
export default class CheckboxField {
public input: HTMLInputElement;
public label: HTMLLabelElement;
public span: HTMLSpanElement;
- constructor(options: {
- text?: LangPackKey,
- name?: string,
- round?: boolean,
- stateKey?: string,
- disabled?: boolean,
- checked?: boolean,
- restriction?: boolean,
- withRipple?: boolean
- } = {}) {
+ constructor(options: CheckboxFieldOptions = {}) {
const label = this.label = document.createElement('label');
label.classList.add('checkbox-field');
@@ -57,7 +59,7 @@ export default class CheckboxField {
if(options.text) {
span = this.span = document.createElement('span');
span.classList.add('checkbox-caption');
- _i18n(span, options.text);
+ _i18n(span, options.text, options.textArgs);
} else {
label.classList.add('checkbox-without-caption');
}
diff --git a/src/components/dialogsContextMenu.ts b/src/components/dialogsContextMenu.ts
index 9e513f35..17912225 100644
--- a/src/components/dialogsContextMenu.ts
+++ b/src/components/dialogsContextMenu.ts
@@ -6,6 +6,7 @@ import { findUpTag } from "../helpers/dom";
import { positionMenu, openBtnMenu } from "./misc";
import ButtonMenu, { ButtonMenuItemOptions } from "./buttonMenu";
import PopupDeleteDialog from "./popups/deleteDialog";
+import { i18n } from "../lib/langPack";
export default class DialogsContextMenu {
private element: HTMLElement;
@@ -150,7 +151,7 @@ export default class DialogsContextMenu {
});
// delete button
- this.buttons[this.buttons.length - 1].element.firstChild.nodeValue = appPeersManager.getDeleteButtonText(this.selectedId);
+ this.buttons[this.buttons.length - 1].element.lastChild.replaceWith(i18n(appPeersManager.getDeleteButtonText(this.selectedId)));
li.classList.add('menu-open');
positionMenu(e, this.element);
@@ -159,4 +160,4 @@ export default class DialogsContextMenu {
this.selectedId = this.dialog = this.filterId = undefined;
});
};
-}
\ No newline at end of file
+}
diff --git a/src/components/emoticonsDropdown/tabs/stickers.ts b/src/components/emoticonsDropdown/tabs/stickers.ts
index a9f46f92..3922a164 100644
--- a/src/components/emoticonsDropdown/tabs/stickers.ts
+++ b/src/components/emoticonsDropdown/tabs/stickers.ts
@@ -200,7 +200,7 @@ export default class StickersTab implements EmoticonsTab {
//console.log('got stickerSet', stickerSet, li);
- if(stickerSet.set.thumb) {
+ if(stickerSet.set.thumbs?.length) {
const downloadOptions = appStickersManager.getStickerSetThumbDownloadOptions(stickerSet.set);
const promise = appDownloadManager.download(downloadOptions);
diff --git a/src/components/popups/avatar.ts b/src/components/popups/avatar.ts
index 227b1ea7..4abcf243 100644
--- a/src/components/popups/avatar.ts
+++ b/src/components/popups/avatar.ts
@@ -2,6 +2,7 @@ import appDownloadManager from "../../lib/appManagers/appDownloadManager";
import resizeableImage from "../../lib/cropper";
import PopupElement from ".";
import { ripple } from "../ripple";
+import { _i18n } from "../../lib/langPack";
export default class PopupAvatar extends PopupElement {
private cropContainer: HTMLElement;
@@ -24,7 +25,7 @@ export default class PopupAvatar extends PopupElement {
super('popup-avatar', null, {closable: true});
this.h6 = document.createElement('h6');
- this.h6.innerText = 'Drag to Reposition';
+ _i18n(this.h6, 'Popup.Avatar.Title');
this.btnClose.classList.remove('btn-icon');
diff --git a/src/components/popups/confirmAction.ts b/src/components/popups/confirmAction.ts
deleted file mode 100644
index 5c645132..00000000
--- a/src/components/popups/confirmAction.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import PopupElement, { addCancelButton, PopupButton, PopupOptions } from ".";
-import { LangPackKey, _i18n } from "../../lib/langPack";
-
-export default class PopupConfirmAction extends PopupElement {
- constructor(className: string, buttons: PopupButton[], options: PopupOptions & {title: LangPackKey, text: LangPackKey}) {
- super('popup-peer popup-confirm-action ' + className, addCancelButton(buttons), {
- overlayClosable: true,
- ...options
- });
-
- _i18n(this.title, options.title);
-
- const p = document.createElement('p');
- p.classList.add('popup-description');
- _i18n(p, options.text);
-
- this.container.insertBefore(p, this.header.nextElementSibling);
- }
-}
diff --git a/src/components/popups/datePicker.ts b/src/components/popups/datePicker.ts
index 51e71570..86c548b9 100644
--- a/src/components/popups/datePicker.ts
+++ b/src/components/popups/datePicker.ts
@@ -1,7 +1,7 @@
import PopupElement, { PopupOptions } from ".";
import { getFullDate } from "../../helpers/date";
import mediaSizes from "../../helpers/mediaSizes";
-import I18n from "../../lib/langPack";
+import I18n, { i18n, LangPackKey } from "../../lib/langPack";
import InputField from "../inputField";
export default class PopupDatePicker extends PopupElement {
@@ -237,23 +237,47 @@ export default class PopupDatePicker extends PopupElement {
public setTimeTitle() {
if(this.btnConfirm && this.selectedDate) {
- let dayStr = '';
+ let key: LangPackKey, args: any[] = [];
const date = new Date();
date.setHours(0, 0, 0, 0);
+ const timeOptions: Intl.DateTimeFormatOptions = {
+ minute: '2-digit',
+ hour: '2-digit',
+ hour12: false
+ };
+
+ const sendDate = new Date(this.selectedDate.getTime());
+ sendDate.setHours(+this.hoursInputField.value, +this.minutesInputField.value);
+
if(this.selectedDate.getTime() === date.getTime()) {
- dayStr = 'Today';
- } else if(this.selectedDate.getTime() === (date.getTime() + 86400e3)) {
+ key = 'Schedule.SendToday';
+ }/* else if(this.selectedDate.getTime() === (date.getTime() + 86400e3)) {
dayStr = 'Tomorrow';
- } else {
- dayStr = 'on ' + getFullDate(this.selectedDate, {
- noTime: true,
- monthAsNumber: true,
- leadingZero: true
- });
+ } */ else {
+ key = 'Schedule.SendDate';
+
+ const dateOptions: Intl.DateTimeFormatOptions = {
+ month: 'short',
+ day: 'numeric'
+ };
+
+ if(sendDate.getFullYear() !== date.getFullYear()) {
+ dateOptions.year = 'numeric';
+ }
+
+ args.push(new I18n.IntlDateElement({
+ date: sendDate,
+ options: dateOptions
+ }).element);
}
- this.btnConfirm.firstChild.nodeValue = 'Send ' + dayStr + ' at ' + ('00' + this.hoursInputField.value).slice(-2) + ':' + ('00' + this.minutesInputField.value).slice(-2);
+ args.push(new I18n.IntlDateElement({
+ date: sendDate,
+ options: timeOptions
+ }).element);
+
+ this.btnConfirm.firstChild.replaceWith(i18n(key, args));
}
}
diff --git a/src/components/popups/deleteDialog.ts b/src/components/popups/deleteDialog.ts
index c6362567..208892bf 100644
--- a/src/components/popups/deleteDialog.ts
+++ b/src/components/popups/deleteDialog.ts
@@ -1,28 +1,51 @@
-import { PopupButton } from ".";
import appChatsManager from "../../lib/appManagers/appChatsManager";
import appMessagesManager from "../../lib/appManagers/appMessagesManager";
import appPeersManager, { PeerType } from "../../lib/appManagers/appPeersManager";
-import PopupPeer from "./peer";
+import { LangPackKey } from "../../lib/langPack";
+import PeerTitle from "../peerTitle";
+import PopupPeer, { PopupPeerButtonCallbackCheckboxes, PopupPeerOptions } from "./peer";
export default class PopupDeleteDialog {
- constructor(peerId: number, peerType: PeerType = appPeersManager.getDialogType(peerId)) {
- let firstName = appPeersManager.getPeerTitle(peerId, false, true);
+ constructor(peerId: number, peerType: PeerType = appPeersManager.getDialogType(peerId), onSelect?: (promise: Promise) => void) {
+ const peerTitleElement = new PeerTitle({
+ peerId,
+ onlyFirstName: true
+ }).element;
+
+ /* const callbackFlush = (checked: PopupPeerButtonCallbackCheckboxes) => {
+ const promise = appMessagesManager.flushHistory(peerId, checkboxes ? !checked[checkboxes[0].text] : undefined);
+ onSelect && onSelect(promise);
+ }; */
- let callbackFlush = (justClear?: true) => {
- appMessagesManager.flushHistory(peerId, justClear);
+ const callbackLeave = (checked: PopupPeerButtonCallbackCheckboxes) => {
+ const promise = appChatsManager.leave(-peerId);
+ onSelect && onSelect(promise);
};
- let callbackLeave = () => {
- appChatsManager.leave(-peerId);
+ const callbackDelete = (checked: PopupPeerButtonCallbackCheckboxes) => {
+ let promise: Promise;
+
+ if(peerId > 0) {
+ promise = appMessagesManager.flushHistory(peerId, false, checkboxes ? checked[checkboxes[0].text] : undefined);
+ } else {
+ if(checked[checkboxes[0].text]) {
+ promise = appChatsManager.delete(-peerId);
+ } else {
+ promise = appChatsManager.leave(-peerId);
+ }
+ }
+
+ onSelect && onSelect(promise);
};
- let title: string, description: string, buttons: PopupButton[];
+ let title: LangPackKey, description: LangPackKey, descriptionArgs: any[], buttons: PopupPeerOptions['buttons'], checkboxes: PopupPeerOptions['checkboxes'];
switch(peerType) {
case 'channel': {
- title = 'Leave Channel?';
- description = `Are you sure you want to leave this channel?`;
+ title = 'LeaveChannelMenu';
+ description = 'ChannelLeaveAlertWithName';
+ descriptionArgs = [peerTitleElement];
buttons = [{
- text: 'LEAVE ' + firstName,
+ langKey: 'LeaveChannel',
isDanger: true,
callback: callbackLeave
}];
@@ -30,71 +53,90 @@ export default class PopupDeleteDialog {
break;
}
- case 'megagroup': {
+ /* case 'megagroup': {
title = 'Leave Group?';
description = `Are you sure you want to leave this group?`;
buttons = [{
- text: 'LEAVE ' + firstName,
+ text: 'LEAVE ' + peerTitleElement,
isDanger: true,
callback: callbackLeave
}];
break;
- }
+ } */
case 'chat': {
- title = 'Delete Chat?';
- description = `Are you sure you want to delete chat with ${firstName}?`;
+ title = 'DeleteChatUser';
+ description = 'AreYouSureDeleteThisChatWithUser';
+ descriptionArgs = [peerTitleElement];
+
+ checkboxes = [{
+ text: 'DeleteMessagesOptionAlso',
+ textArgs: [
+ new PeerTitle({
+ peerId,
+ onlyFirstName: true
+ }).element
+ ]
+ }];
+
buttons = [{
- text: 'DELETE FOR ME AND ' + firstName,
+ langKey: 'DeleteChatUser',
isDanger: true,
- callback: () => callbackFlush()
- }, {
- text: 'DELETE JUST FOR ME',
- isDanger: true,
- callback: () => callbackFlush(true)
+ callback: callbackDelete
}];
break;
}
case 'saved': {
- title = 'Delete Saved Messages?';
- description = `Are you sure you want to delete all your saved messages?`;
+ title = 'DeleteChatUser';
+ description = 'AreYouSureDeleteThisChatSavedMessages';
buttons = [{
- text: 'DELETE SAVED MESSAGES',
+ langKey: 'DeleteChatUser',
isDanger: true,
- callback: () => callbackFlush()
+ callback: callbackDelete
}];
break;
}
+ case 'megagroup':
case 'group': {
- title = 'Delete and leave Group?';
- description = `Are you sure you want to delete all message history and leave ${firstName}?`;
- buttons = [{
- text: 'DELETE AND LEAVE ' + firstName,
- isDanger: true,
- callback: () => callbackLeave()
- }];
+ if(appChatsManager.hasRights(-peerId, 'delete_chat')) {
+ title = 'DeleteMegaMenu';
+ description = 'AreYouSureDeleteAndExit';
+ buttons = [{
+ langKey: 'DeleteMegaMenu',
+ isDanger: true,
+ callback: callbackDelete
+ }];
+
+ checkboxes = [{
+ text: 'DeleteChat.DeleteGroupForAll'
+ }];
+ } else {
+ title = 'LeaveMegaMenu';
+ description = 'AreYouSureDeleteAndExitName';
+ descriptionArgs = [peerTitleElement];
+ buttons = [{
+ langKey: 'DeleteChatUser',
+ isDanger: true,
+ callback: callbackLeave
+ }];
+ }
break;
}
}
- buttons.push({
- text: 'CANCEL',
- isCancel: true
- });
-
- let popup = new PopupPeer('popup-delete-chat', {
+ new PopupPeer('popup-delete-chat', {
peerId,
- title,
- description,
- buttons
- });
-
- popup.show();
+ titleLangKey: title,
+ descriptionLangKey: description,
+ descriptionLangArgs: descriptionArgs,
+ buttons,
+ checkboxes
+ }).show();
}
-}
\ No newline at end of file
+}
diff --git a/src/components/popups/deleteMessages.ts b/src/components/popups/deleteMessages.ts
index 41d8268b..eda85b30 100644
--- a/src/components/popups/deleteMessages.ts
+++ b/src/components/popups/deleteMessages.ts
@@ -1,14 +1,18 @@
import appChatsManager from "../../lib/appManagers/appChatsManager";
import appMessagesManager from "../../lib/appManagers/appMessagesManager";
-import appPeersManager from "../../lib/appManagers/appPeersManager";
import rootScope from "../../lib/rootScope";
-import { PopupButton } from ".";
+import { addCancelButton, PopupButton } from ".";
import PopupPeer from "./peer";
import { ChatType } from "../chat/chat";
+import { i18n, LangPackKey } from "../../lib/langPack";
+import PeerTitle from "../peerTitle";
export default class PopupDeleteMessages {
constructor(peerId: number, mids: number[], type: ChatType, onConfirm?: () => void) {
- const firstName = appPeersManager.getPeerTitle(peerId, false, true);
+ const peerTitleElement = new PeerTitle({
+ peerId,
+ onlyFirstName: true
+ }).element;
mids = mids.slice();
const callback = (revoke?: true) => {
@@ -20,26 +24,29 @@ export default class PopupDeleteMessages {
}
};
- let title: string, description: string, buttons: PopupButton[];
- title = `Delete ${mids.length === 1 ? '' : mids.length + ' '}Message${mids.length === 1 ? '' : 's'}?`;
- description = `Are you sure you want to delete ${mids.length === 1 ? 'this message' : 'these messages'}?`;
+ let title: LangPackKey, titleArgs: any[], description: LangPackKey, descriptionArgs: any[], buttons: PopupButton[];
+ if(mids.length === 1) {
+ title = 'DeleteSingleMessagesTitle';
+ } else {
+ title = 'DeleteMessagesTitle';
+ titleArgs = [i18n('messages', [mids.length])];
+ }
+
+ description = mids.length === 1 ? 'AreYouSureDeleteSingleMessage' : 'AreYouSureDeleteFewMessages';
+
+ buttons = [{
+ langKey: 'Delete',
+ isDanger: true,
+ callback: () => callback()
+ }];
if(peerId === rootScope.myId || type === 'scheduled') {
- buttons = [{
- text: 'DELETE',
- isDanger: true,
- callback: () => callback()
- }];
+
} else {
- buttons = [{
- text: 'DELETE JUST FOR ME',
- isDanger: true,
- callback: () => callback()
- }];
-
if(peerId > 0) {
buttons.push({
- text: 'DELETE FOR ME AND ' + firstName,
+ langKey: 'DeleteMessagesOptionAlso',
+ langArgs: [peerTitleElement],
isDanger: true,
callback: () => callback(true)
});
@@ -56,47 +63,39 @@ export default class PopupDeleteMessages {
if(canRevoke.length) {
if(canRevoke.length === mids.length) {
buttons.push({
- text: 'DELETE FOR ALL',
+ langKey: 'DeleteForAll',
isDanger: true,
callback: () => callback(true)
});
} else {
- const buttonText = 'Unsend my and delete';
buttons.push({
- text: buttonText,
+ langKey: 'DeleteMessagesOption',
isDanger: true,
callback: () => callback(true)
});
-
- description = `You can also delete the ${canRevoke.length} message${canRevoke.length > 1 ? 's' : ''} you sent from the inboxes of other group members by pressing "${buttonText}".`;
+
+ description = 'DeleteMessagesTextGroup';
+ descriptionArgs = [i18n('messages', [canRevoke.length])];
+ //description = `You can also delete the ${canRevoke.length} message${canRevoke.length > 1 ? 's' : ''} you sent from the inboxes of other group members by pressing "${buttonText}".`;
}
}
} else {
- //if(!hasRights || appChatsManager.isBroadcast(-peerId) || appChatsManager.isMegagroup(-peerId)) {
- buttons.shift();
- //}
-
- buttons.push({
- text: 'DELETE FOR ALL',
- isDanger: true,
- callback: () => callback(true)
- });
+ buttons[0].callback = () => callback(true);
}
}
}
- buttons.push({
- text: 'CANCEL',
- isCancel: true
- });
+ addCancelButton(buttons);
const popup = new PopupPeer('popup-delete-chat', {
peerId,
- title,
- description,
+ titleLangKey: title,
+ titleLangArgs: titleArgs,
+ descriptionLangKey: description,
+ descriptionLangArgs: descriptionArgs,
buttons
});
popup.show();
}
-}
\ No newline at end of file
+}
diff --git a/src/components/popups/index.ts b/src/components/popups/index.ts
index 7240653b..4a7bdf71 100644
--- a/src/components/popups/index.ts
+++ b/src/components/popups/index.ts
@@ -93,13 +93,13 @@ export default class PopupElement {
const button = document.createElement('button');
button.className = 'btn' + (b.isDanger ? ' danger' : ' primary');
+ ripple(button);
+
if(b.text) {
button.innerHTML = b.text;
} else {
button.append(i18n(b.langKey, b.langArgs));
}
-
- ripple(button);
if(b.callback) {
button.addEventListener('click', () => {
diff --git a/src/components/popups/peer.ts b/src/components/popups/peer.ts
index 4decabd4..03481aa8 100644
--- a/src/components/popups/peer.ts
+++ b/src/components/popups/peer.ts
@@ -1,32 +1,67 @@
import AvatarElement from "../avatar";
-import PopupElement, { PopupButton } from ".";
+import PopupElement, { addCancelButton, PopupButton, PopupOptions } from ".";
import { i18n, LangPackKey } from "../../lib/langPack";
+import CheckboxField, { CheckboxFieldOptions } from "../checkboxField";
+export type PopupPeerButtonCallbackCheckboxes = {[text in LangPackKey]: boolean};
+export type PopupPeerButtonCallback = (checkboxes?: PopupPeerButtonCallbackCheckboxes) => void;
+
+export type PopupPeerOptions = PopupOptions & Partial<{
+ peerId: number,
+ title: string,
+ titleLangKey?: LangPackKey,
+ titleLangArgs?: any[],
+ description: string,
+ descriptionLangKey?: LangPackKey,
+ descriptionLangArgs?: any[],
+ buttons: Array & Partial<{callback: PopupPeerButtonCallback}>>,
+ checkboxes: Array
+}>;
export default class PopupPeer extends PopupElement {
- constructor(private className: string, options: Partial<{
- peerId: number,
- title: string,
- titleLangKey?: LangPackKey,
- description: string,
- descriptionLangKey?: LangPackKey,
- buttons: Array
- }> = {}) {
- super('popup-peer' + (className ? ' ' + className : ''), options.buttons, {overlayClosable: true});
-
- let avatarEl = new AvatarElement();
- avatarEl.setAttribute('dialog', '1');
- avatarEl.setAttribute('peer', '' + options.peerId);
- avatarEl.classList.add('avatar-32');
-
- if(options.descriptionLangKey) this.title.append(i18n(options.titleLangKey));
+ constructor(private className: string, options: PopupPeerOptions = {}) {
+ super('popup-peer' + (className ? ' ' + className : ''), addCancelButton(options.buttons), {overlayClosable: true, ...options});
+
+ if(options.peerId) {
+ let avatarEl = new AvatarElement();
+ avatarEl.setAttribute('dialog', '1');
+ avatarEl.setAttribute('peer', '' + options.peerId);
+ avatarEl.classList.add('avatar-32');
+ this.header.prepend(avatarEl);
+ }
+
+ if(options.descriptionLangKey) this.title.append(i18n(options.titleLangKey, options.titleLangArgs));
else this.title.innerText = options.title || '';
- this.header.prepend(avatarEl);
let p = document.createElement('p');
p.classList.add('popup-description');
- if(options.descriptionLangKey) p.append(i18n(options.descriptionLangKey));
+ if(options.descriptionLangKey) p.append(i18n(options.descriptionLangKey, options.descriptionLangArgs));
else p.innerHTML = options.description;
- this.container.insertBefore(p, this.header.nextElementSibling);
+ const fragment = document.createDocumentFragment();
+ fragment.append(p);
+
+ if(options.checkboxes) {
+ options.checkboxes.forEach(o => {
+ o.withRipple = true;
+ const checkboxField = new CheckboxField(o);
+ o.checkboxField = checkboxField;
+ fragment.append(checkboxField.label);
+ });
+
+ options.buttons.forEach(button => {
+ if(button.callback) {
+ const original = button.callback;
+ button.callback = () => {
+ const c: PopupPeerButtonCallbackCheckboxes = {};
+ options.checkboxes.forEach(o => {
+ c[o.text] = o.checkboxField.checked;
+ });
+ original(c);
+ };
+ }
+ });
+ }
+
+ this.container.insertBefore(fragment, this.header.nextElementSibling);
}
}
diff --git a/src/components/popups/unpinMessage.ts b/src/components/popups/unpinMessage.ts
index 0e997f9d..117afbce 100644
--- a/src/components/popups/unpinMessage.ts
+++ b/src/components/popups/unpinMessage.ts
@@ -1,12 +1,15 @@
import appMessagesManager from "../../lib/appManagers/appMessagesManager";
-import { PopupButton } from ".";
+import { addCancelButton, PopupButton } from ".";
import PopupPeer from "./peer";
import appPeersManager from "../../lib/appManagers/appPeersManager";
import rootScope from "../../lib/rootScope";
+import { LangPackKey } from "../../lib/langPack";
+import appChatsManager from "../../lib/appManagers/appChatsManager";
+import PeerTitle from "../peerTitle";
export default class PopupPinMessage {
constructor(peerId: number, mid: number, unpin?: true, onConfirm?: () => void) {
- let title: string, description: string, buttons: PopupButton[] = [];
+ let title: LangPackKey, description: string, buttons: PopupButton[] = [];
const canUnpin = appPeersManager.canPinMessage(peerId);
@@ -29,77 +32,79 @@ export default class PopupPinMessage {
}, 300);
};
- const firstName = appPeersManager.getPeerTitle(peerId, false, true);
-
if(unpin) {
- let buttonText = 'UNPIN';
+ let buttonText: LangPackKey = 'UnpinMessage';
if(!mid) {
if(canUnpin) {
- title = 'Unpin All Messages?';
- description = 'Would you like to unpin all messages?';
+ title = 'Popup.Unpin.AllTitle';
+ description = 'Chat.UnpinAllMessagesConfirmation';
} else {
- title = 'Hide Pinned Messages?';
- description = 'Do you want to hide the pinned message bar? It wil stay hidden until a new message is pinned.';
- buttonText = 'HIDE';
+ title = 'Popup.Unpin.HideTitle';
+ description = 'Popup.Unpin.HideDescription';
+ buttonText = 'Popup.Unpin.Hide';
}
} else {
- title = `Unpin Message?`;
- description = 'Would you like to unpin this message?';
+ title = 'UnpinMessageAlertTitle';
+ description = 'Chat.Confirm.Unpin';
}
buttons.push({
- text: buttonText,
+ langKey: buttonText,
isDanger: true,
callback: () => callback()
});
} else {
- title = 'Pin Message?';
+ title = 'PinMessageAlertTitle';
+ const pinButtonText: LangPackKey = 'PinMessage';
if(peerId < 0) {
- description = 'Do you want to pin this message for all members in the group?';
buttons.push({
- text: 'PIN AND NOTIFY',
+ langKey: pinButtonText,
callback: () => callback()
});
- buttons.push({
- text: 'PIN WITHOUT NOTIFYING',
- callback: () => callback(undefined, true)
- });
+ if(appChatsManager.isBroadcast(-peerId)) {
+ description = 'PinMessageAlertChannel';
+ } else {
+ description = 'PinMessageAlert';
+
+ buttons.push({
+ langKey: 'PinNotify',
+ callback: () => callback(undefined, true)
+ });
+ }
} else {
- description = 'Would you like to pin this message?';
+ description = 'PinMessageAlertChat';
if(peerId === rootScope.myId) {
buttons.push({
- text: 'PIN',
+ langKey: pinButtonText,
callback: () => callback()
});
} else {
buttons.push({
- text: 'PIN JUST FOR ME',
+ langKey: pinButtonText,
callback: () => callback(true)
});
buttons.push({
- text: 'PIN FOR ME AND ' + firstName,
+ langKey: 'PinAlsoFor',
+ langArgs: [new PeerTitle({peerId, onlyFirstName: true}).element],
callback: () => callback()
});
}
}
}
- buttons.push({
- text: 'CANCEL',
- isCancel: true
- });
+ addCancelButton(buttons);
const popup = new PopupPeer('popup-delete-chat', {
peerId,
- title,
- description,
+ titleLangKey: title,
+ descriptionLangKey: description,
buttons
});
popup.show();
}
-}
\ No newline at end of file
+}
diff --git a/src/components/sidebarLeft/tabs/2fa/email.ts b/src/components/sidebarLeft/tabs/2fa/email.ts
index 91977828..35e22c1f 100644
--- a/src/components/sidebarLeft/tabs/2fa/email.ts
+++ b/src/components/sidebarLeft/tabs/2fa/email.ts
@@ -6,12 +6,12 @@ import { SliderSuperTab } from "../../../slider";
import { wrapSticker } from "../../../wrappers";
import InputField from "../../../inputField";
import { attachClickEvent, cancelEvent, canFocus } from "../../../../helpers/dom";
-import PopupConfirmAction from "../../../popups/confirmAction";
import { putPreloader } from "../../../misc";
import passwordManager from "../../../../lib/mtproto/passwordManager";
import AppTwoStepVerificationSetTab from "./passwordSet";
import AppTwoStepVerificationEmailConfirmationTab from "./emailConfirmation";
import RichTextProcessor from "../../../../lib/richtextprocessor";
+import PopupPeer from "../../../popups/peer";
export default class AppTwoStepVerificationEmailTab extends SliderSuperTab {
public inputField: InputField;
@@ -129,30 +129,31 @@ export default class AppTwoStepVerificationEmailTab extends SliderSuperTab {
};
attachClickEvent(btnSkip, (e) => {
- const popup = new PopupConfirmAction('popup-skip-email', [{
- text: 'CANCEL',
- isCancel: true
- }, {
- text: 'SKIP',
- callback: () => {
- //inputContent.classList.add('sidebar-left-section-disabled');
- toggleButtons(true);
- putPreloader(btnSkip);
- passwordManager.updateSettings({
- hint: this.hint,
- currentPassword: this.plainPassword,
- newPassword: this.newPassword,
- email: ''
- }).then(() => {
- goNext();
- }, (err) => {
- toggleButtons(false);
- });
- },
- isDanger: true,
- }], {
- title: 'Warning',
- text: 'No, seriously.
If you forget your password, you will lose access to your Telegram account. There will be no way to restore it.'
+ const popup = new PopupPeer('popup-skip-email', {
+ buttons: [{
+ text: 'CANCEL',
+ isCancel: true
+ }, {
+ text: 'SKIP',
+ callback: () => {
+ //inputContent.classList.add('sidebar-left-section-disabled');
+ toggleButtons(true);
+ putPreloader(btnSkip);
+ passwordManager.updateSettings({
+ hint: this.hint,
+ currentPassword: this.plainPassword,
+ newPassword: this.newPassword,
+ email: ''
+ }).then(() => {
+ goNext();
+ }, (err) => {
+ toggleButtons(false);
+ });
+ },
+ isDanger: true,
+ }],
+ titleLangKey: 'Warning',
+ descriptionLangKey: 'No, seriously.
If you forget your password, you will lose access to your Telegram account. There will be no way to restore it.'
});
popup.show();
diff --git a/src/components/sidebarLeft/tabs/2fa/index.ts b/src/components/sidebarLeft/tabs/2fa/index.ts
index 90b6fe7f..d7ec5bf1 100644
--- a/src/components/sidebarLeft/tabs/2fa/index.ts
+++ b/src/components/sidebarLeft/tabs/2fa/index.ts
@@ -4,7 +4,7 @@ import { AccountPassword } from "../../../../layer";
import appStickersManager from "../../../../lib/appManagers/appStickersManager";
import passwordManager from "../../../../lib/mtproto/passwordManager";
import Button from "../../../button";
-import PopupConfirmAction from "../../../popups/confirmAction";
+import PopupPeer from "../../../popups/peer";
import { SliderSuperTab } from "../../../slider";
import { wrapSticker } from "../../../wrappers";
import AppSettingsTab from "../settings";
@@ -62,18 +62,19 @@ export default class AppTwoStepVerificationTab extends SliderSuperTab {
});
attachClickEvent(btnDisablePassword, () => {
- const popup = new PopupConfirmAction('popup-disable-password', [{
- text: 'DISABLE',
- callback: () => {
- passwordManager.updateSettings({currentPassword: this.plainPassword}).then(() => {
- this.slider.sliceTabsUntilTab(AppSettingsTab, this);
- this.close();
- });
- },
- isDanger: true,
- }], {
- title: 'Warning',
- text: 'Are you sure you want to disable
your password?'
+ const popup = new PopupPeer('popup-disable-password', {
+ buttons: [{
+ text: 'DISABLE',
+ callback: () => {
+ passwordManager.updateSettings({currentPassword: this.plainPassword}).then(() => {
+ this.slider.sliceTabsUntilTab(AppSettingsTab, this);
+ this.close();
+ });
+ },
+ isDanger: true,
+ }],
+ titleLangKey: 'Warning',
+ descriptionLangKey: 'Are you sure you want to disable
your password?'
});
popup.show();
diff --git a/src/components/sidebarLeft/tabs/activeSessions.ts b/src/components/sidebarLeft/tabs/activeSessions.ts
index 28b7c6fb..35fe8099 100644
--- a/src/components/sidebarLeft/tabs/activeSessions.ts
+++ b/src/components/sidebarLeft/tabs/activeSessions.ts
@@ -7,11 +7,11 @@ import { formatDateAccordingToToday } from "../../../helpers/date";
import { attachContextMenuListener, openBtnMenu, positionMenu } from "../../misc";
import { attachClickEvent, findUpClassName, toggleDisability } from "../../../helpers/dom";
import ButtonMenu from "../../buttonMenu";
-import PopupConfirmAction from "../../popups/confirmAction";
import apiManager from "../../../lib/mtproto/mtprotoworker";
import { toast } from "../../toast";
import AppPrivacyAndSecurityTab from "./privacyAndSecurity";
import I18n from "../../../lib/langPack";
+import PopupPeer from "../../popups/peer";
export default class AppActiveSessionsTab extends SliderSuperTab {
public privacyTab: AppPrivacyAndSecurityTab;
@@ -56,23 +56,24 @@ export default class AppActiveSessionsTab extends SliderSuperTab {
if(authorizations.length) {
const btnTerminate = Button('btn-primary btn-transparent danger', {icon: 'stop', text: 'TerminateAllSessions'});
attachClickEvent(btnTerminate, (e) => {
- new PopupConfirmAction('revoke-session', [{
- langKey: 'Terminate',
- isDanger: true,
- callback: () => {
- const toggle = toggleDisability([btnTerminate], true);
- apiManager.invokeApi('auth.resetAuthorizations').then(value => {
- //toggleDisability([btnTerminate], false);
- btnTerminate.remove();
- otherSection.container.remove();
- this.privacyTab.updateActiveSessions();
- }, onError).finally(() => {
- toggle();
- });
- }
- }], {
- title: 'AreYouSureSessionsTitle',
- text: 'AreYouSureSessions'
+ new PopupPeer('revoke-session', {
+ buttons: [{
+ langKey: 'Terminate',
+ isDanger: true,
+ callback: () => {
+ const toggle = toggleDisability([btnTerminate], true);
+ apiManager.invokeApi('auth.resetAuthorizations').then(value => {
+ //toggleDisability([btnTerminate], false);
+ btnTerminate.remove();
+ otherSection.container.remove();
+ this.privacyTab.updateActiveSessions();
+ }, onError).finally(() => {
+ toggle();
+ });
+ }
+ }],
+ titleLangKey: 'AreYouSureSessionsTitle',
+ descriptionLangKey: 'AreYouSureSessions'
}).show();
});
@@ -106,21 +107,22 @@ export default class AppActiveSessionsTab extends SliderSuperTab {
const onTerminateClick = () => {
const hash = target.dataset.hash;
- new PopupConfirmAction('revoke-session', [{
- langKey: 'Terminate',
- isDanger: true,
- callback: () => {
- apiManager.invokeApi('account.resetAuthorization', {hash})
- .then(value => {
- if(value) {
- target.remove();
- this.privacyTab.updateActiveSessions();
- }
- }, onError);
- }
- }], {
- title: 'AreYouSureSessionTitle',
- text: 'TerminateSessionText'
+ new PopupPeer('revoke-session', {
+ buttons: [{
+ langKey: 'Terminate',
+ isDanger: true,
+ callback: () => {
+ apiManager.invokeApi('account.resetAuthorization', {hash})
+ .then(value => {
+ if(value) {
+ target.remove();
+ this.privacyTab.updateActiveSessions();
+ }
+ }, onError);
+ }
+ }],
+ titleLangKey: 'AreYouSureSessionTitle',
+ descriptionLangKey: 'TerminateSessionText'
}).show();
};
diff --git a/src/components/sidebarRight/tabs/editContact.ts b/src/components/sidebarRight/tabs/editContact.ts
index f30b4152..2ddceb3b 100644
--- a/src/components/sidebarRight/tabs/editContact.ts
+++ b/src/components/sidebarRight/tabs/editContact.ts
@@ -126,7 +126,7 @@ export default class AppEditContactTab extends SliderSuperTab {
});
- const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'Delete Contact'});
+ const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'PeerInfo.DeleteContact'});
attachClickEvent(btnDelete, () => {
new PopupPeer('popup-delete-contact', {
diff --git a/src/components/sidebarRight/tabs/editGroup.ts b/src/components/sidebarRight/tabs/editGroup.ts
index 2fae41c0..7b7aad1d 100644
--- a/src/components/sidebarRight/tabs/editGroup.ts
+++ b/src/components/sidebarRight/tabs/editGroup.ts
@@ -15,6 +15,7 @@ import AppGroupTypeTab from "./groupType";
import rootScope from "../../../lib/rootScope";
import AppGroupPermissionsTab from "./groupPermissions";
import { i18n } from "../../../lib/langPack";
+import PopupDeleteDialog from "../../popups/deleteDialog";
export default class AppEditGroupTab extends SliderSuperTab {
private groupNameInputField: InputField;
@@ -196,42 +197,20 @@ export default class AppEditGroupTab extends SliderSuperTab {
this.scrollable.append(section.container);
}
- if(appChatsManager.isChannel(this.chatId) && appChatsManager.hasRights(this.chatId, 'delete_chat')) {
+ if(appChatsManager.hasRights(this.chatId, 'delete_chat')) {
const section = new SettingSection({});
const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'DeleteMega'});
attachClickEvent(btnDelete, () => {
- new PopupPeer('popup-delete-group', {
- peerId: -this.chatId,
- titleLangKey: 'DeleteMegaMenu',
- descriptionLangKey: 'AreYouSureDeleteAndExit',
- buttons: addCancelButton([{
- langKey: 'DeleteMegaMenu',
- callback: () => {
- const toggle = toggleDisability([btnDelete], true);
- },
- isDanger: true
- }, {
- langKey: 'DeleteChat.DeleteGroupForAll',
- callback: () => {
- const toggle = toggleDisability([btnDelete], true);
-
- appChatsManager.deleteChannel(this.chatId).then(() => {
- this.close();
- }, () => {
- toggle();
- });
-
- /* appChatsManager.deleteChannel(this.chatId).then(() => {
- this.close();
- }, () => {
- toggle();
- }); */
- },
- isDanger: true
- }])
- }).show();
+ new PopupDeleteDialog(-this.chatId, undefined, (promise) => {
+ const toggle = toggleDisability([btnDelete], true);
+ promise.then(() => {
+ this.close();
+ }, () => {
+ toggle();
+ });
+ });
}, {listenerSetter: this.listenerSetter});
section.content.append(btnDelete);
diff --git a/src/components/sidebarRight/tabs/groupType.ts b/src/components/sidebarRight/tabs/groupType.ts
index f4f65cfa..000da12c 100644
--- a/src/components/sidebarRight/tabs/groupType.ts
+++ b/src/components/sidebarRight/tabs/groupType.ts
@@ -6,7 +6,6 @@ import appChatsManager from "../../../lib/appManagers/appChatsManager";
import appProfileManager from "../../../lib/appManagers/appProfileManager";
import Button from "../../button";
import { setButtonLoader } from "../../misc";
-import PopupConfirmAction from "../../popups/confirmAction";
import RadioField from "../../radioField";
import Row, { RadioFormFromRows } from "../../row";
import { SettingSection } from "../../sidebarLeft";
@@ -14,6 +13,7 @@ import { toast } from "../../toast";
import { UsernameInputField } from "../../usernameInputField";
import { SliderSuperTabEventable } from "../../sliderTab";
import I18n from "../../../lib/langPack";
+import PopupPeer from "../../popups/peer";
export default class AppGroupTypeTab extends SliderSuperTabEventable {
public peerId: number;
@@ -73,21 +73,22 @@ export default class AppGroupTypeTab extends SliderSuperTabEventable {
const btnRevoke = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'RevokeLink'});
attachClickEvent(btnRevoke, () => {
- new PopupConfirmAction('revoke-link', [{
- langKey: 'RevokeButton',
- callback: () => {
- const toggle = toggleDisability([btnRevoke], true);
-
- appProfileManager.getChatInviteLink(-this.peerId, true).then(link => {
- toggle();
- linkRow.title.innerHTML = link;
- //revoked = true;
- //onChange();
- });
- }
- }], {
- title: 'RevokeLink',
- text: 'RevokeAlert'
+ new PopupPeer('revoke-link', {
+ buttons: [{
+ langKey: 'RevokeButton',
+ callback: () => {
+ const toggle = toggleDisability([btnRevoke], true);
+
+ appProfileManager.getChatInviteLink(-this.peerId, true).then(link => {
+ toggle();
+ linkRow.title.innerHTML = link;
+ //revoked = true;
+ //onChange();
+ });
+ }
+ }],
+ titleLangKey: 'RevokeLink',
+ descriptionLangKey: 'RevokeAlert'
}).show();
}, {listenerSetter: this.listenerSetter});
diff --git a/src/lang.ts b/src/lang.ts
index 83ced0c3..db5dcbca 100644
--- a/src/lang.ts
+++ b/src/lang.ts
@@ -81,6 +81,12 @@ const lang = {
"one_value": "Remove %d Sticker",
"other_value": "Remove %d Stickers"
},
+ "ForwardedFrom": "Forwarded from %s",
+ "Popup.Avatar.Title": "Drag to Reposition",
+ "Popup.Unpin.AllTitle": "Unpin all messages",
+ "Popup.Unpin.HideTitle": "Hide pinned messages",
+ "Popup.Unpin.HideDescription": "Do you want to hide the pinned message bar? It wil stay hidden until a new message is pinned.",
+ "Popup.Unpin.Hide": "Hide",
// * android
"ActionCreateChannel": "Channel created",
@@ -153,6 +159,10 @@ const lang = {
"one_value": "%1$d member",
"other_value": "%1$d members"
},
+ "messages": {
+ "one_value": "%1$d message",
+ "other_value": "%1$d messages"
+ },
"UsernameHelpLink": "This link opens a chat with you:\n%1$s",
"NewChannel": "New Channel",
"NewGroup": "New Group",
@@ -214,6 +224,13 @@ const lang = {
"TerminateAllSessions": "Terminate All Other Sessions",
"TerminateSessionText": "Are you sure you want to terminate this session?",
"OtherSessions": "Active sessions",
+ "AreYouSureDeleteSingleMessage": "Are you sure you want to delete this message?",
+ "AreYouSureDeleteFewMessages": "Are you sure you want to delete these messages?",
+ "AreYouSureDeleteSingleMessageMega": "Are you sure you want to delete this message for everyone?",
+ "AreYouSureDeleteFewMessagesMega": "Are you sure you want to delete these messages for everyone?",
+ "AreYouSureDeleteAndExitName": "Are you sure you want to delete and leave the group **%1$s**?",
+ "AreYouSureDeleteThisChatSavedMessages": "Are you sure you want to delete **Saved Messages**?",
+ "AreYouSureDeleteThisChatWithUser": "Are you sure you want to delete the chat with **%1$s**?",
"AreYouSureSessionTitle": "Terminate session",
"AreYouSureSessionsTitle": "Terminate sessions",
"AreYouSureSessions": "Are you sure you want to terminate all other sessions?",
@@ -314,6 +331,27 @@ const lang = {
"other_value": "%1$d subscribers"
},
"SearchGifsTitle": "Search GIFs",
+ "PinMessageAlert": "Pin this message in the group?",
+ "PinMessageAlertTitle": "Pin message",
+ "PinMessageAlertChannel": "Do you want to pin this message in this channel?",
+ "PinMessageAlertChat": "Do you want to pin this message at the top of the chat?",
+ "UnpinMessageAlertTitle": "Unpin message",
+ "UnpinMessageAlert": "Do you want to unpin this message?",
+ "PinNotify": "Notify all members",
+ "PinMessage": "Pin",
+ "UnpinMessage": "Unpin",
+ "PinAlsoFor": "Also pin for %1$s",
+ "DeleteMessagesTitle": "Delete %1$s",
+ "DeleteSingleMessagesTitle": "Delete message",
+ "DeleteMessagesOption": "Unsend My Messages",
+ "DeleteMessagesOptionAlso": "Also delete for %1$s",
+ "DeleteForAll": "Delete for all members",
+ "DeleteMessagesTextGroup": "You can also delete the %1$s you sent from the inboxes of other group members by checking \"Unsend my messages\".",
+ "LeaveChannel": "Leave Channel",
+ "LeaveChannelMenu": "Leave channel",
+ "ChannelLeaveAlertWithName": "Are you sure you want to leave **%1$s**?",
+ "LeaveMegaMenu": "Leave group",
+ "DeleteChatUser": "Delete chat",
// * macos
"AccountSettings.Filters": "Chat Folders",
@@ -324,6 +362,7 @@ const lang = {
"Channel.UsernameAboutChannel": "People can share this link with others and can find your channel using Telegram search.",
"Channel.UsernameAboutGroup": "People can share this link with others and find your group using Telegram search.",
"Chat.CopySelectedText": "Copy Selected Text",
+ "Chat.Confirm.Unpin": "Would you like to unpin this message?",
"Chat.Date.ScheduledFor": "Scheduled for %@",
//"Chat.Date.ScheduledUntilOnline": "Scheduled until online",
"Chat.Date.ScheduledForToday": "Scheduled for today",
@@ -368,10 +407,18 @@ const lang = {
"Chat.Send.WithoutSound": "Send Without Sound",
"Chat.Send.SetReminder": "Set a Reminder",
"Chat.Send.ScheduledMessage": "Schedule Message",
+ "Chat.UnpinAllMessagesConfirmation": {
+ "one_value": "Do you want to unpin %d message in this chat?",
+ "other_value": "Do you want to unpin all %d messages in this chat?"
+ },
"ChatList.Context.Mute": "Mute",
"ChatList.Context.Unmute": "Unmute",
"ChatList.Context.Pin": "Pin",
"ChatList.Context.Unpin": "Unpin",
+ "ChatList.Context.DeleteChat": "Delete Chat",
+ "ChatList.Context.DeleteAndExit": "Delete and Leave",
+ "ChatList.Context.LeaveChannel": "Leave Channel",
+ "ChatList.Context.LeaveGroup": "Leave Group",
"ChatList.Service.Call.incoming": "Incoming Call (%@)",
"ChatList.Service.Call.outgoing": "Outgoing Call (%@)",
"ChatList.Service.Call.Cancelled": "Cancelled Call",
@@ -458,6 +505,7 @@ const lang = {
"PeerInfo.SignMessages": "Sign Messages",
"PeerInfo.SharedMedia": "Shared Media",
"PeerInfo.Subscribers": "Subscribers",
+ "PeerInfo.DeleteContact": "Delete Contact",
"PollResults.Title.Poll": "Poll Results",
"PollResults.Title.Quiz": "Quiz Results",
"PollResults.LoadMore": {
@@ -512,7 +560,10 @@ const lang = {
"NewPoll.OptionsAddOption": "Add an Option",
"NewPoll.MultipleChoice": "Multiple Answers",
"NewPoll.Quiz": "Quiz Mode",
- "GroupPermission.Delete": "Delete Exception"
+ "GroupPermission.Delete": "Delete Exception",
+ "Schedule.SendToday": "Send today at %@",
+ "Schedule.SendDate": "Send on %@ at %@",
+ //"Schedule.SendWhenOnline": "Send When Online"
};
export default lang;
diff --git a/src/layer.d.ts b/src/layer.d.ts
index 3ccaff39..8cb51715 100644
--- a/src/layer.d.ts
+++ b/src/layer.d.ts
@@ -179,7 +179,8 @@ export namespace InputMedia {
_: 'inputMediaDocument',
flags?: number,
id: InputDocument,
- ttl_seconds?: number
+ ttl_seconds?: number,
+ query?: string
};
export type inputMediaVenue = {
@@ -315,7 +316,7 @@ export namespace InputPhoto {
/**
* @link https://core.telegram.org/type/InputFileLocation
*/
-export type InputFileLocation = InputFileLocation.inputFileLocation | InputFileLocation.inputEncryptedFileLocation | InputFileLocation.inputDocumentFileLocation | InputFileLocation.inputSecureFileLocation | InputFileLocation.inputTakeoutFileLocation | InputFileLocation.inputPhotoFileLocation | InputFileLocation.inputPhotoLegacyFileLocation | InputFileLocation.inputPeerPhotoFileLocation | InputFileLocation.inputStickerSetThumb;
+export type InputFileLocation = InputFileLocation.inputFileLocation | InputFileLocation.inputEncryptedFileLocation | InputFileLocation.inputDocumentFileLocation | InputFileLocation.inputSecureFileLocation | InputFileLocation.inputTakeoutFileLocation | InputFileLocation.inputPhotoFileLocation | InputFileLocation.inputPhotoLegacyFileLocation | InputFileLocation.inputPeerPhotoFileLocation | InputFileLocation.inputStickerSetThumb | InputFileLocation.inputGroupCallStream;
export namespace InputFileLocation {
export type inputFileLocation = {
@@ -385,6 +386,13 @@ export namespace InputFileLocation {
volume_id: string,
local_id: number
};
+
+ export type inputGroupCallStream = {
+ _: 'inputGroupCallStream',
+ call: InputGroupCall,
+ time_ms: string,
+ scale: number
+ };
}
/**
@@ -485,6 +493,7 @@ export namespace User {
support?: true,
scam?: true,
apply_min_photo?: true,
+ fake?: true,
}>,
id: number,
access_hash?: string,
@@ -583,6 +592,8 @@ export namespace Chat {
kicked?: true,
left?: true,
deactivated?: true,
+ call_active?: true,
+ call_not_empty?: true,
}>,
id: number,
title: string,
@@ -619,6 +630,9 @@ export namespace Chat {
has_geo?: true,
slowmode_enabled?: true,
call_active?: true,
+ call_not_empty?: true,
+ fake?: true,
+ gigagroup?: true,
}>,
id: number,
access_hash?: string,
@@ -666,10 +680,13 @@ export namespace ChatFull {
participants: ChatParticipants,
chat_photo?: Photo,
notify_settings: PeerNotifySettings,
- exported_invite: ExportedChatInvite,
+ exported_invite?: ExportedChatInvite,
bot_info?: Array,
pinned_msg_id?: number,
- folder_id?: number
+ folder_id?: number,
+ call?: InputGroupCall,
+ ttl_period?: number,
+ groupcall_default_join_as?: Peer
};
export type channelFull = {
@@ -697,7 +714,7 @@ export namespace ChatFull {
unread_count: number,
chat_photo: Photo,
notify_settings: PeerNotifySettings,
- exported_invite: ExportedChatInvite,
+ exported_invite?: ExportedChatInvite,
bot_info: Array,
migrated_from_chat_id?: number,
migrated_from_max_id?: number,
@@ -710,7 +727,11 @@ export namespace ChatFull {
slowmode_seconds?: number,
slowmode_next_send_date?: number,
stats_dc?: number,
- pts: number
+ pts: number,
+ call?: InputGroupCall,
+ ttl_period?: number,
+ pending_suggestions?: Array,
+ groupcall_default_join_as?: Peer
};
}
@@ -791,7 +812,9 @@ export type Message = Message.messageEmpty | Message.message | Message.messageSe
export namespace Message {
export type messageEmpty = {
_: 'messageEmpty',
+ flags?: number,
id: number,
+ peer_id?: Peer,
deleted?: boolean
};
@@ -829,6 +852,7 @@ export namespace Message {
post_author?: string,
grouped_id?: string,
restriction_reason?: Array,
+ ttl_period?: number,
mid?: number,
deleted?: boolean,
peerId?: number,
@@ -856,6 +880,7 @@ export namespace Message {
reply_to?: MessageReplyHeader,
date: number,
action: MessageAction,
+ ttl_period?: number,
mid?: number,
deleted?: boolean,
peerId?: number,
@@ -967,7 +992,7 @@ export namespace MessageMedia {
/**
* @link https://core.telegram.org/type/MessageAction
*/
-export type MessageAction = MessageAction.messageActionEmpty | MessageAction.messageActionChatCreate | MessageAction.messageActionChatEditTitle | MessageAction.messageActionChatEditPhoto | MessageAction.messageActionChatDeletePhoto | MessageAction.messageActionChatAddUser | MessageAction.messageActionChatDeleteUser | MessageAction.messageActionChatJoinedByLink | MessageAction.messageActionChannelCreate | MessageAction.messageActionChatMigrateTo | MessageAction.messageActionChannelMigrateFrom | MessageAction.messageActionPinMessage | MessageAction.messageActionHistoryClear | MessageAction.messageActionGameScore | MessageAction.messageActionPaymentSentMe | MessageAction.messageActionPaymentSent | MessageAction.messageActionPhoneCall | MessageAction.messageActionScreenshotTaken | MessageAction.messageActionCustomAction | MessageAction.messageActionBotAllowed | MessageAction.messageActionSecureValuesSentMe | MessageAction.messageActionSecureValuesSent | MessageAction.messageActionContactSignUp | MessageAction.messageActionGeoProximityReached | MessageAction.messageActionChatLeave | MessageAction.messageActionChannelDeletePhoto | MessageAction.messageActionChannelEditTitle | MessageAction.messageActionChannelEditPhoto | MessageAction.messageActionChannelEditVideo | MessageAction.messageActionChatEditVideo | MessageAction.messageActionChatAddUsers | MessageAction.messageActionChatJoined | MessageAction.messageActionChatReturn | MessageAction.messageActionChatJoinedYou | MessageAction.messageActionChatReturnYou;
+export type MessageAction = MessageAction.messageActionEmpty | MessageAction.messageActionChatCreate | MessageAction.messageActionChatEditTitle | MessageAction.messageActionChatEditPhoto | MessageAction.messageActionChatDeletePhoto | MessageAction.messageActionChatAddUser | MessageAction.messageActionChatDeleteUser | MessageAction.messageActionChatJoinedByLink | MessageAction.messageActionChannelCreate | MessageAction.messageActionChatMigrateTo | MessageAction.messageActionChannelMigrateFrom | MessageAction.messageActionPinMessage | MessageAction.messageActionHistoryClear | MessageAction.messageActionGameScore | MessageAction.messageActionPaymentSentMe | MessageAction.messageActionPaymentSent | MessageAction.messageActionPhoneCall | MessageAction.messageActionScreenshotTaken | MessageAction.messageActionCustomAction | MessageAction.messageActionBotAllowed | MessageAction.messageActionSecureValuesSentMe | MessageAction.messageActionSecureValuesSent | MessageAction.messageActionContactSignUp | MessageAction.messageActionGeoProximityReached | MessageAction.messageActionGroupCall | MessageAction.messageActionInviteToGroupCall | MessageAction.messageActionSetMessagesTTL | MessageAction.messageActionChatLeave | MessageAction.messageActionChannelDeletePhoto | MessageAction.messageActionChannelEditTitle | MessageAction.messageActionChannelEditPhoto | MessageAction.messageActionChannelEditVideo | MessageAction.messageActionChatEditVideo | MessageAction.messageActionChatAddUsers | MessageAction.messageActionChatJoined | MessageAction.messageActionChatReturn | MessageAction.messageActionChatJoinedYou | MessageAction.messageActionChatReturnYou;
export namespace MessageAction {
export type messageActionEmpty = {
@@ -1103,6 +1128,24 @@ export namespace MessageAction {
distance: number
};
+ export type messageActionGroupCall = {
+ _: 'messageActionGroupCall',
+ flags?: number,
+ call: InputGroupCall,
+ duration?: number
+ };
+
+ export type messageActionInviteToGroupCall = {
+ _: 'messageActionInviteToGroupCall',
+ call: InputGroupCall,
+ users: Array
+ };
+
+ export type messageActionSetMessagesTTL = {
+ _: 'messageActionSetMessagesTTL',
+ period: number
+ };
+
export type messageActionChatLeave = {
_: 'messageActionChatLeave',
user_id?: number
@@ -1432,6 +1475,7 @@ export namespace PeerSettings {
need_contacts_exception?: true,
report_geo?: true,
autoarchived?: true,
+ invite_members?: true,
}>,
geo_distance?: number
};
@@ -1473,7 +1517,7 @@ export namespace WallPaper {
/**
* @link https://core.telegram.org/type/ReportReason
*/
-export type ReportReason = ReportReason.inputReportReasonSpam | ReportReason.inputReportReasonViolence | ReportReason.inputReportReasonPornography | ReportReason.inputReportReasonChildAbuse | ReportReason.inputReportReasonOther | ReportReason.inputReportReasonCopyright | ReportReason.inputReportReasonGeoIrrelevant;
+export type ReportReason = ReportReason.inputReportReasonSpam | ReportReason.inputReportReasonViolence | ReportReason.inputReportReasonPornography | ReportReason.inputReportReasonChildAbuse | ReportReason.inputReportReasonOther | ReportReason.inputReportReasonCopyright | ReportReason.inputReportReasonGeoIrrelevant | ReportReason.inputReportReasonFake;
export namespace ReportReason {
export type inputReportReasonSpam = {
@@ -1493,8 +1537,7 @@ export namespace ReportReason {
};
export type inputReportReasonOther = {
- _: 'inputReportReasonOther',
- text: string
+ _: 'inputReportReasonOther'
};
export type inputReportReasonCopyright = {
@@ -1504,6 +1547,10 @@ export namespace ReportReason {
export type inputReportReasonGeoIrrelevant = {
_: 'inputReportReasonGeoIrrelevant'
};
+
+ export type inputReportReasonFake = {
+ _: 'inputReportReasonFake'
+ };
}
/**
@@ -1532,6 +1579,7 @@ export namespace UserFull {
pinned_msg_id?: number,
common_chats_count: number,
folder_id?: number,
+ ttl_period?: number,
rAbout?: string
};
}
@@ -1834,7 +1882,7 @@ export namespace MessagesFilter {
/**
* @link https://core.telegram.org/type/Update
*/
-export type Update = Update.updateNewMessage | Update.updateMessageID | Update.updateDeleteMessages | Update.updateUserTyping | Update.updateChatUserTyping | Update.updateChatParticipants | Update.updateUserStatus | Update.updateUserName | Update.updateUserPhoto | Update.updateNewEncryptedMessage | Update.updateEncryptedChatTyping | Update.updateEncryption | Update.updateEncryptedMessagesRead | Update.updateChatParticipantAdd | Update.updateChatParticipantDelete | Update.updateDcOptions | Update.updateNotifySettings | Update.updateServiceNotification | Update.updatePrivacy | Update.updateUserPhone | Update.updateReadHistoryInbox | Update.updateReadHistoryOutbox | Update.updateWebPage | Update.updateReadMessagesContents | Update.updateChannelTooLong | Update.updateChannel | Update.updateNewChannelMessage | Update.updateReadChannelInbox | Update.updateDeleteChannelMessages | Update.updateChannelMessageViews | Update.updateChatParticipantAdmin | Update.updateNewStickerSet | Update.updateStickerSetsOrder | Update.updateStickerSets | Update.updateSavedGifs | Update.updateBotInlineQuery | Update.updateBotInlineSend | Update.updateEditChannelMessage | Update.updateBotCallbackQuery | Update.updateEditMessage | Update.updateInlineBotCallbackQuery | Update.updateReadChannelOutbox | Update.updateDraftMessage | Update.updateReadFeaturedStickers | Update.updateRecentStickers | Update.updateConfig | Update.updatePtsChanged | Update.updateChannelWebPage | Update.updateDialogPinned | Update.updatePinnedDialogs | Update.updateBotWebhookJSON | Update.updateBotWebhookJSONQuery | Update.updateBotShippingQuery | Update.updateBotPrecheckoutQuery | Update.updatePhoneCall | Update.updateLangPackTooLong | Update.updateLangPack | Update.updateFavedStickers | Update.updateChannelReadMessagesContents | Update.updateContactsReset | Update.updateChannelAvailableMessages | Update.updateDialogUnreadMark | Update.updateMessagePoll | Update.updateChatDefaultBannedRights | Update.updateFolderPeers | Update.updatePeerSettings | Update.updatePeerLocated | Update.updateNewScheduledMessage | Update.updateDeleteScheduledMessages | Update.updateTheme | Update.updateGeoLiveViewed | Update.updateLoginToken | Update.updateMessagePollVote | Update.updateDialogFilter | Update.updateDialogFilterOrder | Update.updateDialogFilters | Update.updatePhoneCallSignalingData | Update.updateChannelParticipant | Update.updateChannelMessageForwards | Update.updateReadChannelDiscussionInbox | Update.updateReadChannelDiscussionOutbox | Update.updatePeerBlocked | Update.updateChannelUserTyping | Update.updatePinnedMessages | Update.updatePinnedChannelMessages;
+export type Update = Update.updateNewMessage | Update.updateMessageID | Update.updateDeleteMessages | Update.updateUserTyping | Update.updateChatUserTyping | Update.updateChatParticipants | Update.updateUserStatus | Update.updateUserName | Update.updateUserPhoto | Update.updateNewEncryptedMessage | Update.updateEncryptedChatTyping | Update.updateEncryption | Update.updateEncryptedMessagesRead | Update.updateChatParticipantAdd | Update.updateChatParticipantDelete | Update.updateDcOptions | Update.updateNotifySettings | Update.updateServiceNotification | Update.updatePrivacy | Update.updateUserPhone | Update.updateReadHistoryInbox | Update.updateReadHistoryOutbox | Update.updateWebPage | Update.updateReadMessagesContents | Update.updateChannelTooLong | Update.updateChannel | Update.updateNewChannelMessage | Update.updateReadChannelInbox | Update.updateDeleteChannelMessages | Update.updateChannelMessageViews | Update.updateChatParticipantAdmin | Update.updateNewStickerSet | Update.updateStickerSetsOrder | Update.updateStickerSets | Update.updateSavedGifs | Update.updateBotInlineQuery | Update.updateBotInlineSend | Update.updateEditChannelMessage | Update.updateBotCallbackQuery | Update.updateEditMessage | Update.updateInlineBotCallbackQuery | Update.updateReadChannelOutbox | Update.updateDraftMessage | Update.updateReadFeaturedStickers | Update.updateRecentStickers | Update.updateConfig | Update.updatePtsChanged | Update.updateChannelWebPage | Update.updateDialogPinned | Update.updatePinnedDialogs | Update.updateBotWebhookJSON | Update.updateBotWebhookJSONQuery | Update.updateBotShippingQuery | Update.updateBotPrecheckoutQuery | Update.updatePhoneCall | Update.updateLangPackTooLong | Update.updateLangPack | Update.updateFavedStickers | Update.updateChannelReadMessagesContents | Update.updateContactsReset | Update.updateChannelAvailableMessages | Update.updateDialogUnreadMark | Update.updateMessagePoll | Update.updateChatDefaultBannedRights | Update.updateFolderPeers | Update.updatePeerSettings | Update.updatePeerLocated | Update.updateNewScheduledMessage | Update.updateDeleteScheduledMessages | Update.updateTheme | Update.updateGeoLiveViewed | Update.updateLoginToken | Update.updateMessagePollVote | Update.updateDialogFilter | Update.updateDialogFilterOrder | Update.updateDialogFilters | Update.updatePhoneCallSignalingData | Update.updateChannelMessageForwards | Update.updateReadChannelDiscussionInbox | Update.updateReadChannelDiscussionOutbox | Update.updatePeerBlocked | Update.updateChannelUserTyping | Update.updatePinnedMessages | Update.updatePinnedChannelMessages | Update.updateChat | Update.updateGroupCallParticipants | Update.updateGroupCall | Update.updatePeerHistoryTTL | Update.updateChatParticipant | Update.updateChannelParticipant | Update.updateBotStopped;
export namespace Update {
export type updateNewMessage = {
@@ -1866,7 +1914,7 @@ export namespace Update {
export type updateChatUserTyping = {
_: 'updateChatUserTyping',
chat_id: number,
- user_id: number,
+ from_id: Peer,
action: SendMessageAction
};
@@ -2087,6 +2135,7 @@ export namespace Update {
user_id: number,
query: string,
geo?: GeoPoint,
+ peer_type?: InlineQueryPeerType,
offset: string
};
@@ -2354,17 +2403,6 @@ export namespace Update {
data: Uint8Array
};
- export type updateChannelParticipant = {
- _: 'updateChannelParticipant',
- flags?: number,
- channel_id: number,
- date: number,
- user_id: number,
- prev_participant?: ChannelParticipant,
- new_participant?: ChannelParticipant,
- qts: number
- };
-
export type updateChannelMessageForwards = {
_: 'updateChannelMessageForwards',
channel_id: number,
@@ -2400,7 +2438,7 @@ export namespace Update {
flags?: number,
channel_id: number,
top_msg_id?: number,
- user_id: number,
+ from_id: Peer,
action: SendMessageAction
};
@@ -2427,6 +2465,65 @@ export namespace Update {
pts: number,
pts_count: number
};
+
+ export type updateChat = {
+ _: 'updateChat',
+ chat_id: number
+ };
+
+ export type updateGroupCallParticipants = {
+ _: 'updateGroupCallParticipants',
+ call: InputGroupCall,
+ participants: Array,
+ version: number
+ };
+
+ export type updateGroupCall = {
+ _: 'updateGroupCall',
+ chat_id: number,
+ call: GroupCall
+ };
+
+ export type updatePeerHistoryTTL = {
+ _: 'updatePeerHistoryTTL',
+ flags?: number,
+ peer: Peer,
+ ttl_period?: number
+ };
+
+ export type updateChatParticipant = {
+ _: 'updateChatParticipant',
+ flags?: number,
+ chat_id: number,
+ date: number,
+ actor_id: number,
+ user_id: number,
+ prev_participant?: ChatParticipant,
+ new_participant?: ChatParticipant,
+ invite?: ExportedChatInvite,
+ qts: number
+ };
+
+ export type updateChannelParticipant = {
+ _: 'updateChannelParticipant',
+ flags?: number,
+ channel_id: number,
+ date: number,
+ actor_id: number,
+ user_id: number,
+ prev_participant?: ChannelParticipant,
+ new_participant?: ChannelParticipant,
+ invite?: ExportedChatInvite,
+ qts: number
+ };
+
+ export type updateBotStopped = {
+ _: 'updateBotStopped',
+ user_id: number,
+ date: number,
+ stopped: boolean,
+ qts: number
+ };
}
/**
@@ -2511,7 +2608,8 @@ export namespace Updates {
fwd_from?: MessageFwdHeader,
via_bot_id?: number,
reply_to?: MessageReplyHeader,
- entities?: Array
+ entities?: Array,
+ ttl_period?: number
};
export type updateShortChatMessage = {
@@ -2533,7 +2631,8 @@ export namespace Updates {
fwd_from?: MessageFwdHeader,
via_bot_id?: number,
reply_to?: MessageReplyHeader,
- entities?: Array
+ entities?: Array,
+ ttl_period?: number
};
export type updateShort = {
@@ -2572,7 +2671,8 @@ export namespace Updates {
pts_count: number,
date: number,
media?: MessageMedia,
- entities?: Array
+ entities?: Array,
+ ttl_period?: number
};
}
@@ -2816,6 +2916,10 @@ export namespace EncryptedChat {
export type encryptedChatDiscarded = {
_: 'encryptedChatDiscarded',
+ flags?: number,
+ pFlags?: Partial<{
+ history_deleted?: true,
+ }>,
id: number
};
}
@@ -3052,7 +3156,7 @@ export namespace NotifyPeer {
/**
* @link https://core.telegram.org/type/SendMessageAction
*/
-export type SendMessageAction = SendMessageAction.sendMessageTypingAction | SendMessageAction.sendMessageCancelAction | SendMessageAction.sendMessageRecordVideoAction | SendMessageAction.sendMessageUploadVideoAction | SendMessageAction.sendMessageRecordAudioAction | SendMessageAction.sendMessageUploadAudioAction | SendMessageAction.sendMessageUploadPhotoAction | SendMessageAction.sendMessageUploadDocumentAction | SendMessageAction.sendMessageGeoLocationAction | SendMessageAction.sendMessageChooseContactAction | SendMessageAction.sendMessageGamePlayAction | SendMessageAction.sendMessageRecordRoundAction | SendMessageAction.sendMessageUploadRoundAction;
+export type SendMessageAction = SendMessageAction.sendMessageTypingAction | SendMessageAction.sendMessageCancelAction | SendMessageAction.sendMessageRecordVideoAction | SendMessageAction.sendMessageUploadVideoAction | SendMessageAction.sendMessageRecordAudioAction | SendMessageAction.sendMessageUploadAudioAction | SendMessageAction.sendMessageUploadPhotoAction | SendMessageAction.sendMessageUploadDocumentAction | SendMessageAction.sendMessageGeoLocationAction | SendMessageAction.sendMessageChooseContactAction | SendMessageAction.sendMessageGamePlayAction | SendMessageAction.sendMessageRecordRoundAction | SendMessageAction.sendMessageUploadRoundAction | SendMessageAction.speakingInGroupCallAction | SendMessageAction.sendMessageHistoryImportAction;
export namespace SendMessageAction {
export type sendMessageTypingAction = {
@@ -3111,6 +3215,15 @@ export namespace SendMessageAction {
_: 'sendMessageUploadRoundAction',
progress: number
};
+
+ export type speakingInGroupCallAction = {
+ _: 'speakingInGroupCallAction'
+ };
+
+ export type sendMessageHistoryImportAction = {
+ _: 'sendMessageHistoryImportAction',
+ progress: number
+ };
}
/**
@@ -3611,16 +3724,23 @@ export namespace ReceivedNotifyMessage {
/**
* @link https://core.telegram.org/type/ExportedChatInvite
*/
-export type ExportedChatInvite = ExportedChatInvite.chatInviteEmpty | ExportedChatInvite.chatInviteExported;
+export type ExportedChatInvite = ExportedChatInvite.chatInviteExported;
export namespace ExportedChatInvite {
- export type chatInviteEmpty = {
- _: 'chatInviteEmpty'
- };
-
- export type chatInviteExported = {
+ export type chatInviteExported = {
_: 'chatInviteExported',
- link: string
+ flags?: number,
+ pFlags?: Partial<{
+ revoked?: true,
+ permanent?: true,
+ }>,
+ link: string,
+ admin_id: number,
+ date: number,
+ start_date?: number,
+ expire_date?: number,
+ usage_limit?: number,
+ usage?: number
};
}
@@ -3708,7 +3828,7 @@ export namespace StickerSet {
access_hash: string,
title: string,
short_name: string,
- thumb?: PhotoSize,
+ thumbs?: Array,
thumb_dc_id?: number,
count: number,
hash: number
@@ -4569,6 +4689,9 @@ export namespace MessageFwdHeader {
export type messageFwdHeader = {
_: 'messageFwdHeader',
flags?: number,
+ pFlags?: Partial<{
+ imported?: true,
+ }>,
from_id?: Peer,
from_name?: string,
date: number,
@@ -5601,7 +5724,7 @@ export namespace PaymentsSavedInfo {
/**
* @link https://core.telegram.org/type/InputPaymentCredentials
*/
-export type InputPaymentCredentials = InputPaymentCredentials.inputPaymentCredentialsSaved | InputPaymentCredentials.inputPaymentCredentials | InputPaymentCredentials.inputPaymentCredentialsApplePay | InputPaymentCredentials.inputPaymentCredentialsAndroidPay;
+export type InputPaymentCredentials = InputPaymentCredentials.inputPaymentCredentialsSaved | InputPaymentCredentials.inputPaymentCredentials | InputPaymentCredentials.inputPaymentCredentialsApplePay | InputPaymentCredentials.inputPaymentCredentialsGooglePay;
export namespace InputPaymentCredentials {
export type inputPaymentCredentialsSaved = {
@@ -5624,10 +5747,9 @@ export namespace InputPaymentCredentials {
payment_data: DataJSON
};
- export type inputPaymentCredentialsAndroidPay = {
- _: 'inputPaymentCredentialsAndroidPay',
- payment_token: DataJSON,
- google_transaction_id: string
+ export type inputPaymentCredentialsGooglePay = {
+ _: 'inputPaymentCredentialsGooglePay',
+ payment_token: DataJSON
};
}
@@ -5953,7 +6075,7 @@ export namespace LangPackLanguage {
/**
* @link https://core.telegram.org/type/ChannelAdminLogEventAction
*/
-export type ChannelAdminLogEventAction = ChannelAdminLogEventAction.channelAdminLogEventActionChangeTitle | ChannelAdminLogEventAction.channelAdminLogEventActionChangeAbout | ChannelAdminLogEventAction.channelAdminLogEventActionChangeUsername | ChannelAdminLogEventAction.channelAdminLogEventActionChangePhoto | ChannelAdminLogEventAction.channelAdminLogEventActionToggleInvites | ChannelAdminLogEventAction.channelAdminLogEventActionToggleSignatures | ChannelAdminLogEventAction.channelAdminLogEventActionUpdatePinned | ChannelAdminLogEventAction.channelAdminLogEventActionEditMessage | ChannelAdminLogEventAction.channelAdminLogEventActionDeleteMessage | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantJoin | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantLeave | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantInvite | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantToggleBan | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantToggleAdmin | ChannelAdminLogEventAction.channelAdminLogEventActionChangeStickerSet | ChannelAdminLogEventAction.channelAdminLogEventActionTogglePreHistoryHidden | ChannelAdminLogEventAction.channelAdminLogEventActionDefaultBannedRights | ChannelAdminLogEventAction.channelAdminLogEventActionStopPoll | ChannelAdminLogEventAction.channelAdminLogEventActionChangeLinkedChat | ChannelAdminLogEventAction.channelAdminLogEventActionChangeLocation | ChannelAdminLogEventAction.channelAdminLogEventActionToggleSlowMode;
+export type ChannelAdminLogEventAction = ChannelAdminLogEventAction.channelAdminLogEventActionChangeTitle | ChannelAdminLogEventAction.channelAdminLogEventActionChangeAbout | ChannelAdminLogEventAction.channelAdminLogEventActionChangeUsername | ChannelAdminLogEventAction.channelAdminLogEventActionChangePhoto | ChannelAdminLogEventAction.channelAdminLogEventActionToggleInvites | ChannelAdminLogEventAction.channelAdminLogEventActionToggleSignatures | ChannelAdminLogEventAction.channelAdminLogEventActionUpdatePinned | ChannelAdminLogEventAction.channelAdminLogEventActionEditMessage | ChannelAdminLogEventAction.channelAdminLogEventActionDeleteMessage | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantJoin | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantLeave | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantInvite | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantToggleBan | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantToggleAdmin | ChannelAdminLogEventAction.channelAdminLogEventActionChangeStickerSet | ChannelAdminLogEventAction.channelAdminLogEventActionTogglePreHistoryHidden | ChannelAdminLogEventAction.channelAdminLogEventActionDefaultBannedRights | ChannelAdminLogEventAction.channelAdminLogEventActionStopPoll | ChannelAdminLogEventAction.channelAdminLogEventActionChangeLinkedChat | ChannelAdminLogEventAction.channelAdminLogEventActionChangeLocation | ChannelAdminLogEventAction.channelAdminLogEventActionToggleSlowMode | ChannelAdminLogEventAction.channelAdminLogEventActionStartGroupCall | ChannelAdminLogEventAction.channelAdminLogEventActionDiscardGroupCall | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantMute | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantUnmute | ChannelAdminLogEventAction.channelAdminLogEventActionToggleGroupCallSetting | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantJoinByInvite | ChannelAdminLogEventAction.channelAdminLogEventActionExportedInviteDelete | ChannelAdminLogEventAction.channelAdminLogEventActionExportedInviteRevoke | ChannelAdminLogEventAction.channelAdminLogEventActionExportedInviteEdit | ChannelAdminLogEventAction.channelAdminLogEventActionParticipantVolume | ChannelAdminLogEventAction.channelAdminLogEventActionChangeHistoryTTL;
export namespace ChannelAdminLogEventAction {
export type channelAdminLogEventActionChangeTitle = {
@@ -6070,6 +6192,63 @@ export namespace ChannelAdminLogEventAction {
prev_value: number,
new_value: number
};
+
+ export type channelAdminLogEventActionStartGroupCall = {
+ _: 'channelAdminLogEventActionStartGroupCall',
+ call: InputGroupCall
+ };
+
+ export type channelAdminLogEventActionDiscardGroupCall = {
+ _: 'channelAdminLogEventActionDiscardGroupCall',
+ call: InputGroupCall
+ };
+
+ export type channelAdminLogEventActionParticipantMute = {
+ _: 'channelAdminLogEventActionParticipantMute',
+ participant: GroupCallParticipant
+ };
+
+ export type channelAdminLogEventActionParticipantUnmute = {
+ _: 'channelAdminLogEventActionParticipantUnmute',
+ participant: GroupCallParticipant
+ };
+
+ export type channelAdminLogEventActionToggleGroupCallSetting = {
+ _: 'channelAdminLogEventActionToggleGroupCallSetting',
+ join_muted: boolean
+ };
+
+ export type channelAdminLogEventActionParticipantJoinByInvite = {
+ _: 'channelAdminLogEventActionParticipantJoinByInvite',
+ invite: ExportedChatInvite
+ };
+
+ export type channelAdminLogEventActionExportedInviteDelete = {
+ _: 'channelAdminLogEventActionExportedInviteDelete',
+ invite: ExportedChatInvite
+ };
+
+ export type channelAdminLogEventActionExportedInviteRevoke = {
+ _: 'channelAdminLogEventActionExportedInviteRevoke',
+ invite: ExportedChatInvite
+ };
+
+ export type channelAdminLogEventActionExportedInviteEdit = {
+ _: 'channelAdminLogEventActionExportedInviteEdit',
+ prev_invite: ExportedChatInvite,
+ new_invite: ExportedChatInvite
+ };
+
+ export type channelAdminLogEventActionParticipantVolume = {
+ _: 'channelAdminLogEventActionParticipantVolume',
+ participant: GroupCallParticipant
+ };
+
+ export type channelAdminLogEventActionChangeHistoryTTL = {
+ _: 'channelAdminLogEventActionChangeHistoryTTL',
+ prev_value: number,
+ new_value: number
+ };
}
/**
@@ -6125,6 +6304,8 @@ export namespace ChannelAdminLogEventsFilter {
pinned?: true,
edit?: true,
delete?: true,
+ group_call?: true,
+ invites?: true,
}>
};
}
@@ -7182,6 +7363,7 @@ export namespace ChatAdminRights {
add_admins?: true,
anonymous?: true,
manage_call?: true,
+ other?: true,
}>
};
}
@@ -8222,6 +8404,311 @@ export namespace StatsMessageStats {
};
}
+/**
+ * @link https://core.telegram.org/type/GroupCall
+ */
+export type GroupCall = GroupCall.groupCallDiscarded | GroupCall.groupCall;
+
+export namespace GroupCall {
+ export type groupCallDiscarded = {
+ _: 'groupCallDiscarded',
+ id: string,
+ access_hash: string,
+ duration: number
+ };
+
+ export type groupCall = {
+ _: 'groupCall',
+ flags?: number,
+ pFlags?: Partial<{
+ join_muted?: true,
+ can_change_join_muted?: true,
+ join_date_asc?: true,
+ }>,
+ id: string,
+ access_hash: string,
+ participants_count: number,
+ params?: DataJSON,
+ title?: string,
+ stream_dc_id?: number,
+ record_start_date?: number,
+ version: number
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/InputGroupCall
+ */
+export type InputGroupCall = InputGroupCall.inputGroupCall;
+
+export namespace InputGroupCall {
+ export type inputGroupCall = {
+ _: 'inputGroupCall',
+ id: string,
+ access_hash: string
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/GroupCallParticipant
+ */
+export type GroupCallParticipant = GroupCallParticipant.groupCallParticipant;
+
+export namespace GroupCallParticipant {
+ export type groupCallParticipant = {
+ _: 'groupCallParticipant',
+ flags?: number,
+ pFlags?: Partial<{
+ muted?: true,
+ left?: true,
+ can_self_unmute?: true,
+ just_joined?: true,
+ versioned?: true,
+ min?: true,
+ muted_by_you?: true,
+ volume_by_admin?: true,
+ self?: true,
+ }>,
+ peer: Peer,
+ date: number,
+ active_date?: number,
+ source: number,
+ volume?: number,
+ about?: string,
+ raise_hand_rating?: string
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/phone.GroupCall
+ */
+export type PhoneGroupCall = PhoneGroupCall.phoneGroupCall;
+
+export namespace PhoneGroupCall {
+ export type phoneGroupCall = {
+ _: 'phone.groupCall',
+ call: GroupCall,
+ participants: Array,
+ participants_next_offset: string,
+ chats: Array,
+ users: Array
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/phone.GroupParticipants
+ */
+export type PhoneGroupParticipants = PhoneGroupParticipants.phoneGroupParticipants;
+
+export namespace PhoneGroupParticipants {
+ export type phoneGroupParticipants = {
+ _: 'phone.groupParticipants',
+ count: number,
+ participants: Array,
+ next_offset: string,
+ chats: Array,
+ users: Array,
+ version: number
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/InlineQueryPeerType
+ */
+export type InlineQueryPeerType = InlineQueryPeerType.inlineQueryPeerTypeSameBotPM | InlineQueryPeerType.inlineQueryPeerTypePM | InlineQueryPeerType.inlineQueryPeerTypeChat | InlineQueryPeerType.inlineQueryPeerTypeMegagroup | InlineQueryPeerType.inlineQueryPeerTypeBroadcast;
+
+export namespace InlineQueryPeerType {
+ export type inlineQueryPeerTypeSameBotPM = {
+ _: 'inlineQueryPeerTypeSameBotPM'
+ };
+
+ export type inlineQueryPeerTypePM = {
+ _: 'inlineQueryPeerTypePM'
+ };
+
+ export type inlineQueryPeerTypeChat = {
+ _: 'inlineQueryPeerTypeChat'
+ };
+
+ export type inlineQueryPeerTypeMegagroup = {
+ _: 'inlineQueryPeerTypeMegagroup'
+ };
+
+ export type inlineQueryPeerTypeBroadcast = {
+ _: 'inlineQueryPeerTypeBroadcast'
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/messages.HistoryImport
+ */
+export type MessagesHistoryImport = MessagesHistoryImport.messagesHistoryImport;
+
+export namespace MessagesHistoryImport {
+ export type messagesHistoryImport = {
+ _: 'messages.historyImport',
+ id: string
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/messages.HistoryImportParsed
+ */
+export type MessagesHistoryImportParsed = MessagesHistoryImportParsed.messagesHistoryImportParsed;
+
+export namespace MessagesHistoryImportParsed {
+ export type messagesHistoryImportParsed = {
+ _: 'messages.historyImportParsed',
+ flags?: number,
+ pFlags?: Partial<{
+ pm?: true,
+ group?: true,
+ }>,
+ title?: string
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/messages.AffectedFoundMessages
+ */
+export type MessagesAffectedFoundMessages = MessagesAffectedFoundMessages.messagesAffectedFoundMessages;
+
+export namespace MessagesAffectedFoundMessages {
+ export type messagesAffectedFoundMessages = {
+ _: 'messages.affectedFoundMessages',
+ pts: number,
+ pts_count: number,
+ offset: number,
+ messages: Array
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/ChatInviteImporter
+ */
+export type ChatInviteImporter = ChatInviteImporter.chatInviteImporter;
+
+export namespace ChatInviteImporter {
+ export type chatInviteImporter = {
+ _: 'chatInviteImporter',
+ user_id: number,
+ date: number
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/messages.ExportedChatInvites
+ */
+export type MessagesExportedChatInvites = MessagesExportedChatInvites.messagesExportedChatInvites;
+
+export namespace MessagesExportedChatInvites {
+ export type messagesExportedChatInvites = {
+ _: 'messages.exportedChatInvites',
+ count: number,
+ invites: Array,
+ users: Array
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/messages.ExportedChatInvite
+ */
+export type MessagesExportedChatInvite = MessagesExportedChatInvite.messagesExportedChatInvite | MessagesExportedChatInvite.messagesExportedChatInviteReplaced;
+
+export namespace MessagesExportedChatInvite {
+ export type messagesExportedChatInvite = {
+ _: 'messages.exportedChatInvite',
+ invite: ExportedChatInvite,
+ users: Array
+ };
+
+ export type messagesExportedChatInviteReplaced = {
+ _: 'messages.exportedChatInviteReplaced',
+ invite: ExportedChatInvite,
+ new_invite: ExportedChatInvite,
+ users: Array
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/messages.ChatInviteImporters
+ */
+export type MessagesChatInviteImporters = MessagesChatInviteImporters.messagesChatInviteImporters;
+
+export namespace MessagesChatInviteImporters {
+ export type messagesChatInviteImporters = {
+ _: 'messages.chatInviteImporters',
+ count: number,
+ importers: Array,
+ users: Array
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/ChatAdminWithInvites
+ */
+export type ChatAdminWithInvites = ChatAdminWithInvites.chatAdminWithInvites;
+
+export namespace ChatAdminWithInvites {
+ export type chatAdminWithInvites = {
+ _: 'chatAdminWithInvites',
+ admin_id: number,
+ invites_count: number,
+ revoked_invites_count: number
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/messages.ChatAdminsWithInvites
+ */
+export type MessagesChatAdminsWithInvites = MessagesChatAdminsWithInvites.messagesChatAdminsWithInvites;
+
+export namespace MessagesChatAdminsWithInvites {
+ export type messagesChatAdminsWithInvites = {
+ _: 'messages.chatAdminsWithInvites',
+ admins: Array,
+ users: Array
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/messages.CheckedHistoryImportPeer
+ */
+export type MessagesCheckedHistoryImportPeer = MessagesCheckedHistoryImportPeer.messagesCheckedHistoryImportPeer;
+
+export namespace MessagesCheckedHistoryImportPeer {
+ export type messagesCheckedHistoryImportPeer = {
+ _: 'messages.checkedHistoryImportPeer',
+ confirm_text: string
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/phone.JoinAsPeers
+ */
+export type PhoneJoinAsPeers = PhoneJoinAsPeers.phoneJoinAsPeers;
+
+export namespace PhoneJoinAsPeers {
+ export type phoneJoinAsPeers = {
+ _: 'phone.joinAsPeers',
+ peers: Array,
+ chats: Array,
+ users: Array
+ };
+}
+
+/**
+ * @link https://core.telegram.org/type/phone.ExportedGroupCallInvite
+ */
+export type PhoneExportedGroupCallInvite = PhoneExportedGroupCallInvite.phoneExportedGroupCallInvite;
+
+export namespace PhoneExportedGroupCallInvite {
+ export type phoneExportedGroupCallInvite = {
+ _: 'phone.exportedGroupCallInvite',
+ link: string
+ };
+}
+
export interface ConstructorDeclMap {
'error': Error.error,
'inputPeerEmpty': InputPeer.inputPeerEmpty,
@@ -8462,7 +8949,6 @@ export interface ConstructorDeclMap {
'inputMediaVenue': InputMedia.inputMediaVenue,
'messageMediaVenue': MessageMedia.messageMediaVenue,
'receivedNotifyMessage': ReceivedNotifyMessage.receivedNotifyMessage,
- 'chatInviteEmpty': ExportedChatInvite.chatInviteEmpty,
'chatInviteExported': ExportedChatInvite.chatInviteExported,
'chatInviteAlready': ChatInvite.chatInviteAlready,
'chatInvite': ChatInvite.chatInvite,
@@ -8770,7 +9256,6 @@ export interface ConstructorDeclMap {
'channelAdminLogEventActionChangeStickerSet': ChannelAdminLogEventAction.channelAdminLogEventActionChangeStickerSet,
'messageActionCustomAction': MessageAction.messageActionCustomAction,
'inputPaymentCredentialsApplePay': InputPaymentCredentials.inputPaymentCredentialsApplePay,
- 'inputPaymentCredentialsAndroidPay': InputPaymentCredentials.inputPaymentCredentialsAndroidPay,
'inputMessagesFilterGeo': MessagesFilter.inputMessagesFilterGeo,
'inputMessagesFilterContacts': MessagesFilter.inputMessagesFilterContacts,
'updateChannelAvailableMessages': Update.updateChannelAvailableMessages,
@@ -9042,7 +9527,6 @@ export interface ConstructorDeclMap {
'statsGroupTopInviter': StatsGroupTopInviter.statsGroupTopInviter,
'stats.megagroupStats': StatsMegagroupStats.statsMegagroupStats,
'globalPrivacySettings': GlobalPrivacySettings.globalPrivacySettings,
- 'updateChannelParticipant': Update.updateChannelParticipant,
'phoneConnectionWebrtc': PhoneConnection.phoneConnectionWebrtc,
'help.countryCode': HelpCountryCode.helpCountryCode,
'help.country': HelpCountry.helpCountry,
@@ -9069,6 +9553,56 @@ export interface ConstructorDeclMap {
'stats.messageStats': StatsMessageStats.statsMessageStats,
'messageActionGeoProximityReached': MessageAction.messageActionGeoProximityReached,
'photoPathSize': PhotoSize.photoPathSize,
+ 'speakingInGroupCallAction': SendMessageAction.speakingInGroupCallAction,
+ 'groupCallDiscarded': GroupCall.groupCallDiscarded,
+ 'groupCall': GroupCall.groupCall,
+ 'inputGroupCall': InputGroupCall.inputGroupCall,
+ 'messageActionGroupCall': MessageAction.messageActionGroupCall,
+ 'messageActionInviteToGroupCall': MessageAction.messageActionInviteToGroupCall,
+ 'groupCallParticipant': GroupCallParticipant.groupCallParticipant,
+ 'updateChat': Update.updateChat,
+ 'updateGroupCallParticipants': Update.updateGroupCallParticipants,
+ 'updateGroupCall': Update.updateGroupCall,
+ 'phone.groupCall': PhoneGroupCall.phoneGroupCall,
+ 'phone.groupParticipants': PhoneGroupParticipants.phoneGroupParticipants,
+ 'inlineQueryPeerTypeSameBotPM': InlineQueryPeerType.inlineQueryPeerTypeSameBotPM,
+ 'inlineQueryPeerTypePM': InlineQueryPeerType.inlineQueryPeerTypePM,
+ 'inlineQueryPeerTypeChat': InlineQueryPeerType.inlineQueryPeerTypeChat,
+ 'inlineQueryPeerTypeMegagroup': InlineQueryPeerType.inlineQueryPeerTypeMegagroup,
+ 'inlineQueryPeerTypeBroadcast': InlineQueryPeerType.inlineQueryPeerTypeBroadcast,
+ 'channelAdminLogEventActionStartGroupCall': ChannelAdminLogEventAction.channelAdminLogEventActionStartGroupCall,
+ 'channelAdminLogEventActionDiscardGroupCall': ChannelAdminLogEventAction.channelAdminLogEventActionDiscardGroupCall,
+ 'channelAdminLogEventActionParticipantMute': ChannelAdminLogEventAction.channelAdminLogEventActionParticipantMute,
+ 'channelAdminLogEventActionParticipantUnmute': ChannelAdminLogEventAction.channelAdminLogEventActionParticipantUnmute,
+ 'channelAdminLogEventActionToggleGroupCallSetting': ChannelAdminLogEventAction.channelAdminLogEventActionToggleGroupCallSetting,
+ 'inputPaymentCredentialsGooglePay': InputPaymentCredentials.inputPaymentCredentialsGooglePay,
+ 'messages.historyImport': MessagesHistoryImport.messagesHistoryImport,
+ 'sendMessageHistoryImportAction': SendMessageAction.sendMessageHistoryImportAction,
+ 'messages.historyImportParsed': MessagesHistoryImportParsed.messagesHistoryImportParsed,
+ 'inputReportReasonFake': ReportReason.inputReportReasonFake,
+ 'messages.affectedFoundMessages': MessagesAffectedFoundMessages.messagesAffectedFoundMessages,
+ 'messageActionSetMessagesTTL': MessageAction.messageActionSetMessagesTTL,
+ 'updatePeerHistoryTTL': Update.updatePeerHistoryTTL,
+ 'updateChatParticipant': Update.updateChatParticipant,
+ 'updateChannelParticipant': Update.updateChannelParticipant,
+ 'updateBotStopped': Update.updateBotStopped,
+ 'chatInviteImporter': ChatInviteImporter.chatInviteImporter,
+ 'messages.exportedChatInvites': MessagesExportedChatInvites.messagesExportedChatInvites,
+ 'messages.exportedChatInvite': MessagesExportedChatInvite.messagesExportedChatInvite,
+ 'messages.exportedChatInviteReplaced': MessagesExportedChatInvite.messagesExportedChatInviteReplaced,
+ 'messages.chatInviteImporters': MessagesChatInviteImporters.messagesChatInviteImporters,
+ 'chatAdminWithInvites': ChatAdminWithInvites.chatAdminWithInvites,
+ 'messages.chatAdminsWithInvites': MessagesChatAdminsWithInvites.messagesChatAdminsWithInvites,
+ 'channelAdminLogEventActionParticipantJoinByInvite': ChannelAdminLogEventAction.channelAdminLogEventActionParticipantJoinByInvite,
+ 'channelAdminLogEventActionExportedInviteDelete': ChannelAdminLogEventAction.channelAdminLogEventActionExportedInviteDelete,
+ 'channelAdminLogEventActionExportedInviteRevoke': ChannelAdminLogEventAction.channelAdminLogEventActionExportedInviteRevoke,
+ 'channelAdminLogEventActionExportedInviteEdit': ChannelAdminLogEventAction.channelAdminLogEventActionExportedInviteEdit,
+ 'channelAdminLogEventActionParticipantVolume': ChannelAdminLogEventAction.channelAdminLogEventActionParticipantVolume,
+ 'channelAdminLogEventActionChangeHistoryTTL': ChannelAdminLogEventAction.channelAdminLogEventActionChangeHistoryTTL,
+ 'messages.checkedHistoryImportPeer': MessagesCheckedHistoryImportPeer.messagesCheckedHistoryImportPeer,
+ 'inputGroupCallStream': InputFileLocation.inputGroupCallStream,
+ 'phone.joinAsPeers': PhoneJoinAsPeers.phoneJoinAsPeers,
+ 'phone.exportedGroupCallInvite': PhoneExportedGroupCallInvite.phoneExportedGroupCallInvite,
'messageEntityEmoji': MessageEntity.messageEntityEmoji,
'messageEntityHighlight': MessageEntity.messageEntityHighlight,
'messageEntityLinebreak': MessageEntity.messageEntityLinebreak,
@@ -9141,7 +9675,7 @@ export type AuthBindTempAuthKey = {
export type AccountRegisterDevice = {
flags?: number,
- no_muted?: true,
+ no_muted?: boolean,
token_type: number,
token: string,
app_sandbox: boolean,
@@ -9185,7 +9719,8 @@ export type AccountGetWallPapers = {
export type AccountReportPeer = {
peer: InputPeer,
- reason: ReportReason
+ reason: ReportReason,
+ message: string
};
export type UsersGetUsers = {
@@ -9239,7 +9774,7 @@ export type MessagesGetMessages = {
export type MessagesGetDialogs = {
flags?: number,
- exclude_pinned?: true,
+ exclude_pinned?: boolean,
folder_id?: number,
offset_date: number,
offset_id: number,
@@ -9283,15 +9818,15 @@ export type MessagesReadHistory = {
export type MessagesDeleteHistory = {
flags?: number,
- just_clear?: true,
- revoke?: true,
+ just_clear?: boolean,
+ revoke?: boolean,
peer: InputPeer,
max_id: number
};
export type MessagesDeleteMessages = {
flags?: number,
- revoke?: true,
+ revoke?: boolean,
id: Array
};
@@ -9308,10 +9843,10 @@ export type MessagesSetTyping = {
export type MessagesSendMessage = {
flags?: number,
- no_webpage?: true,
- silent?: true,
- background?: true,
- clear_draft?: true,
+ no_webpage?: boolean,
+ silent?: boolean,
+ background?: boolean,
+ clear_draft?: boolean,
peer: InputPeer,
reply_to_msg_id?: number,
message: string,
@@ -9323,9 +9858,9 @@ export type MessagesSendMessage = {
export type MessagesSendMedia = {
flags?: number,
- silent?: true,
- background?: true,
- clear_draft?: true,
+ silent?: boolean,
+ background?: boolean,
+ clear_draft?: boolean,
peer: InputPeer,
reply_to_msg_id?: number,
media: InputMedia,
@@ -9338,9 +9873,9 @@ export type MessagesSendMedia = {
export type MessagesForwardMessages = {
flags?: number,
- silent?: true,
- background?: true,
- with_my_score?: true,
+ silent?: boolean,
+ background?: boolean,
+ with_my_score?: boolean,
from_peer: InputPeer,
id: Array,
random_id: Array,
@@ -9359,7 +9894,8 @@ export type MessagesGetPeerSettings = {
export type MessagesReport = {
peer: InputPeer,
id: Array,
- reason: ReportReason
+ reason: ReportReason,
+ message: string
};
export type MessagesGetChats = {
@@ -9387,6 +9923,8 @@ export type MessagesAddChatUser = {
};
export type MessagesDeleteChatUser = {
+ flags?: number,
+ revoke_history?: boolean,
chat_id: number,
user_id: InputUser
};
@@ -9431,8 +9969,8 @@ export type UploadSaveFilePart = {
export type UploadGetFile = {
flags?: number,
- precise?: true,
- cdn_supported?: true,
+ precise?: boolean,
+ cdn_supported?: boolean,
location: InputFileLocation,
offset: number,
limit: number
@@ -9479,6 +10017,8 @@ export type MessagesAcceptEncryption = {
};
export type MessagesDiscardEncryption = {
+ flags?: number,
+ delete_history?: boolean,
chat_id: number
};
@@ -9494,7 +10034,7 @@ export type MessagesReadEncryptedHistory = {
export type MessagesSendEncrypted = {
flags?: number,
- silent?: true,
+ silent?: boolean,
peer: InputEncryptedChat,
random_id: string,
data: Uint8Array
@@ -9502,7 +10042,7 @@ export type MessagesSendEncrypted = {
export type MessagesSendEncryptedFile = {
flags?: number,
- silent?: true,
+ silent?: boolean,
peer: InputEncryptedChat,
random_id: string,
data: Uint8Array,
@@ -9670,7 +10210,11 @@ export type InvokeWithoutUpdates = {
};
export type MessagesExportChatInvite = {
- peer: InputPeer
+ flags?: number,
+ legacy_revoke_permanent?: boolean,
+ peer: InputPeer,
+ expire_date?: number,
+ usage_limit?: number
};
export type MessagesCheckChatInvite = {
@@ -9760,8 +10304,9 @@ export type ChannelsGetFullChannel = {
export type ChannelsCreateChannel = {
flags?: number,
- broadcast?: true,
- megagroup?: true,
+ broadcast?: boolean,
+ megagroup?: boolean,
+ for_import?: boolean,
title: string,
about: string,
geo_point?: InputGeoPoint,
@@ -9814,7 +10359,7 @@ export type ChannelsDeleteChannel = {
export type UpdatesGetChannelDifference = {
flags?: number,
- force?: true,
+ force?: boolean,
channel: InputChannel,
filter: ChannelMessagesFilter,
pts: number,
@@ -9846,7 +10391,7 @@ export type MessagesSearchGlobal = {
export type MessagesReorderStickerSets = {
flags?: number,
- masks?: true,
+ masks?: boolean,
order: Array
};
@@ -9876,8 +10421,8 @@ export type MessagesGetInlineBotResults = {
export type MessagesSetInlineBotResults = {
flags?: number,
- gallery?: true,
- private?: true,
+ gallery?: boolean,
+ private?: boolean,
query_id: string,
results: Array,
cache_time: number,
@@ -9887,10 +10432,10 @@ export type MessagesSetInlineBotResults = {
export type MessagesSendInlineBotResult = {
flags?: number,
- silent?: true,
- background?: true,
- clear_draft?: true,
- hide_via?: true,
+ silent?: boolean,
+ background?: boolean,
+ clear_draft?: boolean,
+ hide_via?: boolean,
peer: InputPeer,
reply_to_msg_id?: number,
random_id: string,
@@ -9901,8 +10446,8 @@ export type MessagesSendInlineBotResult = {
export type ChannelsExportMessageLink = {
flags?: number,
- grouped?: true,
- thread?: true,
+ grouped?: boolean,
+ thread?: boolean,
channel: InputChannel,
id: number
};
@@ -9929,7 +10474,7 @@ export type MessagesGetMessageEditData = {
export type MessagesEditMessage = {
flags?: number,
- no_webpage?: true,
+ no_webpage?: boolean,
peer: InputPeer,
id: number,
message?: string,
@@ -9941,7 +10486,7 @@ export type MessagesEditMessage = {
export type MessagesEditInlineBotMessage = {
flags?: number,
- no_webpage?: true,
+ no_webpage?: boolean,
id: InputBotInlineMessageID,
message?: string,
media?: InputMedia,
@@ -9951,7 +10496,7 @@ export type MessagesEditInlineBotMessage = {
export type MessagesGetBotCallbackAnswer = {
flags?: number,
- game?: true,
+ game?: boolean,
peer: InputPeer,
msg_id: number,
data?: Uint8Array,
@@ -9960,7 +10505,7 @@ export type MessagesGetBotCallbackAnswer = {
export type MessagesSetBotCallbackAnswer = {
flags?: number,
- alert?: true,
+ alert?: boolean,
query_id: string,
message?: string,
url?: string,
@@ -9969,14 +10514,14 @@ export type MessagesSetBotCallbackAnswer = {
export type ContactsGetTopPeers = {
flags?: number,
- correspondents?: true,
- bots_pm?: true,
- bots_inline?: true,
- phone_calls?: true,
- forward_users?: true,
- forward_chats?: true,
- groups?: true,
- channels?: true,
+ correspondents?: boolean,
+ bots_pm?: boolean,
+ bots_inline?: boolean,
+ phone_calls?: boolean,
+ forward_users?: boolean,
+ forward_chats?: boolean,
+ groups?: boolean,
+ channels?: boolean,
offset: number,
limit: number,
hash: number
@@ -9993,7 +10538,7 @@ export type MessagesGetPeerDialogs = {
export type MessagesSaveDraft = {
flags?: number,
- no_webpage?: true,
+ no_webpage?: boolean,
reply_to_msg_id?: number,
peer: InputPeer,
message: string,
@@ -10014,25 +10559,25 @@ export type MessagesReadFeaturedStickers = {
export type MessagesGetRecentStickers = {
flags?: number,
- attached?: true,
+ attached?: boolean,
hash: number
};
export type MessagesSaveRecentSticker = {
flags?: number,
- attached?: true,
+ attached?: boolean,
id: InputDocument,
unsave: boolean
};
export type MessagesClearRecentStickers = {
flags?: number,
- attached?: true
+ attached?: boolean
};
export type MessagesGetArchivedStickers = {
flags?: number,
- masks?: true,
+ masks?: boolean,
offset_id: string,
limit: number
};
@@ -10049,8 +10594,8 @@ export type AccountConfirmPhone = {
export type ChannelsGetAdminedPublicChannels = {
flags?: number,
- by_location?: true,
- check_limit?: true
+ by_location?: boolean,
+ check_limit?: boolean
};
export type MessagesGetMaskStickers = {
@@ -10067,8 +10612,8 @@ export type AuthDropTempAuthKeys = {
export type MessagesSetGameScore = {
flags?: number,
- edit_message?: true,
- force?: true,
+ edit_message?: boolean,
+ force?: boolean,
peer: InputPeer,
id: number,
user_id: InputUser,
@@ -10077,8 +10622,8 @@ export type MessagesSetGameScore = {
export type MessagesSetInlineGameScore = {
flags?: number,
- edit_message?: true,
- force?: true,
+ edit_message?: boolean,
+ force?: boolean,
id: InputBotInlineMessageID,
user_id: InputUser,
score: number
@@ -10117,13 +10662,13 @@ export type MessagesGetWebPage = {
export type MessagesToggleDialogPin = {
flags?: number,
- pinned?: true,
+ pinned?: boolean,
peer: InputDialogPeer
};
export type MessagesReorderPinnedDialogs = {
flags?: number,
- force?: true,
+ force?: boolean,
folder_id: number,
order: Array
};
@@ -10158,7 +10703,7 @@ export type PaymentsGetPaymentReceipt = {
export type PaymentsValidateRequestedInfo = {
flags?: number,
- save?: true,
+ save?: boolean,
msg_id: number,
info: PaymentRequestedInfo
};
@@ -10182,8 +10727,8 @@ export type PaymentsGetSavedInfo = {
export type PaymentsClearSavedInfo = {
flags?: number,
- credentials?: true,
- info?: true
+ credentials?: boolean,
+ info?: boolean
};
export type MessagesSetBotShippingResults = {
@@ -10195,15 +10740,15 @@ export type MessagesSetBotShippingResults = {
export type MessagesSetBotPrecheckoutResults = {
flags?: number,
- success?: true,
+ success?: boolean,
query_id: string,
error?: string
};
export type StickersCreateStickerSet = {
flags?: number,
- masks?: true,
- animated?: true,
+ masks?: boolean,
+ animated?: boolean,
user_id: InputUser,
title: string,
short_name: string,
@@ -10236,7 +10781,7 @@ export type PhoneGetCallConfig = {
export type PhoneRequestCall = {
flags?: number,
- video?: true,
+ video?: boolean,
user_id: InputUser,
random_id: number,
g_a_hash: Uint8Array,
@@ -10262,7 +10807,7 @@ export type PhoneReceivedCall = {
export type PhoneDiscardCall = {
flags?: number,
- video?: true,
+ video?: boolean,
peer: InputPhoneCall,
duration: number,
reason: PhoneCallDiscardReason,
@@ -10271,7 +10816,7 @@ export type PhoneDiscardCall = {
export type PhoneSetCallRating = {
flags?: number,
- user_initiative?: true,
+ user_initiative?: boolean,
peer: InputPhoneCall,
rating: number,
comment: string
@@ -10404,9 +10949,9 @@ export type MessagesGetRecentLocations = {
export type MessagesSendMultiMedia = {
flags?: number,
- silent?: true,
- background?: true,
- clear_draft?: true,
+ silent?: boolean,
+ background?: boolean,
+ clear_draft?: boolean,
peer: InputPeer,
reply_to_msg_id?: number,
multi_media: Array,
@@ -10432,7 +10977,7 @@ export type AccountResetWebAuthorizations = {
export type MessagesSearchStickerSets = {
flags?: number,
- exclude_featured?: true,
+ exclude_featured?: boolean,
q: string,
hash: number
};
@@ -10520,18 +11065,18 @@ export type ChannelsGetLeftChannels = {
export type AccountInitTakeoutSession = {
flags?: number,
- contacts?: true,
- message_users?: true,
- message_chats?: true,
- message_megagroups?: true,
- message_channels?: true,
- files?: true,
+ contacts?: boolean,
+ message_users?: boolean,
+ message_chats?: boolean,
+ message_megagroups?: boolean,
+ message_channels?: boolean,
+ files?: boolean,
file_max_size?: number
};
export type AccountFinishTakeoutSession = {
flags?: number,
- success?: true
+ success?: boolean
};
export type MessagesGetSplitRanges = {
@@ -10550,7 +11095,7 @@ export type InvokeWithTakeout = {
export type MessagesMarkDialogUnread = {
flags?: number,
- unread?: true,
+ unread?: boolean,
peer: InputDialogPeer
};
@@ -10585,9 +11130,9 @@ export type LangpackGetLanguage = {
export type MessagesUpdatePinnedMessage = {
flags?: number,
- silent?: true,
- unpin?: true,
- pm_oneside?: true,
+ silent?: boolean,
+ unpin?: boolean,
+ pm_oneside?: boolean,
peer: InputPeer,
id: number
};
@@ -10628,7 +11173,7 @@ export type AccountSetContactSignUpNotification = {
export type AccountGetNotifyExceptions = {
flags?: number,
- compare_sound?: true,
+ compare_sound?: boolean,
peer?: InputNotifyPeer
};
@@ -10649,7 +11194,7 @@ export type MessagesGetOnlines = {
export type MessagesGetStatsURL = {
flags?: number,
- dark?: true,
+ dark?: boolean,
peer: InputPeer,
params: string
};
@@ -10695,8 +11240,8 @@ export type AccountGetAutoDownloadSettings = {
export type AccountSaveAutoDownloadSettings = {
flags?: number,
- low?: true,
- high?: true,
+ low?: boolean,
+ high?: boolean,
settings: AutoDownloadSettings
};
@@ -10740,17 +11285,20 @@ export type ChannelsSetDiscussionGroup = {
};
export type MessagesRequestUrlAuth = {
- peer: InputPeer,
- msg_id: number,
- button_id: number
+ flags?: number,
+ peer?: InputPeer,
+ msg_id?: number,
+ button_id?: number,
+ url?: string
};
export type MessagesAcceptUrlAuth = {
flags?: number,
- write_allowed?: true,
- peer: InputPeer,
- msg_id: number,
- button_id: number
+ write_allowed?: boolean,
+ peer?: InputPeer,
+ msg_id?: number,
+ button_id?: number,
+ url?: string
};
export type MessagesHidePeerSettingsBar = {
@@ -10759,7 +11307,7 @@ export type MessagesHidePeerSettingsBar = {
export type ContactsAddContact = {
flags?: number,
- add_phone_privacy_exception?: true,
+ add_phone_privacy_exception?: boolean,
id: InputUser,
first_name: string,
last_name: string,
@@ -10778,7 +11326,7 @@ export type ChannelsEditCreator = {
export type ContactsGetLocated = {
flags?: number,
- background?: true,
+ background?: boolean,
geo_point: InputGeoPoint,
self_expires?: number
};
@@ -10847,7 +11395,7 @@ export type AccountSaveTheme = {
export type AccountInstallTheme = {
flags?: number,
- dark?: true,
+ dark?: boolean,
format?: string,
theme?: InputTheme
};
@@ -10879,7 +11427,7 @@ export type AuthAcceptLoginToken = {
export type AccountSetContentSettings = {
flags?: number,
- sensitive_enabled?: true
+ sensitive_enabled?: boolean
};
export type AccountGetContentSettings = {
@@ -10905,9 +11453,9 @@ export type MessagesGetPollVotes = {
export type MessagesToggleStickerSets = {
flags?: number,
- uninstall?: true,
- archive?: true,
- unarchive?: true,
+ uninstall?: boolean,
+ archive?: boolean,
+ unarchive?: boolean,
stickersets: Array
};
@@ -10935,7 +11483,7 @@ export type MessagesUpdateDialogFiltersOrder = {
export type StatsGetBroadcastStats = {
flags?: number,
- dark?: true,
+ dark?: boolean,
channel: InputChannel
};
@@ -10975,7 +11523,7 @@ export type PhoneSendSignalingData = {
export type StatsGetMegagroupStats = {
flags?: number,
- dark?: true,
+ dark?: boolean,
channel: InputChannel
};
@@ -10988,6 +11536,7 @@ export type AccountSetGlobalPrivacySettings = {
};
export type HelpDismissSuggestion = {
+ peer: InputPeer,
suggestion: string
};
@@ -11021,9 +11570,9 @@ export type MessagesReadDiscussion = {
export type ContactsBlockFromReplies = {
flags?: number,
- delete_message?: true,
- delete_history?: true,
- report_spam?: true,
+ delete_message?: boolean,
+ delete_history?: boolean,
+ report_spam?: boolean,
msg_id: number
};
@@ -11038,7 +11587,7 @@ export type StatsGetMessagePublicForwards = {
export type StatsGetMessageStats = {
flags?: number,
- dark?: true,
+ dark?: boolean,
channel: InputChannel,
msg_id: number
};
@@ -11047,6 +11596,186 @@ export type MessagesUnpinAllMessages = {
peer: InputPeer
};
+export type PhoneCreateGroupCall = {
+ peer: InputPeer,
+ random_id: number
+};
+
+export type PhoneJoinGroupCall = {
+ flags?: number,
+ muted?: boolean,
+ call: InputGroupCall,
+ join_as: InputPeer,
+ invite_hash?: string,
+ params: DataJSON
+};
+
+export type PhoneLeaveGroupCall = {
+ call: InputGroupCall,
+ source: number
+};
+
+export type PhoneInviteToGroupCall = {
+ call: InputGroupCall,
+ users: Array
+};
+
+export type PhoneDiscardGroupCall = {
+ call: InputGroupCall
+};
+
+export type PhoneToggleGroupCallSettings = {
+ flags?: number,
+ reset_invite_hash?: boolean,
+ call: InputGroupCall,
+ join_muted?: boolean
+};
+
+export type PhoneGetGroupCall = {
+ call: InputGroupCall
+};
+
+export type PhoneGetGroupParticipants = {
+ call: InputGroupCall,
+ ids: Array,
+ sources: Array,
+ offset: string,
+ limit: number
+};
+
+export type PhoneCheckGroupCall = {
+ call: InputGroupCall,
+ source: number
+};
+
+export type MessagesDeleteChat = {
+ chat_id: number
+};
+
+export type MessagesDeletePhoneCallHistory = {
+ flags?: number,
+ revoke?: boolean
+};
+
+export type MessagesCheckHistoryImport = {
+ import_head: string
+};
+
+export type MessagesInitHistoryImport = {
+ peer: InputPeer,
+ file: InputFile,
+ media_count: number
+};
+
+export type MessagesUploadImportedMedia = {
+ peer: InputPeer,
+ import_id: string,
+ file_name: string,
+ media: InputMedia
+};
+
+export type MessagesStartHistoryImport = {
+ peer: InputPeer,
+ import_id: string
+};
+
+export type MessagesGetExportedChatInvites = {
+ flags?: number,
+ revoked?: boolean,
+ peer: InputPeer,
+ admin_id: InputUser,
+ offset_date?: number,
+ offset_link?: string,
+ limit: number
+};
+
+export type MessagesGetExportedChatInvite = {
+ peer: InputPeer,
+ link: string
+};
+
+export type MessagesEditExportedChatInvite = {
+ flags?: number,
+ revoked?: boolean,
+ peer: InputPeer,
+ link: string,
+ expire_date?: number,
+ usage_limit?: number
+};
+
+export type MessagesDeleteRevokedExportedChatInvites = {
+ peer: InputPeer,
+ admin_id: InputUser
+};
+
+export type MessagesDeleteExportedChatInvite = {
+ peer: InputPeer,
+ link: string
+};
+
+export type MessagesGetAdminsWithInvites = {
+ peer: InputPeer
+};
+
+export type MessagesGetChatInviteImporters = {
+ peer: InputPeer,
+ link: string,
+ offset_date: number,
+ offset_user: InputUser,
+ limit: number
+};
+
+export type MessagesSetHistoryTTL = {
+ peer: InputPeer,
+ period: number
+};
+
+export type AccountReportProfilePhoto = {
+ peer: InputPeer,
+ photo_id: InputPhoto,
+ reason: ReportReason,
+ message: string
+};
+
+export type ChannelsConvertToGigagroup = {
+ channel: InputChannel
+};
+
+export type MessagesCheckHistoryImportPeer = {
+ peer: InputPeer
+};
+
+export type PhoneToggleGroupCallRecord = {
+ flags?: number,
+ start?: boolean,
+ call: InputGroupCall,
+ title?: string
+};
+
+export type PhoneEditGroupCallParticipant = {
+ flags?: number,
+ muted?: boolean,
+ call: InputGroupCall,
+ participant: InputPeer,
+ volume?: number,
+ raise_hand?: boolean
+};
+
+export type PhoneEditGroupCallTitle = {
+ call: InputGroupCall,
+ title: string
+};
+
+export type PhoneGetGroupCallJoinAs = {
+ peer: InputPeer
+};
+
+export type PhoneExportGroupCallInvite = {
+ flags?: number,
+ can_self_unmute?: boolean,
+ call: InputGroupCall
+};
+
export interface MethodDeclMap {
'invokeAfterMsg': {req: InvokeAfterMsg, res: any},
'invokeAfterMsgs': {req: InvokeAfterMsgs, res: any},
@@ -11398,5 +12127,36 @@ export interface MethodDeclMap {
'stats.getMessagePublicForwards': {req: StatsGetMessagePublicForwards, res: MessagesMessages},
'stats.getMessageStats': {req: StatsGetMessageStats, res: StatsMessageStats},
'messages.unpinAllMessages': {req: MessagesUnpinAllMessages, res: MessagesAffectedHistory},
+ 'phone.createGroupCall': {req: PhoneCreateGroupCall, res: Updates},
+ 'phone.joinGroupCall': {req: PhoneJoinGroupCall, res: Updates},
+ 'phone.leaveGroupCall': {req: PhoneLeaveGroupCall, res: Updates},
+ 'phone.inviteToGroupCall': {req: PhoneInviteToGroupCall, res: Updates},
+ 'phone.discardGroupCall': {req: PhoneDiscardGroupCall, res: Updates},
+ 'phone.toggleGroupCallSettings': {req: PhoneToggleGroupCallSettings, res: Updates},
+ 'phone.getGroupCall': {req: PhoneGetGroupCall, res: PhoneGroupCall},
+ 'phone.getGroupParticipants': {req: PhoneGetGroupParticipants, res: PhoneGroupParticipants},
+ 'phone.checkGroupCall': {req: PhoneCheckGroupCall, res: boolean},
+ 'messages.deleteChat': {req: MessagesDeleteChat, res: boolean},
+ 'messages.deletePhoneCallHistory': {req: MessagesDeletePhoneCallHistory, res: MessagesAffectedFoundMessages},
+ 'messages.checkHistoryImport': {req: MessagesCheckHistoryImport, res: MessagesHistoryImportParsed},
+ 'messages.initHistoryImport': {req: MessagesInitHistoryImport, res: MessagesHistoryImport},
+ 'messages.uploadImportedMedia': {req: MessagesUploadImportedMedia, res: MessageMedia},
+ 'messages.startHistoryImport': {req: MessagesStartHistoryImport, res: boolean},
+ 'messages.getExportedChatInvites': {req: MessagesGetExportedChatInvites, res: MessagesExportedChatInvites},
+ 'messages.getExportedChatInvite': {req: MessagesGetExportedChatInvite, res: MessagesExportedChatInvite},
+ 'messages.editExportedChatInvite': {req: MessagesEditExportedChatInvite, res: MessagesExportedChatInvite},
+ 'messages.deleteRevokedExportedChatInvites': {req: MessagesDeleteRevokedExportedChatInvites, res: boolean},
+ 'messages.deleteExportedChatInvite': {req: MessagesDeleteExportedChatInvite, res: boolean},
+ 'messages.getAdminsWithInvites': {req: MessagesGetAdminsWithInvites, res: MessagesChatAdminsWithInvites},
+ 'messages.getChatInviteImporters': {req: MessagesGetChatInviteImporters, res: MessagesChatInviteImporters},
+ 'messages.setHistoryTTL': {req: MessagesSetHistoryTTL, res: Updates},
+ 'account.reportProfilePhoto': {req: AccountReportProfilePhoto, res: boolean},
+ 'channels.convertToGigagroup': {req: ChannelsConvertToGigagroup, res: Updates},
+ 'messages.checkHistoryImportPeer': {req: MessagesCheckHistoryImportPeer, res: MessagesCheckedHistoryImportPeer},
+ 'phone.toggleGroupCallRecord': {req: PhoneToggleGroupCallRecord, res: Updates},
+ 'phone.editGroupCallParticipant': {req: PhoneEditGroupCallParticipant, res: Updates},
+ 'phone.editGroupCallTitle': {req: PhoneEditGroupCallTitle, res: Updates},
+ 'phone.getGroupCallJoinAs': {req: PhoneGetGroupCallJoinAs, res: PhoneJoinAsPeers},
+ 'phone.exportGroupCallInvite': {req: PhoneExportGroupCallInvite, res: PhoneExportedGroupCallInvite},
}
diff --git a/src/lib/appManagers/appChatsManager.ts b/src/lib/appManagers/appChatsManager.ts
index 74343ad7..8c370eac 100644
--- a/src/lib/appManagers/appChatsManager.ts
+++ b/src/lib/appManagers/appChatsManager.ts
@@ -62,16 +62,17 @@ export class AppChatsManager {
case 'updateUserTyping':
case 'updateChatUserTyping': {
- if(rootScope.myId === update.user_id) {
+ const fromId = (update as Update.updateUserTyping).user_id || appPeersManager.getPeerId((update as Update.updateChatUserTyping).from_id);
+ if(rootScope.myId === fromId) {
return;
}
- const peerId = update._ === 'updateUserTyping' ? update.user_id : -update.chat_id;
+ const peerId = update._ === 'updateUserTyping' ? fromId : -update.chat_id;
const typings = this.typingsInPeer[peerId] ?? (this.typingsInPeer[peerId] = []);
- let typing = typings.find(t => t.userId === update.user_id);
+ let typing = typings.find(t => t.userId === fromId);
if(!typing) {
typing = {
- userId: update.user_id
+ userId: fromId
};
typings.push(typing);
@@ -81,7 +82,7 @@ export class AppChatsManager {
typing.action = update.action;
- if(!appUsersManager.hasUser(update.user_id)) {
+ if(!appUsersManager.hasUser(fromId)) {
if(update._ === 'updateChatUserTyping') {
if(update.chat_id && appChatsManager.hasChat(update.chat_id) && !appChatsManager.isChannel(update.chat_id)) {
appProfileManager.getChatFull(update.chat_id);
@@ -91,13 +92,13 @@ export class AppChatsManager {
//return;
}
- appUsersManager.forceUserOnline(update.user_id);
+ appUsersManager.forceUserOnline(fromId);
if(typing.timeout !== undefined) clearTimeout(typing.timeout);
typing.timeout = window.setTimeout(() => {
delete typing.timeout;
- typings.findAndSplice(t => t.userId === update.user_id);
+ typings.findAndSplice(t => t.userId === fromId);
rootScope.broadcast('peer_typings', {peerId, typings});
@@ -571,22 +572,36 @@ export class AppChatsManager {
}).then(this.onChatUpdated.bind(this, id));
}
- public leaveChat(id: number) {
- return this.deleteChatUser(id, appUsersManager.getSelf().id).then(() => {
+ public leaveChat(id: number, flushHistory = true) {
+ let promise: Promise = this.deleteChatUser(id, appUsersManager.getSelf().id)
+ if(flushHistory) promise = promise.then(() => {
return appMessagesManager.flushHistory(-id);
});
+ return promise;;
}
public leave(id: number) {
return this.isChannel(id) ? this.leaveChannel(id) : this.leaveChat(id);
}
+ public delete(id: number) {
+ return this.isChannel(id) ? this.deleteChannel(id) : this.deleteChat(id);
+ }
+
public deleteChannel(id: number) {
return apiManager.invokeApi('channels.deleteChannel', {
channel: this.getChannelInput(id)
}).then(this.onChatUpdated.bind(this, id));
}
+ public deleteChat(id: number) {
+ //return this.leaveChat(id).then(() => {
+ return apiManager.invokeApi('messages.deleteChat', {
+ chat_id: id
+ });
+ //});
+ }
+
public migrateChat(id: number): Promise {
const chat: Chat = this.getChat(id);
if(chat._ === 'channel') return Promise.resolve(chat.id);
diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts
index b0bc9da2..90d2f7bb 100644
--- a/src/lib/appManagers/appImManager.ts
+++ b/src/lib/appManagers/appImManager.ts
@@ -39,6 +39,7 @@ import appNavigationController from '../../components/appNavigationController';
import appNotificationsManager from './appNotificationsManager';
import AppPrivateSearchTab from '../../components/sidebarRight/tabs/search';
import { i18n } from '../langPack';
+import { SendMessageAction } from '../../layer';
//console.log('appImManager included33!');
@@ -742,6 +743,26 @@ export class AppImManager {
this.setInnerPeer(peerId, undefined, 'scheduled');
}
+ private getTypingElement(action: SendMessageAction) {
+ const el = document.createElement('span');
+ el.classList.add('peer-typing');
+ switch(action._) {
+ //case 'sendMessageTypingAction': {
+ default: {
+ const c = 'peer-typing-text';
+ el.classList.add(c);
+ for(let i = 0; i < 3; ++i) {
+ const dot = document.createElement('span');
+ dot.className = c + '-dot';
+ el.append(dot);
+ }
+ break;
+ }
+ }
+
+ return el;
+ }
+
public async getPeerStatus(peerId: number) {
let subtitle: HTMLElement;
if(!peerId) return '';
@@ -777,7 +798,7 @@ export class AppImManager {
if(typings && typings.length) {
const span = document.createElement('span');
span.classList.add('online');
- span.append(i18n('Peer.Activity.User.TypingText'));
+ span.append(this.getTypingElement(typings[0].action), i18n('Peer.Activity.User.TypingText'));
return span;
} else if(user.status?._ === 'userStatusOnline') {
const span = document.createElement('span');
diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts
index b0f0686f..1c1cd0e6 100644
--- a/src/lib/appManagers/appMessagesManager.ts
+++ b/src/lib/appManagers/appMessagesManager.ts
@@ -1991,9 +1991,10 @@ export class AppMessagesManager {
});
}
- private doFlushHistory(inputPeer: any, justClear?: true): Promise {
+ private doFlushHistory(inputPeer: any, justClear?: boolean, revoke?: boolean): Promise {
return apiManager.invokeApi('messages.deleteHistory', {
just_clear: justClear,
+ revoke: revoke,
peer: inputPeer,
max_id: 0
}).then((affectedHistory) => {
@@ -2014,7 +2015,7 @@ export class AppMessagesManager {
})
}
- public async flushHistory(peerId: number, justClear?: true) {
+ public async flushHistory(peerId: number, justClear?: boolean, revoke?: boolean) {
if(appPeersManager.isChannel(peerId)) {
const promise = this.getHistory(peerId, 0, 1);
@@ -2039,7 +2040,7 @@ export class AppMessagesManager {
});
}
- return this.doFlushHistory(appPeersManager.getInputPeerById(peerId), justClear).then(() => {
+ return this.doFlushHistory(appPeersManager.getInputPeerById(peerId), justClear, revoke).then(() => {
delete this.historiesStorage[peerId];
delete this.messagesStorageByPeerId[peerId];
diff --git a/src/lib/appManagers/appPeersManager.ts b/src/lib/appManagers/appPeersManager.ts
index 14e6c8ba..73064faf 100644
--- a/src/lib/appManagers/appPeersManager.ts
+++ b/src/lib/appManagers/appPeersManager.ts
@@ -1,6 +1,7 @@
import { MOUNT_CLASS_TO } from "../../config/debug";
import { isObject } from "../../helpers/object";
import { DialogPeer, InputDialogPeer, InputNotifyPeer, InputPeer, Peer, Update } from "../../layer";
+import { LangPackKey } from "../langPack";
import { RichTextProcessor } from "../richtextprocessor";
import rootScope from "../rootScope";
import appChatsManager from "./appChatsManager";
@@ -275,14 +276,19 @@ export class AppPeersManager {
}
}
- public getDeleteButtonText(peerId: number) {
+ public getDeleteButtonText(peerId: number): LangPackKey {
switch(this.getDialogType(peerId)) {
- case 'megagroup':
case 'channel':
- return 'Leave';
+ return 'ChatList.Context.LeaveChannel';
+
+ case 'megagroup':
+ return 'ChatList.Context.LeaveGroup';
+
+ case 'group':
+ return 'ChatList.Context.DeleteAndExit';
default:
- return 'Delete';
+ return 'ChatList.Context.DeleteChat';
}
}
}
diff --git a/src/lib/appManagers/appStickersManager.ts b/src/lib/appManagers/appStickersManager.ts
index 0d571629..412d1b49 100644
--- a/src/lib/appManagers/appStickersManager.ts
+++ b/src/lib/appManagers/appStickersManager.ts
@@ -123,7 +123,7 @@ export class AppStickersManager {
}
public getStickerSetThumbDownloadOptions(stickerSet: StickerSet.stickerSet) {
- const thumb = stickerSet.thumb as PhotoSize.photoSize;
+ const thumb = stickerSet.thumbs[0] as PhotoSize.photoSize;
const dcId = stickerSet.thumb_dc_id;
const isAnimated = stickerSet.pFlags?.animated;
diff --git a/src/lib/mtproto/schema.ts b/src/lib/mtproto/schema.ts
index f783d762..d05dc19a 100644
--- a/src/lib/mtproto/schema.ts
+++ b/src/lib/mtproto/schema.ts
@@ -18,7 +18,7 @@ export type MTProtoMethod = {
type: string
};
-export default {"MTProto":{"constructors":[{"id":"481674261","predicate":"vector","params":[],"type":"Vector t"},{"id":"85337187","predicate":"resPQ","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"pq","type":"bytes"},{"name":"server_public_key_fingerprints","type":"Vector"}],"type":"ResPQ"},{"id":2211011308,"predicate":"p_q_inner_data","params":[{"name":"pq","type":"bytes"},{"name":"p","type":"bytes"},{"name":"q","type":"bytes"},{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce","type":"int256"}],"type":"P_Q_inner_data"},{"id":2851430293,"predicate":"p_q_inner_data_dc","params":[{"name":"pq","type":"bytes"},{"name":"p","type":"bytes"},{"name":"q","type":"bytes"},{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce","type":"int256"},{"name":"dc","type":"int"}],"type":"P_Q_inner_data"},{"id":"1013613780","predicate":"p_q_inner_data_temp","params":[{"name":"pq","type":"bytes"},{"name":"p","type":"bytes"},{"name":"q","type":"bytes"},{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce","type":"int256"},{"name":"expires_in","type":"int"}],"type":"P_Q_inner_data"},{"id":"1459478408","predicate":"p_q_inner_data_temp_dc","params":[{"name":"pq","type":"bytes"},{"name":"p","type":"bytes"},{"name":"q","type":"bytes"},{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce","type":"int256"},{"name":"dc","type":"int"},{"name":"expires_in","type":"int"}],"type":"P_Q_inner_d"},{"id":"2043348061","predicate":"server_DH_params_fail","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce_hash","type":"int128"}],"type":"Server_DH_Params"},{"id":3504867164,"predicate":"server_DH_params_ok","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"encrypted_answer","type":"bytes"}],"type":"Server_DH_Params"},{"id":3045658042,"predicate":"server_DH_inner_data","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"g","type":"int"},{"name":"dh_prime","type":"bytes"},{"name":"g_a","type":"bytes"},{"name":"server_time","type":"int"}],"type":"Server_DH_inner_data"},{"id":"1715713620","predicate":"client_DH_inner_data","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"retry_id","type":"long"},{"name":"g_b","type":"bytes"}],"type":"Client_DH_Inner_Data"},{"id":"1003222836","predicate":"dh_gen_ok","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce_hash1","type":"int128"}],"type":"Set_client_DH_params_answer"},{"id":"1188831161","predicate":"dh_gen_retry","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce_hash2","type":"int128"}],"type":"Set_client_DH_params_answer"},{"id":2795351554,"predicate":"dh_gen_fail","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"new_nonce_hash3","type":"int128"}],"type":"Set_client_DH_params_answer"},{"id":4082920705,"predicate":"rpc_result","params":[{"name":"req_msg_id","type":"long"},{"name":"result","type":"Object"}],"type":"RpcResult"},{"id":"558156313","predicate":"rpc_error","params":[{"name":"error_code","type":"int"},{"name":"error_message","type":"string"}],"type":"RpcError"},{"id":"1579864942","predicate":"rpc_answer_unknown","params":[],"type":"RpcDropAnswer"},{"id":3447252358,"predicate":"rpc_answer_dropped_running","params":[],"type":"RpcDropAnswer"},{"id":2755319991,"predicate":"rpc_answer_dropped","params":[{"name":"msg_id","type":"long"},{"name":"seq_no","type":"int"},{"name":"bytes","type":"int"}],"type":"RpcDropAnswer"},{"id":"155834844","predicate":"future_salt","params":[{"name":"valid_since","type":"int"},{"name":"valid_until","type":"int"},{"name":"salt","type":"long"}],"type":"FutureSalt"},{"id":2924480661,"predicate":"future_salts","params":[{"name":"req_msg_id","type":"long"},{"name":"now","type":"int"},{"name":"salts","type":"vector"}],"type":"FutureSalts"},{"id":"880243653","predicate":"pong","params":[{"name":"msg_id","type":"long"},{"name":"ping_id","type":"long"}],"type":"Pong"},{"id":2663516424,"predicate":"new_session_created","params":[{"name":"first_msg_id","type":"long"},{"name":"unique_id","type":"long"},{"name":"server_salt","type":"long"}],"type":"NewSession"},{"id":"1945237724","predicate":"msg_container","params":[{"name":"messages","type":"vector<%Message>"}],"type":"MessageContainer"},{"id":"1538843921","predicate":"message","params":[{"name":"msg_id","type":"long"},{"name":"seqno","type":"int"},{"name":"bytes","type":"int"},{"name":"body","type":"Object"}],"type":"Message"},{"id":3764405938,"predicate":"msg_copy","params":[{"name":"orig_message","type":"Message"}],"type":"MessageCopy"},{"id":"812830625","predicate":"gzip_packed","params":[{"name":"packed_data","type":"bytes"}],"type":"Object"},{"id":"1658238041","predicate":"msgs_ack","params":[{"name":"msg_ids","type":"Vector"}],"type":"MsgsAck"},{"id":2817521681,"predicate":"bad_msg_notification","params":[{"name":"bad_msg_id","type":"long"},{"name":"bad_msg_seqno","type":"int"},{"name":"error_code","type":"int"}],"type":"BadMsgNotification"},{"id":3987424379,"predicate":"bad_server_salt","params":[{"name":"bad_msg_id","type":"long"},{"name":"bad_msg_seqno","type":"int"},{"name":"error_code","type":"int"},{"name":"new_server_salt","type":"long"}],"type":"BadMsgNotification"},{"id":"2105940488","predicate":"msg_resend_req","params":[{"name":"msg_ids","type":"Vector"}],"type":"MsgResendReq"},{"id":2249243371,"predicate":"msg_resend_ans_req","params":[{"name":"msg_ids","type":"Vector"}],"type":"MsgResendReq"},{"id":3664378706,"predicate":"msgs_state_req","params":[{"name":"msg_ids","type":"Vector"}],"type":"MsgsStateReq"},{"id":"81704317","predicate":"msgs_state_info","params":[{"name":"req_msg_id","type":"long"},{"name":"info","type":"bytes"}],"type":"MsgsStateInfo"},{"id":2361446705,"predicate":"msgs_all_info","params":[{"name":"msg_ids","type":"Vector"},{"name":"info","type":"bytes"}],"type":"MsgsAllInfo"},{"id":"661470918","predicate":"msg_detailed_info","params":[{"name":"msg_id","type":"long"},{"name":"answer_msg_id","type":"long"},{"name":"bytes","type":"int"},{"name":"status","type":"int"}],"type":"MsgDetailedInfo"},{"id":2157819615,"predicate":"msg_new_detailed_info","params":[{"name":"answer_msg_id","type":"long"},{"name":"bytes","type":"int"},{"name":"status","type":"int"}],"type":"MsgDetailedInfo"},{"id":"1973679973","predicate":"bind_auth_key_inner","params":[{"name":"nonce","type":"long"},{"name":"temp_auth_key_id","type":"long"},{"name":"perm_auth_key_id","type":"long"},{"name":"temp_session_id","type":"long"},{"name":"expires_at","type":"int"}],"type":"BindAuthKeyInner"},{"id":4133544404,"predicate":"destroy_auth_key_ok","params":[],"type":"DestroyAuthKeyRes"},{"id":"178201177","predicate":"destroy_auth_key_none","params":[],"type":"DestroyAuthKeyRes"},{"id":3926956819,"predicate":"destroy_auth_key_fail","params":[],"type":"DestroyAuthKeyRes"},{"id":3793765884,"predicate":"destroy_session_ok","params":[{"name":"session_id","type":"long"}],"type":"DestroySessionRes"},{"id":"1658015945","predicate":"destroy_session_none","params":[{"name":"session_id","type":"long"}],"type":"DestroySessionRes"}],"methods":[{"id":"1615239032","method":"req_pq","params":[{"name":"nonce","type":"int128"}],"type":"ResPQ"},{"id":3195965169,"method":"req_pq_multi","params":[{"name":"nonce","type":"int128"}],"type":"ResPQ"},{"id":3608339646,"method":"req_DH_params","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"p","type":"bytes"},{"name":"q","type":"bytes"},{"name":"public_key_fingerprint","type":"long"},{"name":"encrypted_data","type":"bytes"}],"type":"Server_DH_Params"},{"id":4110704415,"method":"set_client_DH_params","params":[{"name":"nonce","type":"int128"},{"name":"server_nonce","type":"int128"},{"name":"encrypted_data","type":"bytes"}],"type":"Set_client_DH_params_answer"},{"id":"1491380032","method":"rpc_drop_answer","params":[{"name":"req_msg_id","type":"long"}],"type":"RpcDropAnswer"},{"id":3105996036,"method":"get_future_salts","params":[{"name":"num","type":"int"}],"type":"FutureSalts"},{"id":"2059302892","method":"ping","params":[{"name":"ping_id","type":"long"}],"type":"Pong"},{"id":4081220492,"method":"ping_delay_disconnect","params":[{"name":"ping_id","type":"long"},{"name":"disconnect_delay","type":"int"}],"type":"Pong"},{"id":2459514271,"method":"http_wait","params":[{"name":"max_delay","type":"int"},{"name":"wait_after","type":"int"},{"name":"max_wait","type":"int"}],"type":"HttpWait"},{"id":3510849888,"method":"destroy_auth_key","params":[],"type":"DestroyAuthKeyRes"},{"id":3880853798,"method":"destroy_session","params":[{"name":"session_id","type":"long"}],"type":"DestroySessionRes"}]},"API":{"constructors":[{"id":3162085175,"predicate":"boolFalse","params":[],"type":"Bool"},{"id":2574415285,"predicate":"boolTrue","params":[],"type":"Bool"},{"id":"1072550713","predicate":"true","params":[],"type":"True"},{"id":"481674261","predicate":"vector","params":[],"type":"Vector t"},{"id":3300522427,"predicate":"error","params":[{"name":"code","type":"int"},{"name":"text","type":"string"}],"type":"Error"},{"id":"1450380236","predicate":"null","params":[],"type":"Null"},{"id":"2134579434","predicate":"inputPeerEmpty","params":[],"type":"InputPeer"},{"id":"2107670217","predicate":"inputPeerSelf","params":[],"type":"InputPeer"},{"id":"396093539","predicate":"inputPeerChat","params":[{"name":"chat_id","type":"int"}],"type":"InputPeer"},{"id":3112732367,"predicate":"inputUserEmpty","params":[],"type":"InputUser"},{"id":4156666175,"predicate":"inputUserSelf","params":[],"type":"InputUser"},{"id":4086478836,"predicate":"inputPhoneContact","params":[{"name":"client_id","type":"long"},{"name":"phone","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"InputContact"},{"id":4113560191,"predicate":"inputFile","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"},{"name":"md5_checksum","type":"string"}],"type":"InputFile"},{"id":2523198847,"predicate":"inputMediaEmpty","params":[],"type":"InputMedia"},{"id":"505969924","predicate":"inputMediaUploadedPhoto","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"stickers","type":"flags.0?Vector"},{"name":"ttl_seconds","type":"flags.1?int"}],"type":"InputMedia"},{"id":3015312949,"predicate":"inputMediaPhoto","params":[{"name":"flags","type":"#"},{"name":"id","type":"InputPhoto"},{"name":"ttl_seconds","type":"flags.0?int"}],"type":"InputMedia"},{"id":4190388548,"predicate":"inputMediaGeoPoint","params":[{"name":"geo_point","type":"InputGeoPoint"}],"type":"InputMedia"},{"id":4171988475,"predicate":"inputMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"}],"type":"InputMedia"},{"id":"480546647","predicate":"inputChatPhotoEmpty","params":[],"type":"InputChatPhoto"},{"id":3326243406,"predicate":"inputChatUploadedPhoto","params":[{"name":"flags","type":"#"},{"name":"file","type":"flags.0?InputFile"},{"name":"video","type":"flags.1?InputFile"},{"name":"video_start_ts","type":"flags.2?double"}],"type":"InputChatPhoto"},{"id":2303962423,"predicate":"inputChatPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputChatPhoto"},{"id":3837862870,"predicate":"inputGeoPointEmpty","params":[],"type":"InputGeoPoint"},{"id":"1210199983","predicate":"inputGeoPoint","params":[{"name":"flags","type":"#"},{"name":"lat","type":"double"},{"name":"long","type":"double"},{"name":"accuracy_radius","type":"flags.0?int"}],"type":"InputGeoPoint"},{"id":"483901197","predicate":"inputPhotoEmpty","params":[],"type":"InputPhoto"},{"id":"1001634122","predicate":"inputPhoto","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"}],"type":"InputPhoto"},{"id":3755650017,"predicate":"inputFileLocation","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"},{"name":"file_reference","type":"bytes"}],"type":"InputFileLocation"},{"id":2645671021,"predicate":"peerUser","params":[{"name":"user_id","type":"int"}],"type":"Peer"},{"id":3134252475,"predicate":"peerChat","params":[{"name":"chat_id","type":"int"}],"type":"Peer"},{"id":2861972229,"predicate":"storage.fileUnknown","params":[],"type":"storage.FileType"},{"id":"1086091090","predicate":"storage.filePartial","params":[],"type":"storage.FileType"},{"id":"8322574","predicate":"storage.fileJpeg","params":[],"type":"storage.FileType"},{"id":3403786975,"predicate":"storage.fileGif","params":[],"type":"storage.FileType"},{"id":"172975040","predicate":"storage.filePng","params":[],"type":"storage.FileType"},{"id":2921222285,"predicate":"storage.filePdf","params":[],"type":"storage.FileType"},{"id":"1384777335","predicate":"storage.fileMp3","params":[],"type":"storage.FileType"},{"id":"1258941372","predicate":"storage.fileMov","params":[],"type":"storage.FileType"},{"id":3016663268,"predicate":"storage.fileMp4","params":[],"type":"storage.FileType"},{"id":"276907596","predicate":"storage.fileWebp","params":[],"type":"storage.FileType"},{"id":"537022650","predicate":"userEmpty","params":[{"name":"id","type":"int"}],"type":"User"},{"id":"1326562017","predicate":"userProfilePhotoEmpty","params":[],"type":"UserProfilePhoto"},{"id":"1775479590","predicate":"userProfilePhoto","params":[{"name":"flags","type":"#"},{"name":"has_video","type":"flags.0?true"},{"name":"photo_id","type":"long"},{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"},{"name":"dc_id","type":"int"}],"type":"UserProfilePhoto"},{"id":"164646985","predicate":"userStatusEmpty","params":[],"type":"UserStatus"},{"id":3988339017,"predicate":"userStatusOnline","params":[{"name":"expires","type":"int"}],"type":"UserStatus"},{"id":"9203775","predicate":"userStatusOffline","params":[{"name":"was_online","type":"int"}],"type":"UserStatus"},{"id":2611140608,"predicate":"chatEmpty","params":[{"name":"id","type":"int"}],"type":"Chat"},{"id":"1004149726","predicate":"chat","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"kicked","type":"flags.1?true"},{"name":"left","type":"flags.2?true"},{"name":"deactivated","type":"flags.5?true"},{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"photo","type":"ChatPhoto"},{"name":"participants_count","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"migrated_to","type":"flags.6?InputChannel"},{"name":"admin_rights","type":"flags.14?ChatAdminRights"},{"name":"default_banned_rights","type":"flags.18?ChatBannedRights"}],"type":"Chat"},{"id":"120753115","predicate":"chatForbidden","params":[{"name":"id","type":"int"},{"name":"title","type":"string"}],"type":"Chat"},{"id":"461151667","predicate":"chatFull","params":[{"name":"flags","type":"#"},{"name":"can_set_username","type":"flags.7?true"},{"name":"has_scheduled","type":"flags.8?true"},{"name":"id","type":"int"},{"name":"about","type":"string"},{"name":"participants","type":"ChatParticipants"},{"name":"chat_photo","type":"flags.2?Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"flags.3?Vector"},{"name":"pinned_msg_id","type":"flags.6?int"},{"name":"folder_id","type":"flags.11?int"}],"type":"ChatFull"},{"id":3369552190,"predicate":"chatParticipant","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":4237298731,"predicate":"chatParticipantsForbidden","params":[{"name":"flags","type":"#"},{"name":"chat_id","type":"int"},{"name":"self_participant","type":"flags.0?ChatParticipant"}],"type":"ChatParticipants"},{"id":"1061556205","predicate":"chatParticipants","params":[{"name":"chat_id","type":"int"},{"name":"participants","type":"Vector"},{"name":"version","type":"int"}],"type":"ChatParticipants"},{"id":"935395612","predicate":"chatPhotoEmpty","params":[],"type":"ChatPhoto"},{"id":3523977020,"predicate":"chatPhoto","params":[{"name":"flags","type":"#"},{"name":"has_video","type":"flags.0?true"},{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"},{"name":"dc_id","type":"int"}],"type":"ChatPhoto"},{"id":2212879956,"predicate":"messageEmpty","params":[{"name":"id","type":"int"}],"type":"Message"},{"id":"1487813065","predicate":"message","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"from_scheduled","type":"flags.18?true"},{"name":"legacy","type":"flags.19?true"},{"name":"edit_hide","type":"flags.21?true"},{"name":"pinned","type":"flags.24?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?Peer"},{"name":"peer_id","type":"Peer"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to","type":"flags.3?MessageReplyHeader"},{"name":"date","type":"int"},{"name":"message","type":"string"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"reply_markup","type":"flags.6?ReplyMarkup"},{"name":"entities","type":"flags.7?Vector"},{"name":"views","type":"flags.10?int"},{"name":"forwards","type":"flags.10?int"},{"name":"replies","type":"flags.23?MessageReplies"},{"name":"edit_date","type":"flags.15?int"},{"name":"post_author","type":"flags.16?string"},{"name":"grouped_id","type":"flags.17?long"},{"name":"restriction_reason","type":"flags.22?Vector"}],"type":"Message"},{"id":"678405636","predicate":"messageService","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"legacy","type":"flags.19?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?Peer"},{"name":"peer_id","type":"Peer"},{"name":"reply_to","type":"flags.3?MessageReplyHeader"},{"name":"date","type":"int"},{"name":"action","type":"MessageAction"}],"type":"Message"},{"id":"1038967584","predicate":"messageMediaEmpty","params":[],"type":"MessageMedia"},{"id":"1766936791","predicate":"messageMediaPhoto","params":[{"name":"flags","type":"#"},{"name":"photo","type":"flags.0?Photo"},{"name":"ttl_seconds","type":"flags.2?int"}],"type":"MessageMedia"},{"id":"1457575028","predicate":"messageMediaGeo","params":[{"name":"geo","type":"GeoPoint"}],"type":"MessageMedia"},{"id":3421653312,"predicate":"messageMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"vcard","type":"string"},{"name":"user_id","type":"int"}],"type":"MessageMedia"},{"id":2676290718,"predicate":"messageMediaUnsupported","params":[],"type":"MessageMedia"},{"id":3064919984,"predicate":"messageActionEmpty","params":[],"type":"MessageAction"},{"id":2791541658,"predicate":"messageActionChatCreate","params":[{"name":"title","type":"string"},{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":3047280218,"predicate":"messageActionChatEditTitle","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"2144015272","predicate":"messageActionChatEditPhoto","params":[{"name":"photo","type":"Photo"}],"type":"MessageAction"},{"id":2514746351,"predicate":"messageActionChatDeletePhoto","params":[],"type":"MessageAction"},{"id":"1217033015","predicate":"messageActionChatAddUser","params":[{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":2997787404,"predicate":"messageActionChatDeleteUser","params":[{"name":"user_id","type":"int"}],"type":"MessageAction"},{"id":"739712882","predicate":"dialog","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.2?true"},{"name":"unread_mark","type":"flags.3?true"},{"name":"peer","type":"Peer"},{"name":"top_message","type":"int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"unread_mentions_count","type":"int"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"pts","type":"flags.0?int"},{"name":"draft","type":"flags.1?DraftMessage"},{"name":"folder_id","type":"flags.4?int"}],"type":"Dialog"},{"id":"590459437","predicate":"photoEmpty","params":[{"name":"id","type":"long"}],"type":"Photo"},{"id":4212750949,"predicate":"photo","params":[{"name":"flags","type":"#"},{"name":"has_stickers","type":"flags.0?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"file_reference","type":"bytes"},{"name":"date","type":"int"},{"name":"sizes","type":"Vector"},{"name":"video_sizes","type":"flags.1?Vector"},{"name":"dc_id","type":"int"}],"type":"Photo"},{"id":"236446268","predicate":"photoSizeEmpty","params":[{"name":"type","type":"string"}],"type":"PhotoSize"},{"id":"2009052699","predicate":"photoSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"size","type":"int"}],"type":"PhotoSize"},{"id":3920049402,"predicate":"photoCachedSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"bytes","type":"bytes"}],"type":"PhotoSize"},{"id":"286776671","predicate":"geoPointEmpty","params":[],"type":"GeoPoint"},{"id":2997024355,"predicate":"geoPoint","params":[{"name":"flags","type":"#"},{"name":"long","type":"double"},{"name":"lat","type":"double"},{"name":"access_hash","type":"long"},{"name":"accuracy_radius","type":"flags.0?int"}],"type":"GeoPoint"},{"id":"1577067778","predicate":"auth.sentCode","params":[{"name":"flags","type":"#"},{"name":"type","type":"auth.SentCodeType"},{"name":"phone_code_hash","type":"string"},{"name":"next_type","type":"flags.1?auth.CodeType"},{"name":"timeout","type":"flags.2?int"}],"type":"auth.SentCode"},{"id":3439659286,"predicate":"auth.authorization","params":[{"name":"flags","type":"#"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"user","type":"User"}],"type":"auth.Authorization"},{"id":3751189549,"predicate":"auth.exportedAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.ExportedAuthorization"},{"id":3099351820,"predicate":"inputNotifyPeer","params":[{"name":"peer","type":"InputPeer"}],"type":"InputNotifyPeer"},{"id":"423314455","predicate":"inputNotifyUsers","params":[],"type":"InputNotifyPeer"},{"id":"1251338318","predicate":"inputNotifyChats","params":[],"type":"InputNotifyPeer"},{"id":2621249934,"predicate":"inputPeerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?Bool"},{"name":"silent","type":"flags.1?Bool"},{"name":"mute_until","type":"flags.2?int"},{"name":"sound","type":"flags.3?string"}],"type":"InputPeerNotifySettings"},{"id":2941295904,"predicate":"peerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?Bool"},{"name":"silent","type":"flags.1?Bool"},{"name":"mute_until","type":"flags.2?int"},{"name":"sound","type":"flags.3?string"}],"type":"PeerNotifySettings"},{"id":"1933519201","predicate":"peerSettings","params":[{"name":"flags","type":"#"},{"name":"report_spam","type":"flags.0?true"},{"name":"add_contact","type":"flags.1?true"},{"name":"block_contact","type":"flags.2?true"},{"name":"share_contact","type":"flags.3?true"},{"name":"need_contacts_exception","type":"flags.4?true"},{"name":"report_geo","type":"flags.5?true"},{"name":"autoarchived","type":"flags.7?true"},{"name":"geo_distance","type":"flags.6?int"}],"type":"PeerSettings"},{"id":2755118061,"predicate":"wallPaper","params":[{"name":"id","type":"long"},{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"default","type":"flags.1?true"},{"name":"pattern","type":"flags.3?true"},{"name":"dark","type":"flags.4?true"},{"name":"access_hash","type":"long"},{"name":"slug","type":"string"},{"name":"document","type":"Document"},{"name":"settings","type":"flags.2?WallPaperSettings"}],"type":"WallPaper"},{"id":"1490799288","predicate":"inputReportReasonSpam","params":[],"type":"ReportReason"},{"id":"505595789","predicate":"inputReportReasonViolence","params":[],"type":"ReportReason"},{"id":"777640226","predicate":"inputReportReasonPornography","params":[],"type":"ReportReason"},{"id":2918469347,"predicate":"inputReportReasonChildAbuse","params":[],"type":"ReportReason"},{"id":3782503690,"predicate":"inputReportReasonOther","params":[{"name":"text","type":"string"}],"type":"ReportReason"},{"id":3992026130,"predicate":"userFull","params":[{"name":"flags","type":"#"},{"name":"blocked","type":"flags.0?true"},{"name":"phone_calls_available","type":"flags.4?true"},{"name":"phone_calls_private","type":"flags.5?true"},{"name":"can_pin_message","type":"flags.7?true"},{"name":"has_scheduled","type":"flags.12?true"},{"name":"video_calls_available","type":"flags.13?true"},{"name":"user","type":"User"},{"name":"about","type":"flags.1?string"},{"name":"settings","type":"PeerSettings"},{"name":"profile_photo","type":"flags.2?Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"bot_info","type":"flags.3?BotInfo"},{"name":"pinned_msg_id","type":"flags.6?int"},{"name":"common_chats_count","type":"int"},{"name":"folder_id","type":"flags.11?int"}],"type":"UserFull"},{"id":4178692500,"predicate":"contact","params":[{"name":"user_id","type":"int"},{"name":"mutual","type":"Bool"}],"type":"Contact"},{"id":3489825848,"predicate":"importedContact","params":[{"name":"user_id","type":"int"},{"name":"client_id","type":"long"}],"type":"ImportedContact"},{"id":3546811489,"predicate":"contactStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"ContactStatus"},{"id":3075189202,"predicate":"contacts.contactsNotModified","params":[],"type":"contacts.Contacts"},{"id":3941105218,"predicate":"contacts.contacts","params":[{"name":"contacts","type":"Vector"},{"name":"saved_count","type":"int"},{"name":"users","type":"Vector"}],"type":"contacts.Contacts"},{"id":"2010127419","predicate":"contacts.importedContacts","params":[{"name":"imported","type":"Vector"},{"name":"popular_invites","type":"Vector"},{"name":"retry_contacts","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ImportedContacts"},{"id":"182326673","predicate":"contacts.blocked","params":[{"name":"blocked","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":3781575060,"predicate":"contacts.blockedSlice","params":[{"name":"count","type":"int"},{"name":"blocked","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"364538944","predicate":"messages.dialogs","params":[{"name":"dialogs","type":"Vector