= ({
isOpen,
+ isRevenueSharing,
onClose,
}) => {
const lang = useLang();
+ const minLevelSignal = useSelectorSignal((global) => global.appConfig?.channelRestrictAdsLevelMin);
+ const minLevelToRestrictAds = useDerivedState(minLevelSignal);
+
+ const regularAdContent = useMemo(() => {
+ return (
+ <>
+ {lang('SponsoredMessageInfoScreen.Title')}
+ {renderText(lang('SponsoredMessageInfoDescription1'), ['br'])}
+ {renderText(lang('SponsoredMessageInfoDescription2'), ['br'])}
+ {renderText(lang('SponsoredMessageInfoDescription3'), ['br'])}
+
+
+
+ {renderText(lang('SponsoredMessageInfoDescription4'), ['br'])}
+ >
+ );
+ }, [lang]);
+
+ const revenueSharingAdContent = useMemo(() => {
+ return (
+ <>
+
+ {lang('AboutRevenueSharingAds')}
+
+ {lang('RevenueSharingAdsAlertSubtitle')}
+
+
+ {lang('RevenueSharingAdsInfo1Title')}
+
+ {renderText(lang('RevenueSharingAdsInfo1Subtitle'), ['simple_markdown'])}
+
+
+
+ {lang('RevenueSharingAdsInfo2Title')}
+
+ {renderText(lang('RevenueSharingAdsInfo2Subtitle'), ['simple_markdown'])}
+
+
+
+ {lang('RevenueSharingAdsInfo3Title')}
+
+ {renderText(lang('RevenueSharingAdsInfo3Subtitle', minLevelToRestrictAds), ['simple_markdown'])}
+
+
+
+ {renderText(lang('RevenueSharingAdsInfo4Title'), ['simple_markdown'])}
+
+ {renderText(lang('RevenueSharingAdsInfo4Subtitle2', ''), ['simple_markdown'])}
+
+
+ >
+ );
+ }, [lang, minLevelToRestrictAds]);
+
return (
- {renderText(lang('SponsoredMessageInfoDescription1'), ['br'])}
- {renderText(lang('SponsoredMessageInfoDescription2'), ['br'])}
- {renderText(lang('SponsoredMessageInfoDescription3'), ['br'])}
-
-
-
- {renderText(lang('SponsoredMessageInfoDescription4'), ['br'])}
-
-
-
+ {isRevenueSharing ? revenueSharingAdContent : regularAdContent}
+
);
};
diff --git a/src/components/common/PeerColorWrapper.module.scss b/src/components/common/PeerColorWrapper.module.scss
new file mode 100644
index 000000000..6e91c9f00
--- /dev/null
+++ b/src/components/common/PeerColorWrapper.module.scss
@@ -0,0 +1,3 @@
+.root {
+ position: relative;
+}
diff --git a/src/components/common/PeerColorWrapper.tsx b/src/components/common/PeerColorWrapper.tsx
index 8f0b3e83e..4515803f8 100644
--- a/src/components/common/PeerColorWrapper.tsx
+++ b/src/components/common/PeerColorWrapper.tsx
@@ -1,30 +1,44 @@
import React, { memo } from '../../lib/teact/teact';
-import type { ApiPeer } from '../../api/types';
+import type { ApiPeer, ApiPeerColor } from '../../api/types';
import buildClassName from '../../util/buildClassName';
-import { getPeerColorClass } from './helpers/peerColor';
+import { getApiPeerColorClass, getPeerColorClass } from './helpers/peerColor';
import EmojiIconBackground from './embedded/EmojiIconBackground';
-type OwnProps = {
+import styles from './PeerColorWrapper.module.scss';
+
+interface OwnProps extends React.HTMLAttributes {
peer?: ApiPeer;
+ peerColor?: ApiPeerColor;
noUserColors?: boolean;
shoudReset?: boolean;
className?: string;
emojiIconClassName?: string;
children: React.ReactNode;
-};
+}
function PeerColorWrapper({
- peer, noUserColors, shoudReset, className, emojiIconClassName, children,
+ peer, peerColor, noUserColors, shoudReset, className, emojiIconClassName, children, ...otherProps
}: OwnProps) {
+ const color = peerColor || peer?.color;
+
return (
-
- {peer?.color?.backgroundEmojiId && (
+
+ {color?.backgroundEmojiId && (
)}
{children}
diff --git a/src/components/common/helpers/peerColor.ts b/src/components/common/helpers/peerColor.ts
index fdf995100..e0219e990 100644
--- a/src/components/common/helpers/peerColor.ts
+++ b/src/components/common/helpers/peerColor.ts
@@ -1,4 +1,4 @@
-import type { ApiPeer } from '../../../api/types';
+import type { ApiPeer, ApiPeerColor } from '../../../api/types';
import { getPeerColorCount, getPeerColorKey } from '../../../global/helpers';
@@ -9,3 +9,7 @@ export function getPeerColorClass(peer?: ApiPeer, noUserColors?: boolean, should
}
return noUserColors ? `peer-color-count-${getPeerColorCount(peer)}` : `peer-color-${getPeerColorKey(peer)}`;
}
+
+export function getApiPeerColorClass(color: ApiPeerColor) {
+ return `peer-color-${color.color}`;
+}
diff --git a/src/components/common/profile/BusinessHours.tsx b/src/components/common/profile/BusinessHours.tsx
index ce63c8c13..2f6733ecd 100644
--- a/src/components/common/profile/BusinessHours.tsx
+++ b/src/components/common/profile/BusinessHours.tsx
@@ -114,7 +114,7 @@ const BusinessHours = ({
useEffect(() => {
if (!isExpanded) return;
- const slide = document.querySelector
(`.${ACTIVE_SLIDE_CLASS_NAME} .${styles.timetable}`);
+ const slide = document.querySelector(`.${ACTIVE_SLIDE_CLASS_NAME} > .${styles.timetable}`);
if (!slide) return;
const height = slide.offsetHeight;
@@ -124,7 +124,7 @@ const BusinessHours = ({
}, [isExpanded]);
const handleAnimationStart = useLastCallback(() => {
- const slide = document.querySelector(`.${TO_SLIDE_CLASS_NAME} .${styles.timetable}`)!;
+ const slide = document.querySelector(`.${TO_SLIDE_CLASS_NAME} > .${styles.timetable}`)!;
requestMeasure(() => {
const height = slide.offsetHeight;
diff --git a/src/components/middle/MessageList.tsx b/src/components/middle/MessageList.tsx
index 3d145fca8..854b75add 100644
--- a/src/components/middle/MessageList.tsx
+++ b/src/components/middle/MessageList.tsx
@@ -52,6 +52,7 @@ import {
selectScrollOffset,
selectTabState,
selectThreadInfo,
+ selectUserFullInfo,
} from '../../global/selectors';
import animateScroll, { isAnimatingScroll, restartCurrentScrollAnimation } from '../../util/animateScroll';
import buildClassName from '../../util/buildClassName';
@@ -101,7 +102,6 @@ type OwnProps = {
};
type StateProps = {
- isCurrentUserPremium?: boolean;
isChatLoaded?: boolean;
isChannelChat?: boolean;
isGroupChat?: boolean;
@@ -127,6 +127,7 @@ type StateProps = {
isEmptyThread?: boolean;
isForum?: boolean;
currentUserId: string;
+ areAdsEnabled?: boolean;
};
const MESSAGE_REACTIONS_POLLING_INTERVAL = 20 * 1000;
@@ -150,7 +151,6 @@ const MessageList: FC = ({
hasTools,
onScrollDownToggle,
onNotchToggle,
- isCurrentUserPremium,
isChatLoaded,
isForum,
isChannelChat,
@@ -184,6 +184,7 @@ const MessageList: FC = ({
getForceNextPinnedInHeader,
onPinnedIntersectionChange,
isContactRequirePremium,
+ areAdsEnabled,
}) => {
const {
loadViewportMessages, setScrollOffset, loadSponsoredMessages, loadMessageReactions, copyMessagesByIds,
@@ -230,10 +231,10 @@ const MessageList: FC = ({
}, [firstUnreadId]);
useEffect(() => {
- if (!isCurrentUserPremium && isChannelChat && isSynced && isReady) {
+ if (areAdsEnabled && isChannelChat && isSynced && isReady) {
loadSponsoredMessages({ chatId });
}
- }, [isCurrentUserPremium, chatId, isSynced, isReady, isChannelChat]);
+ }, [chatId, isSynced, isReady, isChannelChat, areAdsEnabled]);
// Updated only once when messages are loaded (as we want the unread divider to keep its position)
useSyncEffect(() => {
@@ -633,7 +634,7 @@ const MessageList: FC = ({
/>
) : hasMessages ? (
(
const chatFullInfo = !isUserId(chatId) ? selectChatFullInfo(global, chatId) : undefined;
const isEmptyThread = !selectThreadInfo(global, chatId, threadId)?.messagesCount;
+ const isCurrentUserPremium = selectIsCurrentUserPremium(global);
+ const areAdsEnabled = !isCurrentUserPremium || selectUserFullInfo(global, currentUserId)?.areAdsEnabled;
+
return {
- isCurrentUserPremium: selectIsCurrentUserPremium(global),
+ areAdsEnabled,
isChatLoaded: true,
isRestricted,
restrictionReason,
diff --git a/src/components/middle/MessageListContent.tsx b/src/components/middle/MessageListContent.tsx
index e49e65038..380b3ff47 100644
--- a/src/components/middle/MessageListContent.tsx
+++ b/src/components/middle/MessageListContent.tsx
@@ -32,7 +32,7 @@ import SponsoredMessage from './message/SponsoredMessage';
import MessageListBotInfo from './MessageListBotInfo';
interface OwnProps {
- isCurrentUserPremium?: boolean;
+ areAdsEnabled?: boolean;
chatId: string;
threadId: ThreadId;
messageIds: number[];
@@ -64,7 +64,7 @@ interface OwnProps {
const UNREAD_DIVIDER_CLASS = 'unread-divider';
const MessageListContent: FC = ({
- isCurrentUserPremium,
+ areAdsEnabled,
chatId,
threadId,
messageIds,
@@ -290,7 +290,7 @@ const MessageListContent: FC = ({
{withHistoryTriggers && }
{shouldRenderBotInfo && }
{dateGroups.flat()}
- {!isCurrentUserPremium && isViewportNewest && (
+ {areAdsEnabled && isViewportNewest && (
)}
{withHistoryTriggers && (
diff --git a/src/components/middle/message/Message.scss b/src/components/middle/message/Message.scss
index 462406822..73d03ba8b 100644
--- a/src/components/middle/message/Message.scss
+++ b/src/components/middle/message/Message.scss
@@ -674,47 +674,43 @@
}
}
- .message-action-button {
+ .message-action-buttons {
position: absolute;
bottom: 0;
- color: white;
background-color: var(--pattern-color);
+ border-radius: 1rem;
+
+ display: flex;
+ flex-direction: column;
opacity: 0;
- transition: opacity 150ms, backdrop-filter 150ms, filter 150ms;
+ transition: opacity 150ms;
@media (pointer: coarse) {
opacity: 1 !important;
}
+ }
- &:hover,
- &:active,
- &:focus {
- background-color: var(--pattern-color) !important;
- backdrop-filter: brightness(115%);
-
- @supports not (backdrop-filter: brightness(115%)) {
- filter: brightness(115%);
- }
- }
+ .message-action-button {
+ color: white;
}
&:hover,
&[data-is-document-group-hover] {
- .message-action-button {
+ .message-action-buttons {
opacity: 1;
}
}
- .message-action-button-shown {
+ .message-action-buttons-shown {
opacity: 1;
}
- &.own .message-action-button {
+ &.own .message-action-buttons {
left: -3rem;
}
- &:not(.own) .message-action-button {
+ &:not(.own) .message-action-buttons {
right: -3rem;
}
diff --git a/src/components/middle/message/Message.tsx b/src/components/middle/message/Message.tsx
index ab2bc27a9..1dbd6d8e8 100644
--- a/src/components/middle/message/Message.tsx
+++ b/src/components/middle/message/Message.tsx
@@ -1389,7 +1389,7 @@ const Message: FC = ({
/>
{!isInDocumentGroup && (
- {isSelected && }
+ {isSelected && }
)}
{isLastInDocumentGroup && (
@@ -1398,7 +1398,7 @@ const Message: FC = ({
onClick={handleDocumentGroupSelectAll}
>
{isGroupSelected && (
-
+
)}
)}
@@ -1419,33 +1419,38 @@ const Message: FC
= ({
)}
{renderContent()}
{!isInDocumentGroupNotLast && metaPosition === 'standalone' && !isStoryMention && renderReactionsAndMeta()}
- {canShowActionButton && canForward ? (
-
- ) : canShowActionButton && canFocus ? (
-
)}
- color="translucent-white"
- round
- size="tiny"
- ariaLabel="Focus message"
- onClick={isPinnedList ? handleFocus : handleFocusForwarded}
- >
-
-
- ) : undefined}
+ {canFocus && (
+
+ )}
+
+ )}
{withCommentButton && (
= ({
onAboutAds,
onSponsoredHide,
onSponsorInfo,
+ onSponsoredReport,
onReactionPickerOpen,
onTranslate,
onShowOriginal,
@@ -443,9 +445,21 @@ const MessageContextMenu: FC = ({
{isSponsoredMessage && message.sponsorInfo && (
)}
- {isSponsoredMessage && }
+ {isSponsoredMessage && (
+
+ )}
+ {isSponsoredMessage && message.canReport && (
+
+ )}
{isSponsoredMessage && onSponsoredHide && (
-
+ <>
+
+
+ >
)}
{(canShowSeenBy || canShowReactionsCount) && !isSponsoredMessage && (
<>
diff --git a/src/components/middle/message/SponsoredMessage.scss b/src/components/middle/message/SponsoredMessage.scss
index 9b6c0ca6b..876841654 100644
--- a/src/components/middle/message/SponsoredMessage.scss
+++ b/src/components/middle/message/SponsoredMessage.scss
@@ -4,6 +4,7 @@
margin-top: -0.5rem;
margin-bottom: 0.5rem;
+ z-index: calc(var(--z-sticky-date) + 1);
&::before {
display: none;
@@ -36,26 +37,9 @@
color: var(--color-text);
}
- &.with-avatar {
- padding-left: 2.5rem !important;
-
- & > .Avatar {
- display: flex !important;
- }
-
-
- @media (max-width: 600px) {
- padding-left: 2.875rem !important;
-
- .message-content {
- max-width: min(29rem, calc(100vw - 7.0625rem)) !important;
- }
- }
- }
-
- .message-action-button {
+ .message-action-buttons {
bottom: auto !important;
- top: 0.5rem;
+ top: 0;
}
.message-content {
@@ -67,7 +51,7 @@
}
.channel-avatar {
- --radius: 0.125rem;
+ --radius: 0.25rem;
float: right;
margin: 0 0 0.5rem 0.5rem;
@@ -86,7 +70,6 @@
font-size: calc(var(--message-text-size, 1rem) - 0.125rem);
background-color: var(--accent-background-color);
border-radius: 0.375rem;
- position: relative;
overflow: hidden;
&::before {
@@ -131,4 +114,19 @@
.svg-appendix {
transform: translate(0.01875rem, -0.00625rem);
}
+
+ .ad-about {
+ font-size: 0.6875rem;
+ margin-inline-start: 0.25rem;
+ border-radius: 1rem;
+ padding-inline: 0.375rem;
+ transition: 150ms filter ease-in;
+ background: var(--accent-background-active-color);
+ cursor: var(--custom-cursor, pointer);
+ filter: opacity(0.8);
+
+ &:hover {
+ filter: opacity(1);
+ }
+ }
}
diff --git a/src/components/middle/message/SponsoredMessage.tsx b/src/components/middle/message/SponsoredMessage.tsx
index e5c69f340..8ffd76dff 100644
--- a/src/components/middle/message/SponsoredMessage.tsx
+++ b/src/components/middle/message/SponsoredMessage.tsx
@@ -1,23 +1,16 @@
-import type { MouseEvent as ReactMouseEvent, RefObject } from 'react';
+import type { RefObject } from 'react';
import type { FC } from '../../../lib/teact/teact';
import React, { memo, useEffect, useRef } from '../../../lib/teact/teact';
import { getActions, withGlobal } from '../../../global';
-import type {
- ApiChat, ApiSponsoredMessage, ApiUser,
-} from '../../../api/types';
+import type { ApiSponsoredMessage } from '../../../api/types';
-import { getChatTitle, getUserFullName } from '../../../global/helpers';
-import { selectChat, selectSponsoredMessage, selectUser } from '../../../global/selectors';
+import { selectSponsoredMessage } from '../../../global/selectors';
import buildClassName from '../../../util/buildClassName';
-import { extractCurrentThemeParams } from '../../../util/themeStyle';
-import { IS_ANDROID, IS_TOUCH_ENV } from '../../../util/windowEnvironment';
-import { getPeerColorClass } from '../../common/helpers/peerColor';
-import renderText from '../../common/helpers/renderText';
+import { IS_ANDROID } from '../../../util/windowEnvironment';
import { renderTextWithEntities } from '../../common/helpers/renderTextWithEntities';
import { preventMessageInputBlur } from '../helpers/preventMessageInputBlur';
-import useAppLayout from '../../../hooks/useAppLayout';
import useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';
import useFlag from '../../../hooks/useFlag';
import { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';
@@ -26,6 +19,8 @@ import useLastCallback from '../../../hooks/useLastCallback';
import AboutAdsModal from '../../common/AboutAdsModal.async';
import Avatar from '../../common/Avatar';
+import Icon from '../../common/Icon';
+import PeerColorWrapper from '../../common/PeerColorWrapper';
import Button from '../../ui/Button';
import MessageAppendix from './MessageAppendix';
import SponsoredMessageContextMenuContainer from './SponsoredMessageContextMenuContainer.async';
@@ -39,31 +34,21 @@ type OwnProps = {
type StateProps = {
message?: ApiSponsoredMessage;
- peer?: ApiChat;
- bot?: ApiUser;
- channel?: ApiChat;
};
const INTERSECTION_DEBOUNCE_MS = 200;
const SponsoredMessage: FC = ({
chatId,
- peer,
message,
containerRef,
- bot,
- channel,
}) => {
const {
viewSponsoredMessage,
- openChat,
- openChatByInvite,
- requestAppWebView,
- startBot,
- focusMessage,
openUrl,
- openPremiumModal,
+ hideSponsoredMessages,
clickSponsoredMessage,
+ reportSponsoredMessage,
} = getActions();
const lang = useLang();
@@ -83,11 +68,8 @@ const SponsoredMessage: FC = ({
isContextMenuOpen, contextMenuPosition,
handleBeforeContextMenu, handleContextMenu,
handleContextMenuClose, handleContextMenuHide,
- } = useContextMenuHandlers(ref, IS_TOUCH_ENV, true, IS_ANDROID);
+ } = useContextMenuHandlers(ref, undefined, true, IS_ANDROID);
const [isAboutAdsModalOpen, openAboutAdsModal, closeAboutAdsModal] = useFlag(false);
- const { isMobile } = useAppLayout();
- const withAvatar = Boolean(message?.isAvatarShown && peer);
- const isBotApp = Boolean(message?.botApp);
useEffect(() => {
return shouldObserve ? observeIntersection(contentRef.current!, (target) => {
@@ -102,146 +84,30 @@ const SponsoredMessage: FC = ({
handleBeforeContextMenu(e);
};
- const handleAvatarClick = useLastCallback(() => {
- if (!peer) {
- return;
- }
-
- openChat({ id: peer.id });
+ const handleReportSponsoredMessage = useLastCallback(() => {
+ reportSponsoredMessage({ chatId, randomId: message!.randomId });
});
- const handleLinkClick = useLastCallback((e: ReactMouseEvent) => {
- e.preventDefault();
-
- clickSponsoredMessage({ chatId });
- openUrl({ url: message!.webPage!.url, shouldSkipModal: true });
-
- return false;
- });
-
- const handleCloseSponsoredMessage = useLastCallback(() => {
- openPremiumModal();
+ const handleHideSponsoredMessage = useLastCallback(() => {
+ hideSponsoredMessages();
});
const handleClick = useLastCallback(() => {
if (!message) return;
clickSponsoredMessage({ chatId });
-
- if (isBotApp) {
- const { shortName } = message.botApp!;
- const theme = extractCurrentThemeParams();
-
- requestAppWebView({
- botId: message.chatId!,
- appName: shortName,
- startApp: message.startParam,
- theme,
- });
- } else if (message.chatInviteHash) {
- openChatByInvite({ hash: message.chatInviteHash });
- } else if (message.channelPostId) {
- focusMessage({ chatId: message.chatId!, messageId: message.channelPostId });
- } else {
- openChat({ id: message.chatId });
-
- if (message.startParam) {
- startBot({
- botId: message.chatId!,
- param: message.startParam,
- });
- }
- }
+ openUrl({ url: message!.url, shouldSkipModal: true });
});
if (!message) {
return undefined;
}
- function renderAvatar() {
- return (
-
- );
- }
-
- function renderPhoto() {
- if (message?.botApp) {
- if (!message.botApp.photo) return undefined;
-
- return (
-
- );
- }
-
- if (channel) {
- return (
-
- );
- }
-
- return undefined;
- }
-
function renderContent() {
- if (message?.webPage) {
- return (
- <>
-
-
- {renderText(message.webPage.siteName)}
-
-
- {renderTextWithEntities({
- text: message!.text.text,
- entities: message!.text.entities,
- })}
-
-
-
-
- >
- );
- }
-
- const buttonText = message?.buttonText ?? (
- isBotApp
- ? lang('BotWebAppInstantViewOpen')
- : (message!.isBot
- ? lang('Conversation.ViewBot')
- : lang(message!.channelPostId ? 'Conversation.ViewPost' : 'Conversation.ViewChannel')
- ));
- const title = isBotApp
- ? message!.botApp!.title
- : (bot
- ? renderText(getUserFullName(bot) || '')
- : (channel ? renderText(message!.chatInviteTitle || getChatTitle(lang, channel) || '') : '')
- );
-
+ if (!message) return undefined;
return (
<>
- {title}
+ {message.title}
{renderTextWithEntities({
@@ -258,48 +124,64 @@ const SponsoredMessage: FC = ({
isRectangular
onClick={handleClick}
>
- {buttonText}
+ {message.buttonText}
>
);
}
- const contentClassName = buildClassName(
- 'message-content has-shadow has-solid-background has-appendix',
- getPeerColorClass(bot || peer || channel),
- );
-
return (
- {withAvatar && renderAvatar()}
-
- {renderPhoto()}
+
+ {message.photo && (
+
+ )}
{message!.isRecommended ? lang('Message.RecommendedLabel') : lang('SponsoredMessage')}
+ {lang('SponsoredMessageAdWhatIsThis')}
{renderContent()}
-
+
-
+
+
+ {message.canReport && (
+
+ )}
+
{contextMenuPosition && (
= ({
anchor={contextMenuPosition}
message={message!}
onAboutAds={openAboutAdsModal}
+ onReportAd={handleReportSponsoredMessage}
onClose={handleContextMenuClose}
onCloseAnimationEnd={handleContextMenuHide}
/>
)}
@@ -322,14 +206,9 @@ const SponsoredMessage: FC = ({
export default memo(withGlobal(
(global, { chatId }): StateProps => {
const message = selectSponsoredMessage(global, chatId);
- const peer = message?.chatId ? selectChat(global, message?.chatId) : undefined;
- const { chatId: fromChatId, isBot } = message || {};
return {
message,
- peer,
- bot: fromChatId && isBot ? selectUser(global, fromChatId) : undefined,
- channel: !isBot && fromChatId ? selectChat(global, fromChatId) : undefined,
};
},
)(SponsoredMessage));
diff --git a/src/components/middle/message/SponsoredMessageContextMenuContainer.tsx b/src/components/middle/message/SponsoredMessageContextMenuContainer.tsx
index bb525ebd4..2e808c270 100644
--- a/src/components/middle/message/SponsoredMessageContextMenuContainer.tsx
+++ b/src/components/middle/message/SponsoredMessageContextMenuContainer.tsx
@@ -1,11 +1,10 @@
import type { FC } from '../../../lib/teact/teact';
import React, { memo } from '../../../lib/teact/teact';
-import { getActions, withGlobal } from '../../../global';
+import { getActions } from '../../../global';
import type { ApiSponsoredMessage } from '../../../api/types';
import type { IAnchorPosition } from '../../../types';
-import { selectIsCurrentUserPremium, selectIsPremiumPurchaseBlocked } from '../../../global/selectors';
import buildClassName from '../../../util/buildClassName';
import useFlag from '../../../hooks/useFlag';
@@ -18,22 +17,19 @@ export type OwnProps = {
isOpen: boolean;
message: ApiSponsoredMessage;
anchor: IAnchorPosition;
- onAboutAds: () => void;
- onClose: () => void;
- onCloseAnimationEnd: () => void;
+ onAboutAds: NoneToVoidFunction;
+ onReportAd: NoneToVoidFunction;
+ onClose: NoneToVoidFunction;
+ onCloseAnimationEnd: NoneToVoidFunction;
};
-type StateProps = {
- canBuyPremium?: boolean;
-};
-
-const SponsoredMessageContextMenuContainer: FC = ({
+const SponsoredMessageContextMenuContainer: FC = ({
message,
anchor,
onAboutAds,
+ onReportAd,
onClose,
onCloseAnimationEnd,
- canBuyPremium,
}) => {
const { openPremiumModal, showDialog } = getActions();
@@ -60,6 +56,11 @@ const SponsoredMessageContextMenuContainer: FC = ({
});
});
+ const handleReportSponsoredMessage = useLastCallback(() => {
+ closeMenu();
+ onReportAd();
+ });
+
if (!anchor) {
return undefined;
}
@@ -73,17 +74,12 @@ const SponsoredMessageContextMenuContainer: FC = ({
onClose={closeMenu}
onCloseAnimationEnd={closeMenu}
onAboutAds={handleAboutAdsOpen}
- onSponsoredHide={canBuyPremium ? handleSponsoredHide : undefined}
+ onSponsoredHide={handleSponsoredHide}
onSponsorInfo={handleSponsorInfo}
+ onSponsoredReport={handleReportSponsoredMessage}
/>
);
};
-export default memo(withGlobal(
- (global): StateProps => {
- return {
- canBuyPremium: !selectIsCurrentUserPremium(global) && !selectIsPremiumPurchaseBlocked(global),
- };
- },
-)(SponsoredMessageContextMenuContainer));
+export default memo(SponsoredMessageContextMenuContainer);
diff --git a/src/components/modals/ModalContainer.tsx b/src/components/modals/ModalContainer.tsx
index ecddef7eb..3031de69e 100644
--- a/src/components/modals/ModalContainer.tsx
+++ b/src/components/modals/ModalContainer.tsx
@@ -12,6 +12,7 @@ import ChatlistModal from './chatlist/ChatlistModal.async';
import GiftCodeModal from './giftcode/GiftCodeModal.async';
import InviteViaLinkModal from './inviteViaLink/InviteViaLinkModal.async';
import OneTimeMediaModal from './oneTimeMedia/OneTimeMediaModal.async';
+import ReportAdModal from './reportAd/ReportAdModal.async';
import UrlAuthModal from './urlAuth/UrlAuthModal.async';
import WebAppModal from './webApp/WebAppModal.async';
@@ -24,6 +25,7 @@ type ModalKey = keyof Pick;
@@ -47,6 +49,7 @@ const MODALS: ModalRegistry = {
oneTimeMediaModal: OneTimeMediaModal,
inviteViaLinkModal: InviteViaLinkModal,
requestedAttachBotInstall: AttachBotInstallModal,
+ reportAdModal: ReportAdModal,
webApp: WebAppModal,
};
const MODAL_KEYS = Object.keys(MODALS) as ModalKey[];
diff --git a/src/components/modals/reportAd/ReportAdModal.async.tsx b/src/components/modals/reportAd/ReportAdModal.async.tsx
new file mode 100644
index 000000000..389218040
--- /dev/null
+++ b/src/components/modals/reportAd/ReportAdModal.async.tsx
@@ -0,0 +1,18 @@
+import type { FC } from '../../../lib/teact/teact';
+import React from '../../../lib/teact/teact';
+
+import type { OwnProps } from './ReportAdModal';
+
+import { Bundles } from '../../../util/moduleLoader';
+
+import useModuleLoader from '../../../hooks/useModuleLoader';
+
+const ReportAdModalAsync: FC = (props) => {
+ const { modal } = props;
+ const ReportAdModal = useModuleLoader(Bundles.Extra, 'ReportAdModal', !modal);
+
+ // eslint-disable-next-line react/jsx-props-no-spreading
+ return ReportAdModal ? : undefined;
+};
+
+export default ReportAdModalAsync;
diff --git a/src/components/modals/reportAd/ReportAdModal.module.scss b/src/components/modals/reportAd/ReportAdModal.module.scss
new file mode 100644
index 000000000..73ab87944
--- /dev/null
+++ b/src/components/modals/reportAd/ReportAdModal.module.scss
@@ -0,0 +1,54 @@
+.slide { // Do not remove .slide, identifier used in JS
+ overflow-x: hidden;
+}
+
+.modalTitle {
+ display: flex;
+ flex-direction: column;
+}
+
+.optionText {
+ width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.option {
+ margin-bottom: 0.25rem !important;
+}
+
+.optionButton {
+ padding-block: 0 !important;
+}
+
+.sectionTitle {
+ color: var(--color-primary);
+ padding-inline: 1rem;
+}
+
+.description {
+ margin-top: 0.75rem;
+ margin-bottom: 0;
+ color: var(--color-text-secondary);
+ padding-inline: 1rem;
+}
+
+.title {
+ margin-bottom: 0;
+}
+
+.titleMultiline > .title {
+ font-size: 1rem;
+}
+
+.subtitle {
+ font-size: 0.875rem;
+ color: var(--color-text-secondary);
+}
+
+.transition {
+ /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */
+ transition: height 0.25s ease-in-out;
+ overflow: hidden;
+}
diff --git a/src/components/modals/reportAd/ReportAdModal.tsx b/src/components/modals/reportAd/ReportAdModal.tsx
new file mode 100644
index 000000000..dc7d12cf5
--- /dev/null
+++ b/src/components/modals/reportAd/ReportAdModal.tsx
@@ -0,0 +1,157 @@
+import React, {
+ memo, useEffect, useMemo, useRef,
+} from '../../../lib/teact/teact';
+import { getActions } from '../../../global';
+
+import type { TabState } from '../../../global/types';
+
+import { requestMeasure, requestMutation } from '../../../lib/fasterdom/fasterdom';
+import buildClassName from '../../../util/buildClassName';
+
+import useLang from '../../../hooks/useLang';
+import useLastCallback from '../../../hooks/useLastCallback';
+
+import Icon from '../../common/Icon';
+import SafeLink from '../../common/SafeLink';
+import Button from '../../ui/Button';
+import ListItem from '../../ui/ListItem';
+import Modal from '../../ui/Modal';
+import Transition, { ACTIVE_SLIDE_CLASS_NAME, TO_SLIDE_CLASS_NAME } from '../../ui/Transition';
+
+import styles from './ReportAdModal.module.scss';
+
+const ADDED_PADDING = 40;
+
+export type OwnProps = {
+ modal: TabState['reportAdModal'];
+};
+
+const ReportAdModal = ({
+ modal,
+}: OwnProps) => {
+ const {
+ reportSponsoredMessage, closeReportAdModal, openPreviousReportAdModal,
+ } = getActions();
+ const lang = useLang();
+ const isOpen = Boolean(modal);
+
+ // eslint-disable-next-line no-null/no-null
+ const transitionRef = useRef(null);
+
+ const handleOptionClick = useLastCallback((e, option: string) => {
+ const { chatId, randomId } = modal!;
+ reportSponsoredMessage({ chatId, randomId, option });
+ });
+
+ const [renderingSection, renderingDepth] = useMemo(() => {
+ if (!modal) return [undefined, 0];
+ const sectionDepth = modal.sections.length - 1;
+ return [modal.sections[sectionDepth], sectionDepth];
+ }, [modal]);
+
+ const handleBackClick = useLastCallback(() => {
+ if (!renderingDepth) {
+ closeReportAdModal();
+ return;
+ }
+
+ openPreviousReportAdModal();
+ });
+
+ const bottomText = useMemo(() => {
+ if (!modal) return undefined;
+ const template = lang('lng_report_sponsored_reported_learn');
+ const parts = template.split('{link}');
+ return [
+ parts[0],
+ ,
+ parts[1],
+ ];
+ }, [lang, modal]);
+
+ const header = useMemo(() => {
+ if (!modal) {
+ return undefined;
+ }
+
+ const hasSubtitle = Boolean(renderingSection?.subtitle);
+
+ return (
+
+
+
+
{lang('ReportAd')}
+ {hasSubtitle && (
+ {renderingSection.subtitle}
+ )}
+
+
+ );
+ }, [lang, modal, renderingDepth, renderingSection?.subtitle]);
+
+ useEffect(() => {
+ if (!modal) return;
+ const slide = document.querySelector(`.${ACTIVE_SLIDE_CLASS_NAME} > .${styles.slide}`);
+ if (!slide) return;
+
+ const height = slide.scrollHeight;
+ requestMutation(() => {
+ transitionRef.current!.style.height = `${height + ADDED_PADDING}px`;
+ });
+ }, [modal]);
+
+ const handleAnimationStart = useLastCallback(() => {
+ const slide = document.querySelector(`.${TO_SLIDE_CLASS_NAME} > .${styles.slide}`)!;
+
+ requestMeasure(() => {
+ const height = slide.scrollHeight;
+ requestMutation(() => {
+ transitionRef.current!.style.height = `${height + ADDED_PADDING}px`;
+ });
+ });
+ });
+
+ return (
+
+
+
+
{renderingSection?.title}
+ {renderingSection?.options.map((option) => (
+
+ {option.text}
+
+ ))}
+
+ {bottomText}
+
+
+ );
+};
+
+export default memo(ReportAdModal);
diff --git a/src/components/ui/Separator.tsx b/src/components/ui/Separator.tsx
index a7675591b..503cf25da 100644
--- a/src/components/ui/Separator.tsx
+++ b/src/components/ui/Separator.tsx
@@ -7,7 +7,7 @@ import useLang from '../../hooks/useLang';
import styles from './Separator.module.scss';
type OwnProps = {
- children: React.ReactNode;
+ children?: React.ReactNode;
className?: string;
};
diff --git a/src/config.ts b/src/config.ts
index 675ea4fb8..923eb364d 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -49,7 +49,7 @@ export const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;
export const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';
export const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB
export const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';
-export const LANG_CACHE_NAME = 'tt-lang-packs-v34';
+export const LANG_CACHE_NAME = 'tt-lang-packs-v35';
export const ASSET_CACHE_NAME = 'tt-assets';
export const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];
export const DATA_BROADCAST_CHANNEL_NAME = 'tt-global';
diff --git a/src/global/actions/api/messages.ts b/src/global/actions/api/messages.ts
index 932f31c5a..8beff59c2 100644
--- a/src/global/actions/api/messages.ts
+++ b/src/global/actions/api/messages.ts
@@ -67,6 +67,7 @@ import {
addChatMessagesById,
addChats,
addUsers,
+ deleteSponsoredMessage,
removeOutlyingList,
removeRequestedMessageTranslation,
replaceSettings,
@@ -90,6 +91,7 @@ import {
updateThreadUnreadFromForwardedMessage,
updateTopic,
updateUploadByMessageKey,
+ updateUserFullInfo,
updateUsers,
} from '../../reducers';
import { updateTabState } from '../../reducers/tabs';
@@ -1548,6 +1550,79 @@ addActionHandler('clickSponsoredMessage', (global, actions, payload): ActionRetu
void callApi('clickSponsoredMessage', { chat, random: message.randomId });
});
+addActionHandler('reportSponsoredMessage', async (global, actions, payload): Promise => {
+ const {
+ chatId, randomId, option = '', tabId = getCurrentTabId(),
+ } = payload;
+ const chat = selectChat(global, chatId);
+ if (!chat) {
+ return;
+ }
+
+ const result = await callApi('reportSponsoredMessage', { chat, randomId, option });
+
+ if (!result) return;
+
+ if (result.type === 'premiumRequired') {
+ actions.openPremiumModal({ initialSection: 'no_ads', tabId });
+ actions.closeReportAdModal({ tabId });
+ return;
+ }
+
+ if (result.type === 'reported' || result.type === 'hidden') {
+ actions.showNotification({
+ message: translate(result.type === 'reported' ? 'AdReported' : 'AdHidden'),
+ tabId,
+ });
+ actions.closeReportAdModal({ tabId });
+
+ global = getGlobal();
+ global = deleteSponsoredMessage(global, chatId);
+ setGlobal(global);
+ return;
+ }
+
+ if (result.type === 'selectOption') {
+ global = getGlobal();
+ const oldSections = selectTabState(global, tabId).reportAdModal?.sections;
+ const selectedOption = oldSections?.[oldSections.length - 1]?.options.find((o) => o.option === option);
+ const newSection = {
+ title: result.title,
+ options: result.options,
+ subtitle: selectedOption?.text,
+ };
+ global = updateTabState(global, {
+ reportAdModal: {
+ chatId,
+ randomId,
+ sections: oldSections ? [...oldSections, newSection] : [newSection],
+ },
+ }, tabId);
+ setGlobal(global);
+ }
+});
+
+addActionHandler('hideSponsoredMessages', async (global, actions, payload): Promise => {
+ const { tabId = getCurrentTabId() } = payload || {};
+ const isCurrentUserPremium = selectIsCurrentUserPremium(global);
+ if (!isCurrentUserPremium) {
+ actions.openPremiumModal({ initialSection: 'no_ads', tabId });
+ return;
+ }
+
+ const result = await callApi('toggleSponsoredMessages', { enabled: false });
+ if (!result) return;
+ global = getGlobal();
+ global = updateUserFullInfo(global, global.currentUserId!, {
+ areAdsEnabled: false,
+ });
+ setGlobal(global);
+ actions.showNotification({
+ message: translate('AdHidden'),
+ tabId,
+ });
+});
+
addActionHandler('fetchUnreadMentions', async (global, actions, payload): Promise => {
const { chatId, offsetId } = payload;
await fetchUnreadMentions(global, chatId, offsetId);
diff --git a/src/global/actions/ui/messages.ts b/src/global/actions/ui/messages.ts
index 523eeaddf..cd9135ab2 100644
--- a/src/global/actions/ui/messages.ts
+++ b/src/global/actions/ui/messages.ts
@@ -863,6 +863,33 @@ addActionHandler('closeOneTimeMediaModal', (global, actions, payload): ActionRet
setGlobal(global);
});
+addActionHandler('closeReportAdModal', (global, actions, payload): ActionReturnType => {
+ const { tabId = getCurrentTabId() } = payload || {};
+ return updateTabState(global, {
+ reportAdModal: undefined,
+ }, tabId);
+});
+
+addActionHandler('openPreviousReportAdModal', (global, actions, payload): ActionReturnType => {
+ const { tabId = getCurrentTabId() } = payload || {};
+ const reportAdModal = selectTabState(global, tabId).reportAdModal;
+ if (!reportAdModal) {
+ return undefined;
+ }
+
+ if (reportAdModal.sections.length === 1) {
+ actions.closeReportAdModal({ tabId });
+ return undefined;
+ }
+
+ return updateTabState(global, {
+ reportAdModal: {
+ ...reportAdModal,
+ sections: reportAdModal.sections.slice(0, -1),
+ },
+ }, tabId);
+});
+
function copyTextForMessages(global: GlobalState, chatId: string, messageIds: number[]) {
const { type: messageListType, threadId } = selectCurrentMessageList(global) || {};
const lang = langProvider.translate;
diff --git a/src/global/reducers/messages.ts b/src/global/reducers/messages.ts
index 4d5aca17c..d547170c0 100644
--- a/src/global/reducers/messages.ts
+++ b/src/global/reducers/messages.ts
@@ -671,6 +671,23 @@ export function updateSponsoredMessage(
};
}
+export function deleteSponsoredMessage(
+ global: T, chatId: string,
+): T {
+ const byChatId = global.messages.sponsoredByChatId;
+ if (!byChatId[chatId]) {
+ return global;
+ }
+
+ return {
+ ...global,
+ messages: {
+ ...global.messages,
+ sponsoredByChatId: omit(byChatId, [chatId]),
+ },
+ };
+}
+
export function updateFocusDirection(
global: T, direction?: FocusDirection,
...[tabId = getCurrentTabId()]: TabArgs
diff --git a/src/global/types.ts b/src/global/types.ts
index 4c84a3d60..c82a2630f 100644
--- a/src/global/types.ts
+++ b/src/global/types.ts
@@ -533,6 +533,19 @@ export type TabState = {
openedStickerSetShortName?: string;
openedCustomEmojiSetIds?: string[];
+ reportAdModal?: {
+ chatId: string;
+ randomId: string;
+ sections: {
+ title: string;
+ subtitle?: string;
+ options: {
+ text: string;
+ option: string;
+ }[];
+ }[];
+ };
+
activeDownloads: {
byChatId: {
[chatId: string]: {
@@ -1465,6 +1478,14 @@ export interface ActionPayloads {
clickSponsoredMessage: {
chatId: string;
};
+ reportSponsoredMessage: {
+ chatId: string;
+ randomId: string;
+ option?: string;
+ } & WithTabId;
+ openPreviousReportAdModal: WithTabId | undefined;
+ closeReportAdModal: WithTabId | undefined;
+ hideSponsoredMessages: WithTabId | undefined;
loadSendAs: {
chatId: string;
};
diff --git a/src/lib/gramjs/tl/AllTLObjects.js b/src/lib/gramjs/tl/AllTLObjects.js
index d9260efba..1e9eb6837 100644
--- a/src/lib/gramjs/tl/AllTLObjects.js
+++ b/src/lib/gramjs/tl/AllTLObjects.js
@@ -1,6 +1,6 @@
const api = require('./api');
-const LAYER = 177;
+const LAYER = 178;
const tlobjects = {};
for (const tl of Object.values(api)) {
diff --git a/src/lib/gramjs/tl/api.d.ts b/src/lib/gramjs/tl/api.d.ts
index 3895f6bd7..9dafcf75f 100644
--- a/src/lib/gramjs/tl/api.d.ts
+++ b/src/lib/gramjs/tl/api.d.ts
@@ -86,7 +86,7 @@ namespace Api {
export type TypeImportedContact = ImportedContact;
export type TypeContactStatus = ContactStatus;
export type TypeMessagesFilter = InputMessagesFilterEmpty | InputMessagesFilterPhotos | InputMessagesFilterVideo | InputMessagesFilterPhotoVideo | InputMessagesFilterDocument | InputMessagesFilterUrl | InputMessagesFilterGif | InputMessagesFilterVoice | InputMessagesFilterMusic | InputMessagesFilterChatPhotos | InputMessagesFilterPhoneCalls | InputMessagesFilterRoundVoice | InputMessagesFilterRoundVideo | InputMessagesFilterMyMentions | InputMessagesFilterGeo | InputMessagesFilterContacts | InputMessagesFilterPinned;
- export type TypeUpdate = UpdateNewMessage | UpdateMessageID | UpdateDeleteMessages | UpdateUserTyping | UpdateChatUserTyping | UpdateChatParticipants | UpdateUserStatus | UpdateUserName | UpdateNewAuthorization | UpdateNewEncryptedMessage | UpdateEncryptedChatTyping | UpdateEncryption | UpdateEncryptedMessagesRead | UpdateChatParticipantAdd | UpdateChatParticipantDelete | UpdateDcOptions | UpdateNotifySettings | UpdateServiceNotification | UpdatePrivacy | UpdateUserPhone | UpdateReadHistoryInbox | UpdateReadHistoryOutbox | UpdateWebPage | UpdateReadMessagesContents | UpdateChannelTooLong | UpdateChannel | UpdateNewChannelMessage | UpdateReadChannelInbox | UpdateDeleteChannelMessages | UpdateChannelMessageViews | UpdateChatParticipantAdmin | UpdateNewStickerSet | UpdateStickerSetsOrder | UpdateStickerSets | UpdateSavedGifs | UpdateBotInlineQuery | UpdateBotInlineSend | UpdateEditChannelMessage | UpdateBotCallbackQuery | UpdateEditMessage | UpdateInlineBotCallbackQuery | UpdateReadChannelOutbox | UpdateDraftMessage | UpdateReadFeaturedStickers | UpdateRecentStickers | UpdateConfig | UpdatePtsChanged | UpdateChannelWebPage | UpdateDialogPinned | UpdatePinnedDialogs | UpdateBotWebhookJSON | UpdateBotWebhookJSONQuery | UpdateBotShippingQuery | UpdateBotPrecheckoutQuery | UpdatePhoneCall | UpdateLangPackTooLong | UpdateLangPack | UpdateFavedStickers | UpdateChannelReadMessagesContents | UpdateContactsReset | UpdateChannelAvailableMessages | UpdateDialogUnreadMark | UpdateMessagePoll | UpdateChatDefaultBannedRights | UpdateFolderPeers | UpdatePeerSettings | UpdatePeerLocated | UpdateNewScheduledMessage | UpdateDeleteScheduledMessages | UpdateTheme | UpdateGeoLiveViewed | UpdateLoginToken | UpdateMessagePollVote | UpdateDialogFilter | UpdateDialogFilterOrder | UpdateDialogFilters | UpdatePhoneCallSignalingData | UpdateChannelMessageForwards | UpdateReadChannelDiscussionInbox | UpdateReadChannelDiscussionOutbox | UpdatePeerBlocked | UpdateChannelUserTyping | UpdatePinnedMessages | UpdatePinnedChannelMessages | UpdateChat | UpdateGroupCallParticipants | UpdateGroupCall | UpdatePeerHistoryTTL | UpdateChatParticipant | UpdateChannelParticipant | UpdateBotStopped | UpdateGroupCallConnection | UpdateBotCommands | UpdatePendingJoinRequests | UpdateBotChatInviteRequester | UpdateMessageReactions | UpdateAttachMenuBots | UpdateWebViewResultSent | UpdateBotMenuButton | UpdateSavedRingtones | UpdateTranscribedAudio | UpdateReadFeaturedEmojiStickers | UpdateUserEmojiStatus | UpdateRecentEmojiStatuses | UpdateRecentReactions | UpdateMoveStickerSetToTop | UpdateMessageExtendedMedia | UpdateChannelPinnedTopic | UpdateChannelPinnedTopics | UpdateUser | UpdateAutoSaveSettings | UpdateStory | UpdateReadStories | UpdateStoryID | UpdateStoriesStealthMode | UpdateSentStoryReaction | UpdateBotChatBoost | UpdateChannelViewForumAsMessages | UpdatePeerWallpaper | UpdateBotMessageReaction | UpdateBotMessageReactions | UpdateSavedDialogPinned | UpdatePinnedSavedDialogs | UpdateSavedReactionTags | UpdateSmsJob | UpdateQuickReplies | UpdateNewQuickReply | UpdateDeleteQuickReply | UpdateQuickReplyMessage | UpdateDeleteQuickReplyMessages | UpdateBotBusinessConnect | UpdateBotNewBusinessMessage | UpdateBotEditBusinessMessage | UpdateBotDeleteBusinessMessage;
+ export type TypeUpdate = UpdateNewMessage | UpdateMessageID | UpdateDeleteMessages | UpdateUserTyping | UpdateChatUserTyping | UpdateChatParticipants | UpdateUserStatus | UpdateUserName | UpdateNewAuthorization | UpdateNewEncryptedMessage | UpdateEncryptedChatTyping | UpdateEncryption | UpdateEncryptedMessagesRead | UpdateChatParticipantAdd | UpdateChatParticipantDelete | UpdateDcOptions | UpdateNotifySettings | UpdateServiceNotification | UpdatePrivacy | UpdateUserPhone | UpdateReadHistoryInbox | UpdateReadHistoryOutbox | UpdateWebPage | UpdateReadMessagesContents | UpdateChannelTooLong | UpdateChannel | UpdateNewChannelMessage | UpdateReadChannelInbox | UpdateDeleteChannelMessages | UpdateChannelMessageViews | UpdateChatParticipantAdmin | UpdateNewStickerSet | UpdateStickerSetsOrder | UpdateStickerSets | UpdateSavedGifs | UpdateBotInlineQuery | UpdateBotInlineSend | UpdateEditChannelMessage | UpdateBotCallbackQuery | UpdateEditMessage | UpdateInlineBotCallbackQuery | UpdateReadChannelOutbox | UpdateDraftMessage | UpdateReadFeaturedStickers | UpdateRecentStickers | UpdateConfig | UpdatePtsChanged | UpdateChannelWebPage | UpdateDialogPinned | UpdatePinnedDialogs | UpdateBotWebhookJSON | UpdateBotWebhookJSONQuery | UpdateBotShippingQuery | UpdateBotPrecheckoutQuery | UpdatePhoneCall | UpdateLangPackTooLong | UpdateLangPack | UpdateFavedStickers | UpdateChannelReadMessagesContents | UpdateContactsReset | UpdateChannelAvailableMessages | UpdateDialogUnreadMark | UpdateMessagePoll | UpdateChatDefaultBannedRights | UpdateFolderPeers | UpdatePeerSettings | UpdatePeerLocated | UpdateNewScheduledMessage | UpdateDeleteScheduledMessages | UpdateTheme | UpdateGeoLiveViewed | UpdateLoginToken | UpdateMessagePollVote | UpdateDialogFilter | UpdateDialogFilterOrder | UpdateDialogFilters | UpdatePhoneCallSignalingData | UpdateChannelMessageForwards | UpdateReadChannelDiscussionInbox | UpdateReadChannelDiscussionOutbox | UpdatePeerBlocked | UpdateChannelUserTyping | UpdatePinnedMessages | UpdatePinnedChannelMessages | UpdateChat | UpdateGroupCallParticipants | UpdateGroupCall | UpdatePeerHistoryTTL | UpdateChatParticipant | UpdateChannelParticipant | UpdateBotStopped | UpdateGroupCallConnection | UpdateBotCommands | UpdatePendingJoinRequests | UpdateBotChatInviteRequester | UpdateMessageReactions | UpdateAttachMenuBots | UpdateWebViewResultSent | UpdateBotMenuButton | UpdateSavedRingtones | UpdateTranscribedAudio | UpdateReadFeaturedEmojiStickers | UpdateUserEmojiStatus | UpdateRecentEmojiStatuses | UpdateRecentReactions | UpdateMoveStickerSetToTop | UpdateMessageExtendedMedia | UpdateChannelPinnedTopic | UpdateChannelPinnedTopics | UpdateUser | UpdateAutoSaveSettings | UpdateStory | UpdateReadStories | UpdateStoryID | UpdateStoriesStealthMode | UpdateSentStoryReaction | UpdateBotChatBoost | UpdateChannelViewForumAsMessages | UpdatePeerWallpaper | UpdateBotMessageReaction | UpdateBotMessageReactions | UpdateSavedDialogPinned | UpdatePinnedSavedDialogs | UpdateSavedReactionTags | UpdateSmsJob | UpdateQuickReplies | UpdateNewQuickReply | UpdateDeleteQuickReply | UpdateQuickReplyMessage | UpdateDeleteQuickReplyMessages | UpdateBotBusinessConnect | UpdateBotNewBusinessMessage | UpdateBotEditBusinessMessage | UpdateBotDeleteBusinessMessage | UpdateNewStoryReaction;
export type TypeUpdates = UpdatesTooLong | UpdateShortMessage | UpdateShortChatMessage | UpdateShort | UpdatesCombined | Updates | UpdateShortSentMessage;
export type TypeDcOption = DcOption;
export type TypeConfig = Config;
@@ -234,7 +234,7 @@ namespace Api {
export type TypeBaseTheme = BaseThemeClassic | BaseThemeDay | BaseThemeNight | BaseThemeTinted | BaseThemeArctic;
export type TypeInputThemeSettings = InputThemeSettings;
export type TypeThemeSettings = ThemeSettings;
- export type TypeWebPageAttribute = WebPageAttributeTheme | WebPageAttributeStory;
+ export type TypeWebPageAttribute = WebPageAttributeTheme | WebPageAttributeStory | WebPageAttributeStickerSet;
export type TypeBankCardOpenUrl = BankCardOpenUrl;
export type TypeDialogFilter = DialogFilter | DialogFilterDefault | DialogFilterChatlist;
export type TypeDialogFilterSuggested = DialogFilterSuggested;
@@ -310,7 +310,6 @@ namespace Api {
export type TypeInputChatlist = InputChatlistDialogFilter;
export type TypeExportedChatlistInvite = ExportedChatlistInvite;
export type TypeMessagePeerVote = MessagePeerVote | MessagePeerVoteInputOption | MessagePeerVoteMultiple;
- export type TypeSponsoredWebPage = SponsoredWebPage;
export type TypeStoryViews = StoryViews;
export type TypeStoryItem = StoryItemDeleted | StoryItemSkipped | StoryItem;
export type TypeStoryView = StoryView | StoryViewPublicForward | StoryViewPublicRepost;
@@ -361,6 +360,8 @@ namespace Api {
export type TypeRequestedPeer = RequestedPeerUser | RequestedPeerChat | RequestedPeerChannel;
export type TypeSponsoredMessageReportOption = SponsoredMessageReportOption;
export type TypeBroadcastRevenueTransaction = BroadcastRevenueTransactionProceeds | BroadcastRevenueTransactionWithdrawal | BroadcastRevenueTransactionRefund;
+ export type TypeReactionNotificationsFrom = ReactionNotificationsFromContacts | ReactionNotificationsFromAll;
+ export type TypeReactionsNotifySettings = ReactionsNotifySettings;
export type TypeResPQ = ResPQ;
export type TypeP_Q_inner_data = PQInnerData | PQInnerDataDc | PQInnerDataTemp | PQInnerDataTempDc;
export type TypeServer_DH_Params = ServerDHParamsFail | ServerDHParamsOk;
@@ -1372,6 +1373,7 @@ namespace Api {
requestsPending?: int;
recentRequesters?: long[];
availableReactions?: Api.TypeChatReactions;
+ reactionsLimit?: int;
}> {
// flags: undefined;
canSetUsername?: true;
@@ -1393,6 +1395,7 @@ namespace Api {
requestsPending?: int;
recentRequesters?: long[];
availableReactions?: Api.TypeChatReactions;
+ reactionsLimit?: int;
};
export class ChannelFull extends VirtualClass<{
// flags: undefined;
@@ -1448,6 +1451,7 @@ namespace Api {
recentRequesters?: long[];
defaultSendAs?: Api.TypePeer;
availableReactions?: Api.TypeChatReactions;
+ reactionsLimit?: int;
stories?: Api.TypePeerStories;
wallpaper?: Api.TypeWallPaper;
boostsApplied?: int;
@@ -1507,6 +1511,7 @@ namespace Api {
recentRequesters?: long[];
defaultSendAs?: Api.TypePeer;
availableReactions?: Api.TypeChatReactions;
+ reactionsLimit?: int;
stories?: Api.TypePeerStories;
wallpaper?: Api.TypeWallPaper;
boostsApplied?: int;
@@ -2500,6 +2505,7 @@ namespace Api {
contactRequirePremium?: true;
readDatesPrivate?: true;
// flags2: undefined;
+ sponsoredEnabled?: true;
id: long;
about?: string;
settings: Api.TypePeerSettings;
@@ -2543,6 +2549,7 @@ namespace Api {
contactRequirePremium?: true;
readDatesPrivate?: true;
// flags2: undefined;
+ sponsoredEnabled?: true;
id: long;
about?: string;
settings: Api.TypePeerSettings;
@@ -3757,6 +3764,15 @@ namespace Api {
messages: int[];
qts: int;
};
+ export class UpdateNewStoryReaction extends VirtualClass<{
+ storyId: int;
+ peer: Api.TypePeer;
+ reaction: Api.TypeReaction;
+ }> {
+ storyId: int;
+ peer: Api.TypePeer;
+ reaction: Api.TypeReaction;
+ };
export class UpdatesTooLong extends VirtualClass {};
export class UpdateShortMessage extends VirtualClass<{
// flags: undefined;
@@ -7593,6 +7609,7 @@ namespace Api {
allowAppHash?: true;
allowMissedCall?: true;
allowFirebase?: true;
+ unknownNumber?: true;
logoutTokens?: bytes[];
token?: string;
appSandbox?: Bool;
@@ -7603,6 +7620,7 @@ namespace Api {
allowAppHash?: true;
allowMissedCall?: true;
allowFirebase?: true;
+ unknownNumber?: true;
logoutTokens?: bytes[];
token?: string;
appSandbox?: Bool;
@@ -7871,6 +7889,17 @@ namespace Api {
id: int;
story?: Api.TypeStoryItem;
};
+ export class WebPageAttributeStickerSet extends VirtualClass<{
+ // flags: undefined;
+ emojis?: true;
+ textColor?: true;
+ stickers: Api.TypeDocument[];
+ }> {
+ // flags: undefined;
+ emojis?: true;
+ textColor?: true;
+ stickers: Api.TypeDocument[];
+ };
export class BankCardOpenUrl extends VirtualClass<{
url: string;
name: string;
@@ -8300,37 +8329,29 @@ namespace Api {
export class SponsoredMessage extends VirtualClass<{
// flags: undefined;
recommended?: true;
- showPeerPhoto?: true;
canReport?: true;
randomId: bytes;
- fromId?: Api.TypePeer;
- chatInvite?: Api.TypeChatInvite;
- chatInviteHash?: string;
- channelPost?: int;
- startParam?: string;
- webpage?: Api.TypeSponsoredWebPage;
- app?: Api.TypeBotApp;
+ url: string;
+ title: string;
message: string;
entities?: Api.TypeMessageEntity[];
- buttonText?: string;
+ photo?: Api.TypePhoto;
+ color?: Api.TypePeerColor;
+ buttonText: string;
sponsorInfo?: string;
additionalInfo?: string;
}> {
// flags: undefined;
recommended?: true;
- showPeerPhoto?: true;
canReport?: true;
randomId: bytes;
- fromId?: Api.TypePeer;
- chatInvite?: Api.TypeChatInvite;
- chatInviteHash?: string;
- channelPost?: int;
- startParam?: string;
- webpage?: Api.TypeSponsoredWebPage;
- app?: Api.TypeBotApp;
+ url: string;
+ title: string;
message: string;
entities?: Api.TypeMessageEntity[];
- buttonText?: string;
+ photo?: Api.TypePhoto;
+ color?: Api.TypePeerColor;
+ buttonText: string;
sponsorInfo?: string;
additionalInfo?: string;
};
@@ -9001,17 +9022,6 @@ namespace Api {
options: bytes[];
date: int;
};
- export class SponsoredWebPage extends VirtualClass<{
- // flags: undefined;
- url: string;
- siteName: string;
- photo?: Api.TypePhoto;
- }> {
- // flags: undefined;
- url: string;
- siteName: string;
- photo?: Api.TypePhoto;
- };
export class StoryViews extends VirtualClass<{
// flags: undefined;
hasViewers?: true;
@@ -9820,6 +9830,21 @@ namespace Api {
date: int;
provider: string;
};
+ export class ReactionNotificationsFromContacts extends VirtualClass {};
+ export class ReactionNotificationsFromAll extends VirtualClass {};
+ export class ReactionsNotifySettings extends VirtualClass<{
+ // flags: undefined;
+ messagesNotifyFrom?: Api.TypeReactionNotificationsFrom;
+ storiesNotifyFrom?: Api.TypeReactionNotificationsFrom;
+ sound: Api.TypeNotificationSound;
+ showPreviews: Bool;
+ }> {
+ // flags: undefined;
+ messagesNotifyFrom?: Api.TypeReactionNotificationsFrom;
+ storiesNotifyFrom?: Api.TypeReactionNotificationsFrom;
+ sound: Api.TypeNotificationSound;
+ showPreviews: Bool;
+ };
export class ResPQ extends VirtualClass<{
nonce: int128;
serverNonce: int128;
@@ -12315,13 +12340,17 @@ namespace Api {
stealthMode: Api.TypeStoriesStealthMode;
};
export class Stories extends VirtualClass<{
+ // flags: undefined;
count: int;
stories: Api.TypeStoryItem[];
+ pinnedToTop?: int[];
chats: Api.TypeChat[];
users: Api.TypeUser[];
}> {
+ // flags: undefined;
count: int;
stories: Api.TypeStoryItem[];
+ pinnedToTop?: int[];
chats: Api.TypeChat[];
users: Api.TypeUser[];
};
@@ -13468,6 +13497,17 @@ namespace Api {
}>, Bool> {
channel: Api.TypeInputChannel;
};
+ export class ToggleSponsoredMessages extends Request, Bool> {
+ enabled: Bool;
+ };
+ export class GetReactionsNotifySettings extends Request {};
+ export class SetReactionsNotifySettings extends Request, Api.TypeReactionsNotifySettings> {
+ settings: Api.TypeReactionsNotifySettings;
+ };
}
export namespace users {
@@ -14192,6 +14232,7 @@ namespace Api {
};
export class SearchGlobal extends Request, messages.TypeMessages> {
// flags: undefined;
+ broadcastsOnly?: true;
folderId?: int;
q: string;
filter: Api.TypeMessagesFilter;
@@ -15215,11 +15257,15 @@ namespace Api {
limit: int;
};
export class SetChatAvailableReactions extends Request, Api.TypeUpdates> {
+ // flags: undefined;
peer: Api.TypeInputPeer;
availableReactions: Api.TypeChatReactions;
+ reactionsLimit?: int;
};
export class GetAvailableReactions extends Request, messages.TypeChats> {
- channel: Api.TypeInputChannel;
+ // flags: undefined;
+ channel?: Api.TypeInputChannel;
+ } | void>, messages.TypeChats> {
+ // flags: undefined;
+ channel?: Api.TypeInputChannel;
};
export class UpdateEmojiStatus extends Request, Bool> {
+ peer: Api.TypeInputPeer;
+ id: int[];
+ };
}
export namespace premium {
@@ -17671,7 +17726,7 @@ namespace Api {
export type AnyRequest = InvokeAfterMsg | InvokeAfterMsgs | InitConnection | InvokeWithLayer | InvokeWithoutUpdates | InvokeWithMessagesRange | InvokeWithTakeout | InvokeWithBusinessConnection | ReqPq | ReqPqMulti | ReqPqMultiNew | ReqDHParams | SetClientDHParams | DestroyAuthKey | RpcDropAnswer | GetFutureSalts | Ping | PingDelayDisconnect | DestroySession
| auth.SendCode | auth.SignUp | auth.SignIn | auth.LogOut | auth.ResetAuthorizations | auth.ExportAuthorization | auth.ImportAuthorization | auth.BindTempAuthKey | auth.ImportBotAuthorization | auth.CheckPassword | auth.RequestPasswordRecovery | auth.RecoverPassword | auth.ResendCode | auth.CancelCode | auth.DropTempAuthKeys | auth.ExportLoginToken | auth.ImportLoginToken | auth.AcceptLoginToken | auth.CheckRecoveryPassword | auth.ImportWebTokenAuthorization | auth.RequestFirebaseSms | auth.ResetLoginEmail
- | account.RegisterDevice | account.UnregisterDevice | account.UpdateNotifySettings | account.GetNotifySettings | account.ResetNotifySettings | account.UpdateProfile | account.UpdateStatus | account.GetWallPapers | account.ReportPeer | account.CheckUsername | account.UpdateUsername | account.GetPrivacy | account.SetPrivacy | account.DeleteAccount | account.GetAccountTTL | account.SetAccountTTL | account.SendChangePhoneCode | account.ChangePhone | account.UpdateDeviceLocked | account.GetAuthorizations | account.ResetAuthorization | account.GetPassword | account.GetPasswordSettings | account.UpdatePasswordSettings | account.SendConfirmPhoneCode | account.ConfirmPhone | account.GetTmpPassword | account.GetWebAuthorizations | account.ResetWebAuthorization | account.ResetWebAuthorizations | account.GetAllSecureValues | account.GetSecureValue | account.SaveSecureValue | account.DeleteSecureValue | account.GetAuthorizationForm | account.AcceptAuthorization | account.SendVerifyPhoneCode | account.VerifyPhone | account.SendVerifyEmailCode | account.VerifyEmail | account.InitTakeoutSession | account.FinishTakeoutSession | account.ConfirmPasswordEmail | account.ResendPasswordEmail | account.CancelPasswordEmail | account.GetContactSignUpNotification | account.SetContactSignUpNotification | account.GetNotifyExceptions | account.GetWallPaper | account.UploadWallPaper | account.SaveWallPaper | account.InstallWallPaper | account.ResetWallPapers | account.GetAutoDownloadSettings | account.SaveAutoDownloadSettings | account.UploadTheme | account.CreateTheme | account.UpdateTheme | account.SaveTheme | account.InstallTheme | account.GetTheme | account.GetThemes | account.SetContentSettings | account.GetContentSettings | account.GetMultiWallPapers | account.GetGlobalPrivacySettings | account.SetGlobalPrivacySettings | account.ReportProfilePhoto | account.ResetPassword | account.DeclinePasswordReset | account.GetChatThemes | account.SetAuthorizationTTL | account.ChangeAuthorizationSettings | account.GetSavedRingtones | account.SaveRingtone | account.UploadRingtone | account.UpdateEmojiStatus | account.GetDefaultEmojiStatuses | account.GetRecentEmojiStatuses | account.ClearRecentEmojiStatuses | account.ReorderUsernames | account.ToggleUsername | account.GetDefaultProfilePhotoEmojis | account.GetDefaultGroupPhotoEmojis | account.GetAutoSaveSettings | account.SaveAutoSaveSettings | account.DeleteAutoSaveExceptions | account.InvalidateSignInCodes | account.UpdateColor | account.GetDefaultBackgroundEmojis | account.GetChannelDefaultEmojiStatuses | account.GetChannelRestrictedStatusEmojis | account.UpdateBusinessWorkHours | account.UpdateBusinessLocation | account.UpdateBusinessGreetingMessage | account.UpdateBusinessAwayMessage | account.UpdateConnectedBot | account.GetConnectedBots | account.GetBotBusinessConnection | account.UpdateBusinessIntro | account.ToggleConnectedBotPaused | account.DisablePeerConnectedBot | account.UpdateBirthday | account.CreateBusinessChatLink | account.EditBusinessChatLink | account.DeleteBusinessChatLink | account.GetBusinessChatLinks | account.ResolveBusinessChatLink | account.UpdatePersonalChannel
+ | account.RegisterDevice | account.UnregisterDevice | account.UpdateNotifySettings | account.GetNotifySettings | account.ResetNotifySettings | account.UpdateProfile | account.UpdateStatus | account.GetWallPapers | account.ReportPeer | account.CheckUsername | account.UpdateUsername | account.GetPrivacy | account.SetPrivacy | account.DeleteAccount | account.GetAccountTTL | account.SetAccountTTL | account.SendChangePhoneCode | account.ChangePhone | account.UpdateDeviceLocked | account.GetAuthorizations | account.ResetAuthorization | account.GetPassword | account.GetPasswordSettings | account.UpdatePasswordSettings | account.SendConfirmPhoneCode | account.ConfirmPhone | account.GetTmpPassword | account.GetWebAuthorizations | account.ResetWebAuthorization | account.ResetWebAuthorizations | account.GetAllSecureValues | account.GetSecureValue | account.SaveSecureValue | account.DeleteSecureValue | account.GetAuthorizationForm | account.AcceptAuthorization | account.SendVerifyPhoneCode | account.VerifyPhone | account.SendVerifyEmailCode | account.VerifyEmail | account.InitTakeoutSession | account.FinishTakeoutSession | account.ConfirmPasswordEmail | account.ResendPasswordEmail | account.CancelPasswordEmail | account.GetContactSignUpNotification | account.SetContactSignUpNotification | account.GetNotifyExceptions | account.GetWallPaper | account.UploadWallPaper | account.SaveWallPaper | account.InstallWallPaper | account.ResetWallPapers | account.GetAutoDownloadSettings | account.SaveAutoDownloadSettings | account.UploadTheme | account.CreateTheme | account.UpdateTheme | account.SaveTheme | account.InstallTheme | account.GetTheme | account.GetThemes | account.SetContentSettings | account.GetContentSettings | account.GetMultiWallPapers | account.GetGlobalPrivacySettings | account.SetGlobalPrivacySettings | account.ReportProfilePhoto | account.ResetPassword | account.DeclinePasswordReset | account.GetChatThemes | account.SetAuthorizationTTL | account.ChangeAuthorizationSettings | account.GetSavedRingtones | account.SaveRingtone | account.UploadRingtone | account.UpdateEmojiStatus | account.GetDefaultEmojiStatuses | account.GetRecentEmojiStatuses | account.ClearRecentEmojiStatuses | account.ReorderUsernames | account.ToggleUsername | account.GetDefaultProfilePhotoEmojis | account.GetDefaultGroupPhotoEmojis | account.GetAutoSaveSettings | account.SaveAutoSaveSettings | account.DeleteAutoSaveExceptions | account.InvalidateSignInCodes | account.UpdateColor | account.GetDefaultBackgroundEmojis | account.GetChannelDefaultEmojiStatuses | account.GetChannelRestrictedStatusEmojis | account.UpdateBusinessWorkHours | account.UpdateBusinessLocation | account.UpdateBusinessGreetingMessage | account.UpdateBusinessAwayMessage | account.UpdateConnectedBot | account.GetConnectedBots | account.GetBotBusinessConnection | account.UpdateBusinessIntro | account.ToggleConnectedBotPaused | account.DisablePeerConnectedBot | account.UpdateBirthday | account.CreateBusinessChatLink | account.EditBusinessChatLink | account.DeleteBusinessChatLink | account.GetBusinessChatLinks | account.ResolveBusinessChatLink | account.UpdatePersonalChannel | account.ToggleSponsoredMessages | account.GetReactionsNotifySettings | account.SetReactionsNotifySettings
| users.GetUsers | users.GetFullUser | users.SetSecureValueErrors | users.GetIsPremiumRequiredToContact
| contacts.GetContactIDs | contacts.GetStatuses | contacts.GetContacts | contacts.ImportContacts | contacts.DeleteContacts | contacts.DeleteByPhones | contacts.Block | contacts.Unblock | contacts.GetBlocked | contacts.Search | contacts.ResolveUsername | contacts.GetTopPeers | contacts.ResetTopPeerRating | contacts.ResetSaved | contacts.GetSaved | contacts.ToggleTopPeers | contacts.AddContact | contacts.AcceptContact | contacts.GetLocated | contacts.BlockFromReplies | contacts.ResolvePhone | contacts.ExportContactToken | contacts.ImportContactToken | contacts.EditCloseFriends | contacts.SetBlocked | contacts.GetBirthdays
| messages.GetMessages | messages.GetDialogs | messages.GetHistory | messages.Search | messages.ReadHistory | messages.DeleteHistory | messages.DeleteMessages | messages.ReceivedMessages | messages.SetTyping | messages.SendMessage | messages.SendMedia | messages.ForwardMessages | messages.ReportSpam | messages.GetPeerSettings | messages.Report | messages.GetChats | messages.GetFullChat | messages.EditChatTitle | messages.EditChatPhoto | messages.AddChatUser | messages.DeleteChatUser | messages.CreateChat | messages.GetDhConfig | messages.RequestEncryption | messages.AcceptEncryption | messages.DiscardEncryption | messages.SetEncryptedTyping | messages.ReadEncryptedHistory | messages.SendEncrypted | messages.SendEncryptedFile | messages.SendEncryptedService | messages.ReceivedQueue | messages.ReportEncryptedSpam | messages.ReadMessageContents | messages.GetStickers | messages.GetAllStickers | messages.GetWebPagePreview | messages.ExportChatInvite | messages.CheckChatInvite | messages.ImportChatInvite | messages.GetStickerSet | messages.InstallStickerSet | messages.UninstallStickerSet | messages.StartBot | messages.GetMessagesViews | messages.EditChatAdmin | messages.MigrateChat | messages.SearchGlobal | messages.ReorderStickerSets | messages.GetDocumentByHash | messages.GetSavedGifs | messages.SaveGif | messages.GetInlineBotResults | messages.SetInlineBotResults | messages.SendInlineBotResult | messages.GetMessageEditData | messages.EditMessage | messages.EditInlineBotMessage | messages.GetBotCallbackAnswer | messages.SetBotCallbackAnswer | messages.GetPeerDialogs | messages.SaveDraft | messages.GetAllDrafts | messages.GetFeaturedStickers | messages.ReadFeaturedStickers | messages.GetRecentStickers | messages.SaveRecentSticker | messages.ClearRecentStickers | messages.GetArchivedStickers | messages.GetMaskStickers | messages.GetAttachedStickers | messages.SetGameScore | messages.SetInlineGameScore | messages.GetGameHighScores | messages.GetInlineGameHighScores | messages.GetCommonChats | messages.GetWebPage | messages.ToggleDialogPin | messages.ReorderPinnedDialogs | messages.GetPinnedDialogs | messages.SetBotShippingResults | messages.SetBotPrecheckoutResults | messages.UploadMedia | messages.SendScreenshotNotification | messages.GetFavedStickers | messages.FaveSticker | messages.GetUnreadMentions | messages.ReadMentions | messages.GetRecentLocations | messages.SendMultiMedia | messages.UploadEncryptedFile | messages.SearchStickerSets | messages.GetSplitRanges | messages.MarkDialogUnread | messages.GetDialogUnreadMarks | messages.ClearAllDrafts | messages.UpdatePinnedMessage | messages.SendVote | messages.GetPollResults | messages.GetOnlines | messages.EditChatAbout | messages.EditChatDefaultBannedRights | messages.GetEmojiKeywords | messages.GetEmojiKeywordsDifference | messages.GetEmojiKeywordsLanguages | messages.GetEmojiURL | messages.GetSearchCounters | messages.RequestUrlAuth | messages.AcceptUrlAuth | messages.HidePeerSettingsBar | messages.GetScheduledHistory | messages.GetScheduledMessages | messages.SendScheduledMessages | messages.DeleteScheduledMessages | messages.GetPollVotes | messages.ToggleStickerSets | messages.GetDialogFilters | messages.GetSuggestedDialogFilters | messages.UpdateDialogFilter | messages.UpdateDialogFiltersOrder | messages.GetOldFeaturedStickers | messages.GetReplies | messages.GetDiscussionMessage | messages.ReadDiscussion | messages.UnpinAllMessages | messages.DeleteChat | messages.DeletePhoneCallHistory | messages.CheckHistoryImport | messages.InitHistoryImport | messages.UploadImportedMedia | messages.StartHistoryImport | messages.GetExportedChatInvites | messages.GetExportedChatInvite | messages.EditExportedChatInvite | messages.DeleteRevokedExportedChatInvites | messages.DeleteExportedChatInvite | messages.GetAdminsWithInvites | messages.GetChatInviteImporters | messages.SetHistoryTTL | messages.CheckHistoryImportPeer | messages.SetChatTheme | messages.GetMessageReadParticipants | messages.GetSearchResultsCalendar | messages.GetSearchResultsPositions | messages.HideChatJoinRequest | messages.HideAllChatJoinRequests | messages.ToggleNoForwards | messages.SaveDefaultSendAs | messages.SendReaction | messages.GetMessagesReactions | messages.GetMessageReactionsList | messages.SetChatAvailableReactions | messages.GetAvailableReactions | messages.SetDefaultReaction | messages.TranslateText | messages.GetUnreadReactions | messages.ReadReactions | messages.SearchSentMedia | messages.GetAttachMenuBots | messages.GetAttachMenuBot | messages.ToggleBotInAttachMenu | messages.RequestWebView | messages.ProlongWebView | messages.RequestSimpleWebView | messages.SendWebViewResultMessage | messages.SendWebViewData | messages.TranscribeAudio | messages.RateTranscribedAudio | messages.GetCustomEmojiDocuments | messages.GetEmojiStickers | messages.GetFeaturedEmojiStickers | messages.ReportReaction | messages.GetTopReactions | messages.GetRecentReactions | messages.ClearRecentReactions | messages.GetExtendedMedia | messages.SetDefaultHistoryTTL | messages.GetDefaultHistoryTTL | messages.SendBotRequestedPeer | messages.GetEmojiGroups | messages.GetEmojiStatusGroups | messages.GetEmojiProfilePhotoGroups | messages.SearchCustomEmoji | messages.TogglePeerTranslations | messages.GetBotApp | messages.RequestAppWebView | messages.SetChatWallPaper | messages.SearchEmojiStickerSets | messages.GetSavedDialogs | messages.GetSavedHistory | messages.DeleteSavedHistory | messages.GetPinnedSavedDialogs | messages.ToggleSavedDialogPin | messages.ReorderPinnedSavedDialogs | messages.GetSavedReactionTags | messages.UpdateSavedReactionTag | messages.GetDefaultTagReactions | messages.GetOutboxReadDate | messages.GetQuickReplies | messages.ReorderQuickReplies | messages.CheckQuickReplyShortcut | messages.EditQuickReplyShortcut | messages.DeleteQuickReplyShortcut | messages.GetQuickReplyMessages | messages.SendQuickReplyMessages | messages.DeleteQuickReplyMessages | messages.ToggleDialogFilterTags | messages.GetMyStickers
@@ -17688,7 +17743,7 @@ namespace Api {
| folders.EditPeerFolders
| stats.GetBroadcastStats | stats.LoadAsyncGraph | stats.GetMegagroupStats | stats.GetMessagePublicForwards | stats.GetMessageStats | stats.GetStoryStats | stats.GetStoryPublicForwards | stats.GetBroadcastRevenueStats | stats.GetBroadcastRevenueWithdrawalUrl | stats.GetBroadcastRevenueTransactions
| chatlists.ExportChatlistInvite | chatlists.DeleteExportedInvite | chatlists.EditExportedInvite | chatlists.GetExportedInvites | chatlists.CheckChatlistInvite | chatlists.JoinChatlistInvite | chatlists.GetChatlistUpdates | chatlists.JoinChatlistUpdates | chatlists.HideChatlistUpdates | chatlists.GetLeaveChatlistSuggestions | chatlists.LeaveChatlist
- | stories.CanSendStory | stories.SendStory | stories.EditStory | stories.DeleteStories | stories.TogglePinned | stories.GetAllStories | stories.GetPinnedStories | stories.GetStoriesArchive | stories.GetStoriesByID | stories.ToggleAllStoriesHidden | stories.ReadStories | stories.IncrementStoryViews | stories.GetStoryViewsList | stories.GetStoriesViews | stories.ExportStoryLink | stories.Report | stories.ActivateStealthMode | stories.SendReaction | stories.GetPeerStories | stories.GetAllReadPeerStories | stories.GetPeerMaxIDs | stories.GetChatsToSend | stories.TogglePeerStoriesHidden | stories.GetStoryReactionsList
+ | stories.CanSendStory | stories.SendStory | stories.EditStory | stories.DeleteStories | stories.TogglePinned | stories.GetAllStories | stories.GetPinnedStories | stories.GetStoriesArchive | stories.GetStoriesByID | stories.ToggleAllStoriesHidden | stories.ReadStories | stories.IncrementStoryViews | stories.GetStoryViewsList | stories.GetStoriesViews | stories.ExportStoryLink | stories.Report | stories.ActivateStealthMode | stories.SendReaction | stories.GetPeerStories | stories.GetAllReadPeerStories | stories.GetPeerMaxIDs | stories.GetChatsToSend | stories.TogglePeerStoriesHidden | stories.GetStoryReactionsList | stories.TogglePinnedToTop
| premium.GetBoostsList | premium.GetMyBoosts | premium.ApplyBoost | premium.GetBoostsStatus | premium.GetUserBoosts
| smsjobs.IsEligibleToJoin | smsjobs.Join | smsjobs.Leave | smsjobs.UpdateSettings | smsjobs.GetStatus | smsjobs.GetSmsJob | smsjobs.FinishJob
| fragment.GetCollectibleInfo;
diff --git a/src/lib/gramjs/tl/apiTl.js b/src/lib/gramjs/tl/apiTl.js
index e993ac270..b662ac747 100644
--- a/src/lib/gramjs/tl/apiTl.js
+++ b/src/lib/gramjs/tl/apiTl.js
@@ -80,8 +80,8 @@ chat#41cbf256 flags:# creator:flags.0?true left:flags.2?true deactivated:flags.5
chatForbidden#6592a1a7 id:long title:string = Chat;
channel#aadfc8f flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true has_geo:flags.21?true slowmode_enabled:flags.22?true call_active:flags.23?true call_not_empty:flags.24?true fake:flags.25?true gigagroup:flags.26?true noforwards:flags.27?true join_to_send:flags.28?true join_request:flags.29?true forum:flags.30?true flags2:# stories_hidden:flags2.1?true stories_hidden_min:flags2.2?true stories_unavailable:flags2.3?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int usernames:flags2.0?Vector stories_max_id:flags2.4?int color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int = Chat;
channelForbidden#17d493d5 flags:# broadcast:flags.5?true megagroup:flags.8?true id:long access_hash:long title:string until_date:flags.16?int = Chat;
-chatFull#c9d31138 flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector available_reactions:flags.18?ChatReactions = ChatFull;
-channelFull#44c054a7 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true restricted_sponsored:flags2.11?true can_view_revenue:flags2.12?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper boosts_applied:flags2.8?int boosts_unrestrict:flags2.9?int emojiset:flags2.10?StickerSet = ChatFull;
+chatFull#2633421b flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = ChatFull;
+channelFull#bbab348d flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true restricted_sponsored:flags2.11?true can_view_revenue:flags2.12?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions reactions_limit:flags2.13?int stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper boosts_applied:flags2.8?int boosts_unrestrict:flags2.9?int emojiset:flags2.10?StickerSet = ChatFull;
chatParticipant#c02d4007 user_id:long inviter_id:long date:int = ChatParticipant;
chatParticipantCreator#e46bcee4 user_id:long = ChatParticipant;
chatParticipantAdmin#a0933f5b user_id:long inviter_id:long date:int = ChatParticipant;
@@ -188,7 +188,7 @@ inputReportReasonGeoIrrelevant#dbd4feed = ReportReason;
inputReportReasonFake#f5ddd6e7 = ReportReason;
inputReportReasonIllegalDrugs#a8eb2be = ReportReason;
inputReportReasonPersonalDetails#9ec7863d = ReportReason;
-userFull#cc997720 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme_emoticon:flags.15?string private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights premium_gifts:flags.19?Vector wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int = UserFull;
+userFull#cc997720 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# sponsored_enabled:flags2.7?true id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme_emoticon:flags.15?string private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights premium_gifts:flags.19?Vector wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int = UserFull;
contact#145ade0b user_id:long mutual:Bool = Contact;
importedContact#c13e3c50 user_id:long client_id:long = ImportedContact;
contactStatus#16d9703b user_id:long status:UserStatus = ContactStatus;
@@ -359,6 +359,7 @@ updateBotBusinessConnect#8ae5c97a connection:BotBusinessConnection qts:int = Upd
updateBotNewBusinessMessage#9ddb347c flags:# connection_id:string message:Message reply_to_message:flags.0?Message qts:int = Update;
updateBotEditBusinessMessage#7df587c flags:# connection_id:string message:Message reply_to_message:flags.0?Message qts:int = Update;
updateBotDeleteBusinessMessage#a02a982e connection_id:string peer:Peer messages:Vector qts:int = Update;
+updateNewStoryReaction#1824e40b story_id:int peer:Peer reaction:Reaction = Update;
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
updates.differenceEmpty#5d75a138 date:int seq:int = updates.Difference;
updates.difference#f49ca0 new_messages:Vector new_encrypted_messages:Vector other_updates:Vector chats:Vector users:Vector state:updates.State = updates.Difference;
@@ -927,7 +928,7 @@ inputWallPaperSlug#72091c80 slug:string = InputWallPaper;
inputWallPaperNoFile#967a462e id:long = InputWallPaper;
account.wallPapersNotModified#1c199183 = account.WallPapers;
account.wallPapers#cdc3858c hash:long wallpapers:Vector = account.WallPapers;
-codeSettings#ad253d78 flags:# allow_flashcall:flags.0?true current_number:flags.1?true allow_app_hash:flags.4?true allow_missed_call:flags.5?true allow_firebase:flags.7?true logout_tokens:flags.6?Vector token:flags.8?string app_sandbox:flags.8?Bool = CodeSettings;
+codeSettings#ad253d78 flags:# allow_flashcall:flags.0?true current_number:flags.1?true allow_app_hash:flags.4?true allow_missed_call:flags.5?true allow_firebase:flags.7?true unknown_number:flags.9?true logout_tokens:flags.6?Vector token:flags.8?string app_sandbox:flags.8?Bool = CodeSettings;
wallPaperSettings#372efcd0 flags:# blur:flags.1?true motion:flags.2?true background_color:flags.0?int second_background_color:flags.4?int third_background_color:flags.5?int fourth_background_color:flags.6?int intensity:flags.3?int rotation:flags.4?int emoticon:flags.7?string = WallPaperSettings;
autoDownloadSettings#baa57628 flags:# disabled:flags.0?true video_preload_large:flags.1?true audio_preload_next:flags.2?true phonecalls_less_data:flags.3?true stories_preload:flags.4?true photo_size_max:int video_size_max:long file_size_max:long video_upload_maxbitrate:int small_queue_active_operations_max:int large_queue_active_operations_max:int = AutoDownloadSettings;
account.autoDownloadSettings#63cacf26 low:AutoDownloadSettings medium:AutoDownloadSettings high:AutoDownloadSettings = account.AutoDownloadSettings;
@@ -967,6 +968,7 @@ inputThemeSettings#8fde504f flags:# message_colors_animated:flags.2?true base_th
themeSettings#fa58b6d4 flags:# message_colors_animated:flags.2?true base_theme:BaseTheme accent_color:int outbox_accent_color:flags.3?int message_colors:flags.0?Vector wallpaper:flags.1?WallPaper = ThemeSettings;
webPageAttributeTheme#54b56617 flags:# documents:flags.0?Vector settings:flags.1?ThemeSettings = WebPageAttribute;
webPageAttributeStory#2e94c3e7 flags:# peer:Peer id:int story:flags.0?StoryItem = WebPageAttribute;
+webPageAttributeStickerSet#50cc03d3 flags:# emojis:flags.0?true text_color:flags.1?true stickers:Vector = WebPageAttribute;
messages.votesList#4899484e flags:# count:int votes:Vector chats:Vector users:Vector next_offset:flags.0?string = messages.VotesList;
bankCardOpenUrl#f568028a url:string name:string = BankCardOpenUrl;
payments.bankCardData#3e24e573 title:string open_urls:Vector = payments.BankCardData;
@@ -1041,7 +1043,7 @@ botCommandScopePeerUser#a1321f3 peer:InputPeer user_id:InputUser = BotCommandSco
account.resetPasswordFailedWait#e3779861 retry_date:int = account.ResetPasswordResult;
account.resetPasswordRequestedWait#e9effc7d until_date:int = account.ResetPasswordResult;
account.resetPasswordOk#e926d63e = account.ResetPasswordResult;
-sponsoredMessage#ed5383f7 flags:# recommended:flags.5?true show_peer_photo:flags.6?true can_report:flags.12?true random_id:bytes from_id:flags.3?Peer chat_invite:flags.4?ChatInvite chat_invite_hash:flags.4?string channel_post:flags.2?int start_param:flags.0?string webpage:flags.9?SponsoredWebPage app:flags.10?BotApp message:string entities:flags.1?Vector button_text:flags.11?string sponsor_info:flags.7?string additional_info:flags.8?string = SponsoredMessage;
+sponsoredMessage#bdedf566 flags:# recommended:flags.5?true can_report:flags.12?true random_id:bytes url:string title:string message:string entities:flags.1?Vector photo:flags.6?Photo color:flags.13?PeerColor button_text:string sponsor_info:flags.7?string additional_info:flags.8?string = SponsoredMessage;
messages.sponsoredMessages#c9ee1d87 flags:# posts_between:flags.0?int messages:Vector chats:Vector users:Vector = messages.SponsoredMessages;
messages.sponsoredMessagesEmpty#1839490f = messages.SponsoredMessages;
searchResultsCalendarPeriod#c9b0539f date:int min_msg_id:int max_msg_id:int count:int = SearchResultsCalendarPeriod;
@@ -1165,14 +1167,13 @@ bots.botInfo#e8a775b0 name:string about:string description:string = bots.BotInfo
messagePeerVote#b6cc2d5c peer:Peer option:bytes date:int = MessagePeerVote;
messagePeerVoteInputOption#74cda504 peer:Peer date:int = MessagePeerVote;
messagePeerVoteMultiple#4628f6e6 peer:Peer options:Vector date:int = MessagePeerVote;
-sponsoredWebPage#3db8ec63 flags:# url:string site_name:string photo:flags.0?Photo = SponsoredWebPage;
storyViews#8d595cd6 flags:# has_viewers:flags.1?true views_count:int forwards_count:flags.2?int reactions:flags.3?Vector reactions_count:flags.4?int recent_viewers:flags.0?Vector = StoryViews;
storyItemDeleted#51e6ee4f id:int = StoryItem;
storyItemSkipped#ffadc913 flags:# close_friends:flags.8?true id:int date:int expire_date:int = StoryItem;
storyItem#79b26a24 flags:# pinned:flags.5?true public:flags.7?true close_friends:flags.8?true min:flags.9?true noforwards:flags.10?true edited:flags.11?true contacts:flags.12?true selected_contacts:flags.13?true out:flags.16?true id:int date:int from_id:flags.18?Peer fwd_from:flags.17?StoryFwdHeader expire_date:int caption:flags.0?string entities:flags.1?Vector media:MessageMedia media_areas:flags.14?Vector privacy:flags.2?Vector views:flags.3?StoryViews sent_reaction:flags.15?Reaction = StoryItem;
stories.allStoriesNotModified#1158fe3e flags:# state:string stealth_mode:StoriesStealthMode = stories.AllStories;
stories.allStories#6efc5e81 flags:# has_more:flags.0?true count:int state:string peer_stories:Vector chats:Vector users:Vector stealth_mode:StoriesStealthMode = stories.AllStories;
-stories.stories#5dd8c3c8 count:int stories:Vector chats:Vector users:Vector = stories.Stories;
+stories.stories#63c3dd0a flags:# count:int stories:Vector pinned_to_top:flags.0?Vector chats:Vector users:Vector = stories.Stories;
storyView#b0bdeac5 flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true user_id:long date:int reaction:flags.2?Reaction = StoryView;
storyViewPublicForward#9083670b flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true message:Message = StoryView;
storyViewPublicRepost#bd74cf49 flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true peer_id:Peer story:StoryItem = StoryView;
@@ -1284,6 +1285,9 @@ broadcastRevenueTransactionProceeds#557e2cc4 amount:long from_date:int to_date:i
broadcastRevenueTransactionWithdrawal#5a590978 flags:# pending:flags.0?true failed:flags.2?true amount:long date:int provider:string transaction_date:flags.1?int transaction_url:flags.1?string = BroadcastRevenueTransaction;
broadcastRevenueTransactionRefund#42d30d2e amount:long date:int provider:string = BroadcastRevenueTransaction;
stats.broadcastRevenueTransactions#87158466 count:int transactions:Vector = stats.BroadcastRevenueTransactions;
+reactionNotificationsFromContacts#bac3a61a = ReactionNotificationsFrom;
+reactionNotificationsFromAll#4b9e22a0 = ReactionNotificationsFrom;
+reactionsNotifySettings#56e34970 flags:# messages_notify_from:flags.0?ReactionNotificationsFrom stories_notify_from:flags.1?ReactionNotificationsFrom sound:NotificationSound show_previews:Bool = ReactionsNotifySettings;
---functions---
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
initConnection#c1cd5ea9 {X:Type} flags:# api_id:int device_model:string system_version:string app_version:string system_lang_code:string lang_pack:string lang_code:string proxy:flags.0?InputClientProxy params:flags.1?JSONValue query:!X = X;
@@ -1345,6 +1349,7 @@ account.getRecentEmojiStatuses#f578105 hash:long = account.EmojiStatuses;
account.reorderUsernames#ef500eab order:Vector = Bool;
account.toggleUsername#58d6b376 username:string active:Bool = Bool;
account.resolveBusinessChatLink#5492e5ee slug:string = account.ResolvedBusinessChatLinks;
+account.toggleSponsoredMessages#b9d9a38d enabled:Bool = Bool;
users.getUsers#d91a548 id:Vector = Vector;
users.getFullUser#b60f5918 id:InputUser = users.UserFull;
contacts.getContacts#5dd69e12 hash:long = contacts.Contacts;
@@ -1395,7 +1400,7 @@ messages.uninstallStickerSet#f96e55de stickerset:InputStickerSet = Bool;
messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_param:string = Updates;
messages.getMessagesViews#5784d3e1 peer:InputPeer id:Vector increment:Bool = messages.MessageViews;
messages.migrateChat#a2875319 chat_id:long = Updates;
-messages.searchGlobal#4bc6589a flags:# folder_id:flags.0?int q:string filter:MessagesFilter min_date:int max_date:int offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
+messages.searchGlobal#4bc6589a flags:# broadcasts_only:flags.1?true folder_id:flags.0?int q:string filter:MessagesFilter min_date:int max_date:int offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
messages.getDocumentByHash#b1f2061f sha256:bytes size:long mime_type:string = Document;
messages.getSavedGifs#5cf09635 hash:long = messages.SavedGifs;
messages.saveGif#327a30cb id:InputDocument unsave:Bool = Bool;
@@ -1457,7 +1462,7 @@ messages.saveDefaultSendAs#ccfddf96 peer:InputPeer send_as:InputPeer = Bool;
messages.sendReaction#d30d78d4 flags:# big:flags.1?true add_to_recent:flags.2?true peer:InputPeer msg_id:int reaction:flags.0?Vector = Updates;
messages.getMessagesReactions#8bba90e6 peer:InputPeer id:Vector = Updates;
messages.getMessageReactionsList#461b3f48 flags:# peer:InputPeer id:int reaction:flags.0?Reaction offset:flags.1?string limit:int = messages.MessageReactionsList;
-messages.setChatAvailableReactions#feb16771 peer:InputPeer available_reactions:ChatReactions = Updates;
+messages.setChatAvailableReactions#5a150bd4 flags:# peer:InputPeer available_reactions:ChatReactions reactions_limit:flags.0?int = Updates;
messages.getAvailableReactions#18dea0ac hash:int = messages.AvailableReactions;
messages.setDefaultReaction#4f47a016 reaction:Reaction = Bool;
messages.translateText#63183030 flags:# peer:flags.0?InputPeer id:flags.0?Vector text:flags.1?Vector to_lang:string = messages.TranslatedText;
@@ -1557,7 +1562,8 @@ channels.deleteTopicHistory#34435f2d channel:InputChannel top_msg_id:int = messa
channels.toggleParticipantsHidden#6a6e7854 channel:InputChannel enabled:Bool = Updates;
channels.clickSponsoredMessage#18afbc93 channel:InputChannel random_id:bytes = Bool;
channels.toggleViewForumAsMessages#9738bb15 channel:InputChannel enabled:Bool = Updates;
-channels.getChannelRecommendations#83b70d97 channel:InputChannel = messages.Chats;
+channels.getChannelRecommendations#25a71742 flags:# channel:flags.0?InputChannel = messages.Chats;
+channels.reportSponsoredMessage#af8ff6b9 channel:InputChannel random_id:bytes option:bytes = channels.SponsoredMessageReportResult;
bots.setBotInfo#10cf3123 flags:# bot:flags.2?InputUser lang_code:string name:flags.3?string about:flags.0?string description:flags.1?string = Bool;
bots.canSendMessage#1359f4e6 bot:InputUser = Bool;
bots.allowSendMessage#f132e3ef bot:InputUser = Updates;
diff --git a/src/lib/gramjs/tl/static/api.json b/src/lib/gramjs/tl/static/api.json
index 3d03916b2..c50389935 100644
--- a/src/lib/gramjs/tl/static/api.json
+++ b/src/lib/gramjs/tl/static/api.json
@@ -59,6 +59,7 @@
"account.reorderUsernames",
"account.toggleUsername",
"account.resolveBusinessChatLink",
+ "account.toggleSponsoredMessages",
"users.getUsers",
"users.getFullUser",
"contacts.getContacts",
@@ -221,6 +222,7 @@
"channels.viewSponsoredMessage",
"channels.getSponsoredMessages",
"channels.getChannelRecommendations",
+ "channels.reportSponsoredMessage",
"bots.canSendMessage",
"bots.allowSendMessage",
"bots.invokeWebViewCustomMethod",
diff --git a/src/lib/gramjs/tl/static/api.tl b/src/lib/gramjs/tl/static/api.tl
index e319e0e22..4f5794895 100644
--- a/src/lib/gramjs/tl/static/api.tl
+++ b/src/lib/gramjs/tl/static/api.tl
@@ -100,8 +100,8 @@ chatForbidden#6592a1a7 id:long title:string = Chat;
channel#aadfc8f flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true has_geo:flags.21?true slowmode_enabled:flags.22?true call_active:flags.23?true call_not_empty:flags.24?true fake:flags.25?true gigagroup:flags.26?true noforwards:flags.27?true join_to_send:flags.28?true join_request:flags.29?true forum:flags.30?true flags2:# stories_hidden:flags2.1?true stories_hidden_min:flags2.2?true stories_unavailable:flags2.3?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int usernames:flags2.0?Vector stories_max_id:flags2.4?int color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int = Chat;
channelForbidden#17d493d5 flags:# broadcast:flags.5?true megagroup:flags.8?true id:long access_hash:long title:string until_date:flags.16?int = Chat;
-chatFull#c9d31138 flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector available_reactions:flags.18?ChatReactions = ChatFull;
-channelFull#44c054a7 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true restricted_sponsored:flags2.11?true can_view_revenue:flags2.12?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper boosts_applied:flags2.8?int boosts_unrestrict:flags2.9?int emojiset:flags2.10?StickerSet = ChatFull;
+chatFull#2633421b flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = ChatFull;
+channelFull#bbab348d flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true restricted_sponsored:flags2.11?true can_view_revenue:flags2.12?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions reactions_limit:flags2.13?int stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper boosts_applied:flags2.8?int boosts_unrestrict:flags2.9?int emojiset:flags2.10?StickerSet = ChatFull;
chatParticipant#c02d4007 user_id:long inviter_id:long date:int = ChatParticipant;
chatParticipantCreator#e46bcee4 user_id:long = ChatParticipant;
@@ -228,7 +228,7 @@ inputReportReasonFake#f5ddd6e7 = ReportReason;
inputReportReasonIllegalDrugs#a8eb2be = ReportReason;
inputReportReasonPersonalDetails#9ec7863d = ReportReason;
-userFull#cc997720 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme_emoticon:flags.15?string private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights premium_gifts:flags.19?Vector wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int = UserFull;
+userFull#cc997720 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# sponsored_enabled:flags2.7?true id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme_emoticon:flags.15?string private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights premium_gifts:flags.19?Vector wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int = UserFull;
contact#145ade0b user_id:long mutual:Bool = Contact;
@@ -412,6 +412,7 @@ updateBotBusinessConnect#8ae5c97a connection:BotBusinessConnection qts:int = Upd
updateBotNewBusinessMessage#9ddb347c flags:# connection_id:string message:Message reply_to_message:flags.0?Message qts:int = Update;
updateBotEditBusinessMessage#7df587c flags:# connection_id:string message:Message reply_to_message:flags.0?Message qts:int = Update;
updateBotDeleteBusinessMessage#a02a982e connection_id:string peer:Peer messages:Vector qts:int = Update;
+updateNewStoryReaction#1824e40b story_id:int peer:Peer reaction:Reaction = Update;
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
@@ -1171,7 +1172,7 @@ inputWallPaperNoFile#967a462e id:long = InputWallPaper;
account.wallPapersNotModified#1c199183 = account.WallPapers;
account.wallPapers#cdc3858c hash:long wallpapers:Vector = account.WallPapers;
-codeSettings#ad253d78 flags:# allow_flashcall:flags.0?true current_number:flags.1?true allow_app_hash:flags.4?true allow_missed_call:flags.5?true allow_firebase:flags.7?true logout_tokens:flags.6?Vector token:flags.8?string app_sandbox:flags.8?Bool = CodeSettings;
+codeSettings#ad253d78 flags:# allow_flashcall:flags.0?true current_number:flags.1?true allow_app_hash:flags.4?true allow_missed_call:flags.5?true allow_firebase:flags.7?true unknown_number:flags.9?true logout_tokens:flags.6?Vector token:flags.8?string app_sandbox:flags.8?Bool = CodeSettings;
wallPaperSettings#372efcd0 flags:# blur:flags.1?true motion:flags.2?true background_color:flags.0?int second_background_color:flags.4?int third_background_color:flags.5?int fourth_background_color:flags.6?int intensity:flags.3?int rotation:flags.4?int emoticon:flags.7?string = WallPaperSettings;
@@ -1236,6 +1237,7 @@ themeSettings#fa58b6d4 flags:# message_colors_animated:flags.2?true base_theme:B
webPageAttributeTheme#54b56617 flags:# documents:flags.0?Vector settings:flags.1?ThemeSettings = WebPageAttribute;
webPageAttributeStory#2e94c3e7 flags:# peer:Peer id:int story:flags.0?StoryItem = WebPageAttribute;
+webPageAttributeStickerSet#50cc03d3 flags:# emojis:flags.0?true text_color:flags.1?true stickers:Vector = WebPageAttribute;
messages.votesList#4899484e flags:# count:int votes:Vector chats:Vector users:Vector next_offset:flags.0?string = messages.VotesList;
@@ -1361,7 +1363,7 @@ account.resetPasswordFailedWait#e3779861 retry_date:int = account.ResetPasswordR
account.resetPasswordRequestedWait#e9effc7d until_date:int = account.ResetPasswordResult;
account.resetPasswordOk#e926d63e = account.ResetPasswordResult;
-sponsoredMessage#ed5383f7 flags:# recommended:flags.5?true show_peer_photo:flags.6?true can_report:flags.12?true random_id:bytes from_id:flags.3?Peer chat_invite:flags.4?ChatInvite chat_invite_hash:flags.4?string channel_post:flags.2?int start_param:flags.0?string webpage:flags.9?SponsoredWebPage app:flags.10?BotApp message:string entities:flags.1?Vector button_text:flags.11?string sponsor_info:flags.7?string additional_info:flags.8?string = SponsoredMessage;
+sponsoredMessage#bdedf566 flags:# recommended:flags.5?true can_report:flags.12?true random_id:bytes url:string title:string message:string entities:flags.1?Vector photo:flags.6?Photo color:flags.13?PeerColor button_text:string sponsor_info:flags.7?string additional_info:flags.8?string = SponsoredMessage;
messages.sponsoredMessages#c9ee1d87 flags:# posts_between:flags.0?int messages:Vector chats:Vector users:Vector = messages.SponsoredMessages;
messages.sponsoredMessagesEmpty#1839490f = messages.SponsoredMessages;
@@ -1565,8 +1567,6 @@ messagePeerVote#b6cc2d5c peer:Peer option:bytes date:int = MessagePeerVote;
messagePeerVoteInputOption#74cda504 peer:Peer date:int = MessagePeerVote;
messagePeerVoteMultiple#4628f6e6 peer:Peer options:Vector date:int = MessagePeerVote;
-sponsoredWebPage#3db8ec63 flags:# url:string site_name:string photo:flags.0?Photo = SponsoredWebPage;
-
storyViews#8d595cd6 flags:# has_viewers:flags.1?true views_count:int forwards_count:flags.2?int reactions:flags.3?Vector reactions_count:flags.4?int recent_viewers:flags.0?Vector = StoryViews;
storyItemDeleted#51e6ee4f id:int = StoryItem;
@@ -1576,7 +1576,7 @@ storyItem#79b26a24 flags:# pinned:flags.5?true public:flags.7?true close_friends
stories.allStoriesNotModified#1158fe3e flags:# state:string stealth_mode:StoriesStealthMode = stories.AllStories;
stories.allStories#6efc5e81 flags:# has_more:flags.0?true count:int state:string peer_stories:Vector chats:Vector users:Vector stealth_mode:StoriesStealthMode = stories.AllStories;
-stories.stories#5dd8c3c8 count:int stories:Vector chats:Vector users:Vector = stories.Stories;
+stories.stories#63c3dd0a flags:# count:int stories:Vector pinned_to_top:flags.0?Vector chats:Vector users:Vector = stories.Stories;
storyView#b0bdeac5 flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true user_id:long date:int reaction:flags.2?Reaction = StoryView;
storyViewPublicForward#9083670b flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true message:Message = StoryView;
@@ -1770,6 +1770,11 @@ broadcastRevenueTransactionRefund#42d30d2e amount:long date:int provider:string
stats.broadcastRevenueTransactions#87158466 count:int transactions:Vector = stats.BroadcastRevenueTransactions;
+reactionNotificationsFromContacts#bac3a61a = ReactionNotificationsFrom;
+reactionNotificationsFromAll#4b9e22a0 = ReactionNotificationsFrom;
+
+reactionsNotifySettings#56e34970 flags:# messages_notify_from:flags.0?ReactionNotificationsFrom stories_notify_from:flags.1?ReactionNotificationsFrom sound:NotificationSound show_previews:Bool = ReactionsNotifySettings;
+
---functions---
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
@@ -1913,6 +1918,9 @@ account.deleteBusinessChatLink#60073674 slug:string = Bool;
account.getBusinessChatLinks#6f70dde1 = account.BusinessChatLinks;
account.resolveBusinessChatLink#5492e5ee slug:string = account.ResolvedBusinessChatLinks;
account.updatePersonalChannel#d94305e0 channel:InputChannel = Bool;
+account.toggleSponsoredMessages#b9d9a38d enabled:Bool = Bool;
+account.getReactionsNotifySettings#6dd654c = ReactionsNotifySettings;
+account.setReactionsNotifySettings#316ce548 settings:ReactionsNotifySettings = ReactionsNotifySettings;
users.getUsers#d91a548 id:Vector = Vector;
users.getFullUser#b60f5918 id:InputUser = users.UserFull;
@@ -1993,7 +2001,7 @@ messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_par
messages.getMessagesViews#5784d3e1 peer:InputPeer id:Vector increment:Bool = messages.MessageViews;
messages.editChatAdmin#a85bd1c2 chat_id:long user_id:InputUser is_admin:Bool = Bool;
messages.migrateChat#a2875319 chat_id:long = Updates;
-messages.searchGlobal#4bc6589a flags:# folder_id:flags.0?int q:string filter:MessagesFilter min_date:int max_date:int offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
+messages.searchGlobal#4bc6589a flags:# broadcasts_only:flags.1?true folder_id:flags.0?int q:string filter:MessagesFilter min_date:int max_date:int offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
messages.reorderStickerSets#78337739 flags:# masks:flags.0?true emojis:flags.1?true order:Vector = Bool;
messages.getDocumentByHash#b1f2061f sha256:bytes size:long mime_type:string = Document;
messages.getSavedGifs#5cf09635 hash:long = messages.SavedGifs;
@@ -2097,7 +2105,7 @@ messages.saveDefaultSendAs#ccfddf96 peer:InputPeer send_as:InputPeer = Bool;
messages.sendReaction#d30d78d4 flags:# big:flags.1?true add_to_recent:flags.2?true peer:InputPeer msg_id:int reaction:flags.0?Vector = Updates;
messages.getMessagesReactions#8bba90e6 peer:InputPeer id:Vector = Updates;
messages.getMessageReactionsList#461b3f48 flags:# peer:InputPeer id:int reaction:flags.0?Reaction offset:flags.1?string limit:int = messages.MessageReactionsList;
-messages.setChatAvailableReactions#feb16771 peer:InputPeer available_reactions:ChatReactions = Updates;
+messages.setChatAvailableReactions#5a150bd4 flags:# peer:InputPeer available_reactions:ChatReactions reactions_limit:flags.0?int = Updates;
messages.getAvailableReactions#18dea0ac hash:int = messages.AvailableReactions;
messages.setDefaultReaction#4f47a016 reaction:Reaction = Bool;
messages.translateText#63183030 flags:# peer:flags.0?InputPeer id:flags.0?Vector text:flags.1?Vector to_lang:string = messages.TranslatedText;
@@ -2258,7 +2266,7 @@ channels.toggleParticipantsHidden#6a6e7854 channel:InputChannel enabled:Bool = U
channels.clickSponsoredMessage#18afbc93 channel:InputChannel random_id:bytes = Bool;
channels.updateColor#d8aa3671 flags:# for_profile:flags.1?true channel:InputChannel color:flags.2?int background_emoji_id:flags.0?long = Updates;
channels.toggleViewForumAsMessages#9738bb15 channel:InputChannel enabled:Bool = Updates;
-channels.getChannelRecommendations#83b70d97 channel:InputChannel = messages.Chats;
+channels.getChannelRecommendations#25a71742 flags:# channel:flags.0?InputChannel = messages.Chats;
channels.updateEmojiStatus#f0d3e6a8 channel:InputChannel emoji_status:EmojiStatus = Updates;
channels.setBoostsToUnblockRestrictions#ad399cee channel:InputChannel boosts:int = Updates;
channels.setEmojiStickers#3cd930b7 channel:InputChannel stickerset:InputStickerSet = Bool;
@@ -2398,6 +2406,7 @@ stories.getPeerMaxIDs#535983c3 id:Vector = Vector;
stories.getChatsToSend#a56a8b60 = messages.Chats;
stories.togglePeerStoriesHidden#bd0415c4 peer:InputPeer hidden:Bool = Bool;
stories.getStoryReactionsList#b9b2881f flags:# forwards_first:flags.2?true peer:InputPeer id:int reaction:flags.0?Reaction offset:flags.1?string limit:int = stories.StoryReactionsList;
+stories.togglePinnedToTop#b297e9b peer:InputPeer id:Vector = Bool;
premium.getBoostsList#60f67660 flags:# gifts:flags.0?true peer:InputPeer offset:string limit:int = premium.BoostsList;
premium.getMyBoosts#be77b4a = premium.MyBoosts;
diff --git a/src/styles/icons.scss b/src/styles/icons.scss
index f8f866e89..e809895bf 100644
--- a/src/styles/icons.scss
+++ b/src/styles/icons.scss
@@ -158,110 +158,112 @@ $icons-map: (
"my-notes": "\f17f",
"new-chat-filled": "\f180",
"next": "\f181",
- "noise-suppression": "\f182",
- "non-contacts": "\f183",
- "one-filled": "\f184",
- "open-in-new-tab": "\f185",
- "password-off": "\f186",
- "pause": "\f187",
- "permissions": "\f188",
- "phone-discard-outline": "\f189",
- "phone-discard": "\f18a",
- "phone": "\f18b",
- "photo": "\f18c",
- "pin-badge": "\f18d",
- "pin-list": "\f18e",
- "pin": "\f18f",
- "pinned-chat": "\f190",
- "pinned-message": "\f191",
- "pip": "\f192",
- "play-story": "\f193",
- "play": "\f194",
- "poll": "\f195",
- "premium": "\f196",
- "previous": "\f197",
- "privacy-policy": "\f198",
- "quote-text": "\f199",
- "quote": "\f19a",
- "readchats": "\f19b",
- "recent": "\f19c",
- "reload": "\f19d",
- "remove": "\f19e",
- "reopen-topic": "\f19f",
- "replace": "\f1a0",
- "replies": "\f1a1",
- "reply-filled": "\f1a2",
- "reply": "\f1a3",
- "revote": "\f1a4",
- "save-story": "\f1a5",
- "saved-messages": "\f1a6",
- "schedule": "\f1a7",
- "search": "\f1a8",
- "select": "\f1a9",
- "send-outline": "\f1aa",
- "send": "\f1ab",
- "settings-filled": "\f1ac",
- "settings": "\f1ad",
- "share-filled": "\f1ae",
- "share-screen-outlined": "\f1af",
- "share-screen-stop": "\f1b0",
- "share-screen": "\f1b1",
- "sidebar": "\f1b2",
- "skip-next": "\f1b3",
- "skip-previous": "\f1b4",
- "smallscreen": "\f1b5",
- "smile": "\f1b6",
- "sort": "\f1b7",
- "speaker-muted-story": "\f1b8",
- "speaker-outline": "\f1b9",
- "speaker-story": "\f1ba",
- "speaker": "\f1bb",
- "spoiler-disable": "\f1bc",
- "spoiler": "\f1bd",
- "sport": "\f1be",
- "stats": "\f1bf",
- "stealth-future": "\f1c0",
- "stealth-past": "\f1c1",
- "stickers": "\f1c2",
- "stop-raising-hand": "\f1c3",
- "stop": "\f1c4",
- "story-caption": "\f1c5",
- "story-expired": "\f1c6",
- "story-priority": "\f1c7",
- "story-reply": "\f1c8",
- "strikethrough": "\f1c9",
- "tag-add": "\f1ca",
- "tag-crossed": "\f1cb",
- "tag-filter": "\f1cc",
- "tag-name": "\f1cd",
- "tag": "\f1ce",
- "timer": "\f1cf",
- "transcribe": "\f1d0",
- "truck": "\f1d1",
- "unarchive": "\f1d2",
- "underlined": "\f1d3",
- "unlock-badge": "\f1d4",
- "unlock": "\f1d5",
- "unmute": "\f1d6",
- "unpin": "\f1d7",
- "unread": "\f1d8",
- "up": "\f1d9",
- "user-filled": "\f1da",
- "user-online": "\f1db",
- "user": "\f1dc",
- "video-outlined": "\f1dd",
- "video-stop": "\f1de",
- "video": "\f1df",
- "view-once": "\f1e0",
- "voice-chat": "\f1e1",
- "volume-1": "\f1e2",
- "volume-2": "\f1e3",
- "volume-3": "\f1e4",
- "web": "\f1e5",
- "webapp": "\f1e6",
- "word-wrap": "\f1e7",
- "zoom-in": "\f1e8",
- "zoom-out": "\f1e9",
+ "nochannel": "\f182",
+ "noise-suppression": "\f183",
+ "non-contacts": "\f184",
+ "one-filled": "\f185",
+ "open-in-new-tab": "\f186",
+ "password-off": "\f187",
+ "pause": "\f188",
+ "permissions": "\f189",
+ "phone-discard-outline": "\f18a",
+ "phone-discard": "\f18b",
+ "phone": "\f18c",
+ "photo": "\f18d",
+ "pin-badge": "\f18e",
+ "pin-list": "\f18f",
+ "pin": "\f190",
+ "pinned-chat": "\f191",
+ "pinned-message": "\f192",
+ "pip": "\f193",
+ "play-story": "\f194",
+ "play": "\f195",
+ "poll": "\f196",
+ "premium": "\f197",
+ "previous": "\f198",
+ "privacy-policy": "\f199",
+ "quote-text": "\f19a",
+ "quote": "\f19b",
+ "readchats": "\f19c",
+ "recent": "\f19d",
+ "reload": "\f19e",
+ "remove": "\f19f",
+ "reopen-topic": "\f1a0",
+ "replace": "\f1a1",
+ "replies": "\f1a2",
+ "reply-filled": "\f1a3",
+ "reply": "\f1a4",
+ "revenue-split": "\f1a5",
+ "revote": "\f1a6",
+ "save-story": "\f1a7",
+ "saved-messages": "\f1a8",
+ "schedule": "\f1a9",
+ "search": "\f1aa",
+ "select": "\f1ab",
+ "send-outline": "\f1ac",
+ "send": "\f1ad",
+ "settings-filled": "\f1ae",
+ "settings": "\f1af",
+ "share-filled": "\f1b0",
+ "share-screen-outlined": "\f1b1",
+ "share-screen-stop": "\f1b2",
+ "share-screen": "\f1b3",
+ "sidebar": "\f1b4",
+ "skip-next": "\f1b5",
+ "skip-previous": "\f1b6",
+ "smallscreen": "\f1b7",
+ "smile": "\f1b8",
+ "sort": "\f1b9",
+ "speaker-muted-story": "\f1ba",
+ "speaker-outline": "\f1bb",
+ "speaker-story": "\f1bc",
+ "speaker": "\f1bd",
+ "spoiler-disable": "\f1be",
+ "spoiler": "\f1bf",
+ "sport": "\f1c0",
+ "stats": "\f1c1",
+ "stealth-future": "\f1c2",
+ "stealth-past": "\f1c3",
+ "stickers": "\f1c4",
+ "stop-raising-hand": "\f1c5",
+ "stop": "\f1c6",
+ "story-caption": "\f1c7",
+ "story-expired": "\f1c8",
+ "story-priority": "\f1c9",
+ "story-reply": "\f1ca",
+ "strikethrough": "\f1cb",
+ "tag-add": "\f1cc",
+ "tag-crossed": "\f1cd",
+ "tag-filter": "\f1ce",
+ "tag-name": "\f1cf",
+ "tag": "\f1d0",
+ "timer": "\f1d1",
+ "transcribe": "\f1d2",
+ "truck": "\f1d3",
+ "unarchive": "\f1d4",
+ "underlined": "\f1d5",
+ "unlock-badge": "\f1d6",
+ "unlock": "\f1d7",
+ "unmute": "\f1d8",
+ "unpin": "\f1d9",
+ "unread": "\f1da",
+ "up": "\f1db",
+ "user-filled": "\f1dc",
+ "user-online": "\f1dd",
+ "user": "\f1de",
+ "video-outlined": "\f1df",
+ "video-stop": "\f1e0",
+ "video": "\f1e1",
+ "view-once": "\f1e2",
+ "voice-chat": "\f1e3",
+ "volume-1": "\f1e4",
+ "volume-2": "\f1e5",
+ "volume-3": "\f1e6",
+ "web": "\f1e7",
+ "webapp": "\f1e8",
+ "word-wrap": "\f1e9",
+ "zoom-in": "\f1ea",
+ "zoom-out": "\f1eb",
);
.icon-active-sessions::before {
@@ -651,6 +653,9 @@ $icons-map: (
.icon-next::before {
content: map.get($icons-map, "next");
}
+.icon-nochannel::before {
+ content: map.get($icons-map, "nochannel");
+}
.icon-noise-suppression::before {
content: map.get($icons-map, "noise-suppression");
}
@@ -753,6 +758,9 @@ $icons-map: (
.icon-reply::before {
content: map.get($icons-map, "reply");
}
+.icon-revenue-split::before {
+ content: map.get($icons-map, "revenue-split");
+}
.icon-revote::before {
content: map.get($icons-map, "revote");
}
diff --git a/src/styles/icons.woff b/src/styles/icons.woff
index c334a07b9..f944e4d08 100644
Binary files a/src/styles/icons.woff and b/src/styles/icons.woff differ
diff --git a/src/styles/icons.woff2 b/src/styles/icons.woff2
index 70eded375..1a74a357a 100644
Binary files a/src/styles/icons.woff2 and b/src/styles/icons.woff2 differ
diff --git a/src/types/icons/font.ts b/src/types/icons/font.ts
index 57739f1ea..8f49ccf13 100644
--- a/src/types/icons/font.ts
+++ b/src/types/icons/font.ts
@@ -128,6 +128,7 @@ export type FontIconName =
| 'my-notes'
| 'new-chat-filled'
| 'next'
+ | 'nochannel'
| 'noise-suppression'
| 'non-contacts'
| 'one-filled'
@@ -162,6 +163,7 @@ export type FontIconName =
| 'replies'
| 'reply-filled'
| 'reply'
+ | 'revenue-split'
| 'revote'
| 'save-story'
| 'saved-messages'