Gifts: Support selling in profile

This commit is contained in:
zubiden 2025-05-14 19:02:27 +03:00 committed by Alexander Zinchuk
parent 5c2e5dfcb4
commit 92cdf9feb5
65 changed files with 1669 additions and 365 deletions

View File

@ -95,6 +95,9 @@ export interface GramJsAppConfig extends LimitsConfig {
freeze_since_date?: number; freeze_since_date?: number;
freeze_until_date?: number; freeze_until_date?: number;
freeze_appeal_url?: string; freeze_appeal_url?: string;
stars_stargift_resale_amount_max?: number;
stars_stargift_resale_amount_min?: number;
stars_stargift_resale_commission_permille?: number;
} }
function buildEmojiSounds(appConfig: GramJsAppConfig) { function buildEmojiSounds(appConfig: GramJsAppConfig) {
@ -191,5 +194,8 @@ export function buildAppConfig(json: GramJs.TypeJSONValue, hash: number): ApiApp
freezeSinceDate: appConfig.freeze_since_date, freezeSinceDate: appConfig.freeze_since_date,
freezeUntilDate: appConfig.freeze_until_date, freezeUntilDate: appConfig.freeze_until_date,
freezeAppealUrl: appConfig.freeze_appeal_url, freezeAppealUrl: appConfig.freeze_appeal_url,
starsStargiftResaleAmountMin: appConfig.stars_stargift_resale_amount_min,
starsStargiftResaleAmountMax: appConfig.stars_stargift_resale_amount_max,
starsStargiftResaleCommissionPermille: appConfig.stars_stargift_resale_commission_permille,
}; };
} }

View File

@ -102,7 +102,8 @@ export function buildApiGroupCall(groupCall: GramJs.TypeGroupCall): ApiGroupCall
} }
export function getGroupCallId(groupCall: GramJs.TypeInputGroupCall) { export function getGroupCallId(groupCall: GramJs.TypeInputGroupCall) {
return groupCall.id.toString(); if (groupCall instanceof GramJs.InputGroupCall) return groupCall.id.toString();
return undefined;
} }
export function buildPhoneCall(call: GramJs.TypePhoneCall): ApiPhoneCall { export function buildPhoneCall(call: GramJs.TypePhoneCall): ApiPhoneCall {

View File

@ -18,7 +18,7 @@ export function buildApiStarGift(starGift: GramJs.TypeStarGift): ApiStarGift {
if (starGift instanceof GramJs.StarGiftUnique) { if (starGift instanceof GramJs.StarGiftUnique) {
const { const {
id, num, ownerId, ownerName, title, attributes, availabilityIssued, availabilityTotal, slug, ownerAddress, id, num, ownerId, ownerName, title, attributes, availabilityIssued, availabilityTotal, slug, ownerAddress,
giftAddress, giftAddress, resellStars,
} = starGift; } = starGift;
return { return {
@ -34,12 +34,13 @@ export function buildApiStarGift(starGift: GramJs.TypeStarGift): ApiStarGift {
issuedCount: availabilityIssued, issuedCount: availabilityIssued,
slug, slug,
giftAddress, giftAddress,
resellPriceInStars: resellStars?.toJSNumber(),
}; };
} }
const { const {
id, limited, stars, availabilityRemains, availabilityTotal, convertStars, firstSaleDate, lastSaleDate, soldOut, id, limited, stars, availabilityRemains, availabilityTotal, convertStars, firstSaleDate, lastSaleDate, soldOut,
birthday, upgradeStars, birthday, upgradeStars, resellMinStars, title,
} = starGift; } = starGift;
addDocumentToLocalDb(starGift.sticker); addDocumentToLocalDb(starGift.sticker);
@ -60,6 +61,8 @@ export function buildApiStarGift(starGift: GramJs.TypeStarGift): ApiStarGift {
isSoldOut: soldOut, isSoldOut: soldOut,
isBirthday: birthday, isBirthday: birthday,
upgradeStars: upgradeStars?.toJSNumber(), upgradeStars: upgradeStars?.toJSNumber(),
title,
resellMinStars: resellMinStars?.toJSNumber(),
}; };
} }
@ -132,7 +135,7 @@ export function buildApiStarGiftAttribute(attribute: GramJs.TypeStarGiftAttribut
export function buildApiSavedStarGift(userStarGift: GramJs.SavedStarGift, peerId: string): ApiSavedStarGift { export function buildApiSavedStarGift(userStarGift: GramJs.SavedStarGift, peerId: string): ApiSavedStarGift {
const { const {
gift, date, convertStars, fromId, message, msgId, nameHidden, unsaved, upgradeStars, transferStars, canUpgrade, gift, date, convertStars, fromId, message, msgId, nameHidden, unsaved, upgradeStars, transferStars, canUpgrade,
savedId, canExportAt, pinnedToTop, savedId, canExportAt, pinnedToTop, canResellAt, canTransferAt,
} = userStarGift; } = userStarGift;
const inputGift: ApiInputSavedStarGift | undefined = savedId && peerId const inputGift: ApiInputSavedStarGift | undefined = savedId && peerId
@ -154,6 +157,8 @@ export function buildApiSavedStarGift(userStarGift: GramJs.SavedStarGift, peerId
inputGift, inputGift,
savedId: savedId?.toString(), savedId: savedId?.toString(),
canExportAt, canExportAt,
canResellAt,
canTransferAt,
isPinned: pinnedToTop, isPinned: pinnedToTop,
}; };
} }

View File

@ -187,6 +187,9 @@ export function buildApiMessageAction(action: GramJs.TypeMessageAction): ApiMess
} }
if (action instanceof GramJs.MessageActionGroupCall) { if (action instanceof GramJs.MessageActionGroupCall) {
const { call, duration } = action; const { call, duration } = action;
if (!(call instanceof GramJs.InputGroupCall)) {
return UNSUPPORTED_ACTION;
}
return { return {
mediaType: 'action', mediaType: 'action',
type: 'groupCall', type: 'groupCall',
@ -199,6 +202,9 @@ export function buildApiMessageAction(action: GramJs.TypeMessageAction): ApiMess
} }
if (action instanceof GramJs.MessageActionInviteToGroupCall) { if (action instanceof GramJs.MessageActionInviteToGroupCall) {
const { call, users } = action; const { call, users } = action;
if (!(call instanceof GramJs.InputGroupCall)) {
return UNSUPPORTED_ACTION;
}
return { return {
mediaType: 'action', mediaType: 'action',
type: 'inviteToGroupCall', type: 'inviteToGroupCall',
@ -211,6 +217,9 @@ export function buildApiMessageAction(action: GramJs.TypeMessageAction): ApiMess
} }
if (action instanceof GramJs.MessageActionGroupCallScheduled) { if (action instanceof GramJs.MessageActionGroupCallScheduled) {
const { call, scheduleDate } = action; const { call, scheduleDate } = action;
if (!(call instanceof GramJs.InputGroupCall)) {
return UNSUPPORTED_ACTION;
}
return { return {
mediaType: 'action', mediaType: 'action',
type: 'groupCallScheduled', type: 'groupCallScheduled',
@ -393,6 +402,7 @@ export function buildApiMessageAction(action: GramJs.TypeMessageAction): ApiMess
if (action instanceof GramJs.MessageActionStarGiftUnique) { if (action instanceof GramJs.MessageActionStarGiftUnique) {
const { const {
upgrade, transferred, saved, refunded, gift, canExportAt, transferStars, fromId, peer, savedId, upgrade, transferred, saved, refunded, gift, canExportAt, transferStars, fromId, peer, savedId,
resaleStars,
} = action; } = action;
const starGift = buildApiStarGift(gift); const starGift = buildApiStarGift(gift);
@ -411,6 +421,7 @@ export function buildApiMessageAction(action: GramJs.TypeMessageAction): ApiMess
fromId: fromId && getApiChatIdFromMtpPeer(fromId), fromId: fromId && getApiChatIdFromMtpPeer(fromId),
peerId: peer && getApiChatIdFromMtpPeer(peer), peerId: peer && getApiChatIdFromMtpPeer(peer),
savedId: savedId && buildApiPeerId(savedId, 'user'), savedId: savedId && buildApiPeerId(savedId, 'user'),
resaleStars: resaleStars?.toJSNumber(),
}; };
} }
if (action instanceof GramJs.MessageActionPaidMessagesPrice) { if (action instanceof GramJs.MessageActionPaidMessagesPrice) {

View File

@ -536,6 +536,7 @@ export function buildApiStarsTransaction(transaction: GramJs.StarsTransaction):
const { const {
date, id, peer, stars, description, photo, title, refund, extendedMedia, failed, msgId, pending, gift, reaction, date, id, peer, stars, description, photo, title, refund, extendedMedia, failed, msgId, pending, gift, reaction,
subscriptionPeriod, stargift, giveawayPostId, starrefCommissionPermille, stargiftUpgrade, paidMessages, subscriptionPeriod, stargift, giveawayPostId, starrefCommissionPermille, stargiftUpgrade, paidMessages,
stargiftResale,
} = transaction; } = transaction;
if (photo) { if (photo) {
@ -567,6 +568,7 @@ export function buildApiStarsTransaction(transaction: GramJs.StarsTransaction):
giveawayPostId, giveawayPostId,
starRefCommision, starRefCommision,
isGiftUpgrade: stargiftUpgrade, isGiftUpgrade: stargiftUpgrade,
isGiftResale: stargiftResale,
paidMessages, paidMessages,
}; };
} }

View File

@ -687,6 +687,16 @@ export function buildInputInvoice(invoice: ApiRequestInputInvoice) {
}); });
} }
case 'stargiftResale': {
const {
peer, slug,
} = invoice;
return new GramJs.InputInvoiceStarGiftResale({
toId: buildInputPeer(peer.id, peer.accessHash),
slug,
});
}
case 'stargift': { case 'stargift': {
const { const {
peer, shouldHideName, giftId, message, shouldUpgrade, peer, shouldHideName, giftId, message, shouldUpgrade,

View File

@ -543,6 +543,8 @@ async function getFullChatInfo(chatId: string): Promise<FullChatData | undefined
const userStatusesById = buildApiUserStatuses(result.users); const userStatusesById = buildApiUserStatuses(result.users);
const chats = result.chats.map((chat) => buildApiChatFromPreview(chat)).filter(Boolean); const chats = result.chats.map((chat) => buildApiChatFromPreview(chat)).filter(Boolean);
const groupCall = call instanceof GramJs.InputGroupCall ? call : undefined;
return { return {
fullInfo: { fullInfo: {
...(chatPhoto instanceof GramJs.Photo && { profilePhoto: buildApiPhoto(chatPhoto) }), ...(chatPhoto instanceof GramJs.Photo && { profilePhoto: buildApiPhoto(chatPhoto) }),
@ -552,7 +554,7 @@ async function getFullChatInfo(chatId: string): Promise<FullChatData | undefined
canViewMembers: true, canViewMembers: true,
botCommands, botCommands,
inviteLink, inviteLink,
groupCallId: call?.id.toString(), groupCallId: groupCall?.id.toString(),
enabledReactions: buildApiChatReactions(availableReactions), enabledReactions: buildApiChatReactions(availableReactions),
reactionsLimit, reactionsLimit,
requestsPending, requestsPending,
@ -563,11 +565,11 @@ async function getFullChatInfo(chatId: string): Promise<FullChatData | undefined
}, },
chats, chats,
userStatusesById, userStatusesById,
groupCall: call ? { groupCall: groupCall ? {
chatId, chatId,
isLoaded: false, isLoaded: false,
id: call.id.toString(), id: groupCall.id.toString(),
accessHash: call.accessHash.toString(), accessHash: groupCall.accessHash.toString(),
connectionState: 'disconnected', connectionState: 'disconnected',
participantsCount: 0, participantsCount: 0,
version: 0, version: 0,
@ -678,6 +680,8 @@ async function getFullChannelInfo(
...adminStatusesById, ...adminStatusesById,
}; };
const groupCall = call instanceof GramJs.InputGroupCall ? call : undefined;
return { return {
fullInfo: { fullInfo: {
...(chatPhoto instanceof GramJs.Photo && { profilePhoto: buildApiPhoto(chatPhoto) }), ...(chatPhoto instanceof GramJs.Photo && { profilePhoto: buildApiPhoto(chatPhoto) }),
@ -700,7 +704,7 @@ async function getFullChannelInfo(
members, members,
kickedMembers, kickedMembers,
adminMembersById: adminMembers ? buildCollectionByKey(adminMembers, 'userId') : undefined, adminMembersById: adminMembers ? buildCollectionByKey(adminMembers, 'userId') : undefined,
groupCallId: call ? String(call.id) : undefined, groupCallId: groupCall ? String(groupCall.id) : undefined,
linkedChatId: linkedChatId ? buildApiPeerId(linkedChatId, 'channel') : undefined, linkedChatId: linkedChatId ? buildApiPeerId(linkedChatId, 'channel') : undefined,
botCommands, botCommands,
enabledReactions: buildApiChatReactions(availableReactions), enabledReactions: buildApiChatReactions(availableReactions),
@ -725,11 +729,11 @@ async function getFullChannelInfo(
}, },
chats, chats,
userStatusesById: statusesById, userStatusesById: statusesById,
groupCall: call ? { groupCall: groupCall ? {
chatId: id, chatId: id,
isLoaded: false, isLoaded: false,
id: call.id.toString(), id: groupCall.id.toString(),
accessHash: call?.accessHash.toString(), accessHash: groupCall?.accessHash.toString(),
participants: {}, participants: {},
version: 0, version: 0,
participantsCount: 0, participantsCount: 0,

View File

@ -331,6 +331,21 @@ export function toggleSavedGiftPinned({
}); });
} }
export function updateStarGiftPrice({
inputSavedGift,
price,
}: {
inputSavedGift: ApiRequestInputSavedStarGift;
price: number;
}) {
return invokeRequest(new GramJs.payments.UpdateStarGiftPrice({
stargift: buildInputSavedStarGift(inputSavedGift),
resellStars: bigInt(price),
}), {
shouldReturnTrue: true,
});
}
export async function fetchStarGiftWithdrawalUrl({ export async function fetchStarGiftWithdrawalUrl({
inputGift, inputGift,
password, password,

View File

@ -241,13 +241,14 @@ export function updater(update: Update) {
}); });
} }
} else if (action instanceof GramJs.MessageActionGroupCall) { } else if (action instanceof GramJs.MessageActionGroupCall) {
if (!action.duration && action.call) { const groupCall = action.call instanceof GramJs.InputGroupCall ? action.call : undefined;
if (!action.duration && groupCall) {
sendApiUpdate({ sendApiUpdate({
'@type': 'updateGroupCallChatId', '@type': 'updateGroupCallChatId',
chatId: message.chatId, chatId: message.chatId,
call: { call: {
id: action.call.id.toString(), id: groupCall.id.toString(),
accessHash: action.call.accessHash.toString(), accessHash: groupCall.accessHash.toString(),
}, },
}); });
} }
@ -905,11 +906,14 @@ export function updater(update: Update) {
presentation: Boolean(update.presentation), presentation: Boolean(update.presentation),
}); });
} else if (update instanceof GramJs.UpdateGroupCallParticipants) { } else if (update instanceof GramJs.UpdateGroupCallParticipants) {
sendApiUpdate({ const groupCallId = getGroupCallId(update.call);
'@type': 'updateGroupCallParticipants', if (groupCallId) {
groupCallId: getGroupCallId(update.call), sendApiUpdate({
participants: update.participants.map(buildApiGroupCallParticipant), '@type': 'updateGroupCallParticipants',
}); groupCallId,
participants: update.participants.map(buildApiGroupCallParticipant),
});
}
} else if (update instanceof GramJs.UpdatePendingJoinRequests) { } else if (update instanceof GramJs.UpdatePendingJoinRequests) {
sendApiUpdate({ sendApiUpdate({
'@type': 'updatePendingJoinRequests', '@type': 'updatePendingJoinRequests',

View File

@ -254,6 +254,7 @@ export interface ApiMessageActionStarGiftUnique extends ActionMediaType {
fromId?: string; fromId?: string;
peerId?: string; peerId?: string;
savedId?: string; savedId?: string;
resaleStars?: number;
} }
export interface ApiMessageActionChannelJoined extends ActionMediaType { export interface ApiMessageActionChannelJoined extends ActionMediaType {

View File

@ -246,6 +246,9 @@ export interface ApiAppConfig {
freezeSinceDate?: number; freezeSinceDate?: number;
freezeUntilDate?: number; freezeUntilDate?: number;
freezeAppealUrl?: string; freezeAppealUrl?: string;
starsStargiftResaleAmountMin?: number;
starsStargiftResaleAmountMax?: number;
starsStargiftResaleCommissionPermille?: number;
} }
export interface ApiConfig { export interface ApiConfig {

View File

@ -360,6 +360,12 @@ export type ApiInputInvoiceStarGift = {
shouldUpgrade?: true; shouldUpgrade?: true;
}; };
export type ApiInputInvoiceStarGiftResale = {
type: 'stargiftResale';
slug: string;
peerId: string;
};
export type ApiInputInvoiceStarsGiveaway = { export type ApiInputInvoiceStarsGiveaway = {
type: 'starsgiveaway'; type: 'starsgiveaway';
chatId: string; chatId: string;
@ -395,7 +401,7 @@ export type ApiInputInvoiceStarGiftTransfer = {
export type ApiInputInvoice = ApiInputInvoiceMessage | ApiInputInvoiceSlug | ApiInputInvoiceGiveaway export type ApiInputInvoice = ApiInputInvoiceMessage | ApiInputInvoiceSlug | ApiInputInvoiceGiveaway
| ApiInputInvoiceGiftCode | ApiInputInvoicePremiumGiftStars | ApiInputInvoiceStars | ApiInputInvoiceStarsGift | ApiInputInvoiceGiftCode | ApiInputInvoicePremiumGiftStars | ApiInputInvoiceStars | ApiInputInvoiceStarsGift
| ApiInputInvoiceStarsGiveaway | ApiInputInvoiceStarGift | ApiInputInvoiceChatInviteSubscription | ApiInputInvoiceStarsGiveaway | ApiInputInvoiceStarGift | ApiInputInvoiceChatInviteSubscription
| ApiInputInvoiceStarGiftUpgrade | ApiInputInvoiceStarGiftTransfer; | ApiInputInvoiceStarGiftUpgrade | ApiInputInvoiceStarGiftTransfer | ApiInputInvoiceStarGiftResale;
/* Used for Invoice request */ /* Used for Invoice request */
export type ApiRequestInputInvoiceMessage = { export type ApiRequestInputInvoiceMessage = {
@ -441,6 +447,12 @@ export type ApiRequestInputInvoiceStarGift = {
shouldUpgrade?: true; shouldUpgrade?: true;
}; };
export type ApiRequestInputInvoiceStarGiftResale = {
type: 'stargiftResale';
slug: string;
peer: ApiPeer;
};
export type ApiRequestInputInvoiceChatInviteSubscription = { export type ApiRequestInputInvoiceChatInviteSubscription = {
type: 'chatInviteSubscription'; type: 'chatInviteSubscription';
hash: string; hash: string;
@ -461,4 +473,5 @@ export type ApiRequestInputInvoiceStarGiftTransfer = {
export type ApiRequestInputInvoice = ApiRequestInputInvoiceMessage | ApiRequestInputInvoiceSlug export type ApiRequestInputInvoice = ApiRequestInputInvoiceMessage | ApiRequestInputInvoiceSlug
| ApiRequestInputInvoiceGiveaway | ApiRequestInputInvoiceStars | ApiRequestInputInvoiceStarsGiveaway | ApiRequestInputInvoiceGiveaway | ApiRequestInputInvoiceStars | ApiRequestInputInvoiceStarsGiveaway
| ApiRequestInputInvoiceChatInviteSubscription | ApiRequestInputInvoiceStarGift | ApiRequestInputInvoiceStarGiftUpgrade | ApiRequestInputInvoiceChatInviteSubscription | ApiRequestInputInvoiceStarGift | ApiRequestInputInvoiceStarGiftUpgrade
| ApiRequestInputInvoiceStarGiftTransfer | ApiRequestInputInvoicePremiumGiftStars; | ApiRequestInputInvoiceStarGiftTransfer | ApiRequestInputInvoicePremiumGiftStars
| ApiRequestInputInvoiceStarGiftResale;

View File

@ -16,6 +16,8 @@ export interface ApiStarGiftRegular {
lastSaleDate?: number; lastSaleDate?: number;
isBirthday?: true; isBirthday?: true;
upgradeStars?: number; upgradeStars?: number;
resellMinStars?: number;
title?: string;
} }
export interface ApiStarGiftUnique { export interface ApiStarGiftUnique {
@ -31,6 +33,7 @@ export interface ApiStarGiftUnique {
attributes: ApiStarGiftAttribute[]; attributes: ApiStarGiftAttribute[];
slug: string; slug: string;
giftAddress?: string; giftAddress?: string;
resellPriceInStars?: number;
} }
export type ApiStarGift = ApiStarGiftRegular | ApiStarGiftUnique; export type ApiStarGift = ApiStarGiftRegular | ApiStarGiftUnique;
@ -85,6 +88,8 @@ export interface ApiSavedStarGift {
alreadyPaidUpgradeStars?: number; alreadyPaidUpgradeStars?: number;
transferStars?: number; transferStars?: number;
canExportAt?: number; canExportAt?: number;
canTransferAt?: number;
canResellAt?: number;
isPinned?: boolean; isPinned?: boolean;
isConverted?: boolean; // Local field, used for Action Message isConverted?: boolean; // Local field, used for Action Message
upgradeMsgId?: number; // Local field, used for Action Message upgradeMsgId?: number; // Local field, used for Action Message
@ -180,6 +185,7 @@ export interface ApiStarsTransaction {
subscriptionPeriod?: number; subscriptionPeriod?: number;
starRefCommision?: number; starRefCommision?: number;
isGiftUpgrade?: true; isGiftUpgrade?: true;
isGiftResale?: true;
paidMessages?: number; paidMessages?: number;
} }

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="M27.3 12.375h.3c1.2 0 2.1-.9 2.1-2.1s-.9-2.1-2.1-2.1-2.1.9-2.1 2.1c0 .5.1.9.4 1.2h-4.5l-4.4-4.4c.3-.2.5-.4.6-.7.2-.3.2-.6.2-1q0-.9-.6-1.5t-1.5-.6-1.5.6-.6 1.5c0 .3.1.7.2 1 .2.3.4.5.6.7l-1.6 1.9-5.7-5.6c-.5-.5-1.3-.5-1.8 0s-.5 1.3 0 1.8l20.9 20.9c.5.5 1.3.5 1.8 0s.5-1.3 0-1.8l-2.3-2.3c.1-.2.2-.4.2-.7zm-12.4-1.2 1-1 4.7 4.8h3.5l-.7 4.7zM8.5 20.675l-.9-5.8h1.7c.7 0 1-.8.5-1.3l-2-2.1h-2c.3-.5.5-1.1.3-1.8-.2-.6-.7-1.2-1.5-1.4-1.4-.4-2.6.7-2.6 2 0 1.2.9 2.1 2.1 2.1h.3l1.4 8.9c.2 1.3 1.3 2.2 2.6 2.2h9.5c.7 0 1-.8.5-1.3l-1.5-1.5zM24.2 25.575H7.6c-.8 0-1.4.6-1.4 1.4s.6 1.4 1.4 1.4h16.6c.8 0 1.4-.6 1.4-1.4s-.6-1.4-1.4-1.4"/></svg>

After

Width:  |  Height:  |  Size: 724 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="M24.2 25.2H7.6c-.8 0-1.4.6-1.4 1.4S6.8 28 7.6 28h16.6c.8 0 1.4-.6 1.4-1.4s-.6-1.4-1.4-1.4M27.7 7.8c-1.2 0-2.1.9-2.1 2.1 0 .5.1.9.4 1.2h-4.5l-4.4-4.4c.3-.2.5-.4.6-.7.2-.3.2-.6.2-1q0-.9-.6-1.5c-.4-.3-.8-.5-1.4-.5q-.9 0-1.5.6t-.6 1.5c0 .3.1.7.2 1 .2.3.4.5.6.7l-4.3 4.4H5.8c.2-.3.4-.8.4-1.2 0-1.2-.9-2.1-2.1-2.1S2 8.8 2 9.9 2.9 12 4.1 12h.3l1.4 8.9c.2 1.3 1.3 2.2 2.6 2.2h15c1.3 0 2.4-.9 2.6-2.2l1.3-8.9h.3c1.2 0 2.1-.9 2.1-2.1s-.9-2.1-2-2.1m-4.5 12.5H8.5l-.9-5.8h3.5l4.7-4.8 4.7 4.8H24z"/></svg>

After

Width:  |  Height:  |  Size: 588 B

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M4.913 4.3c-.176.088-.36.239-.489.403-.328.416-.345.767-.056 1.18.087.123 5.013 5.075 10.948 11.003 7.525 7.517 10.853 10.807 10.999 10.873.449.203 1.016-.053 1.352-.612.219-.364.223-.58.017-.933-.097-.167-.881-.989-2.101-2.208l-1.945-1.94.541-.421c1.383-1.075 2.717-2.535 3.748-4.099.467-.707.607-1.112.607-1.747-.001-.752-.172-1.219-.708-1.945-1.745-2.359-4.068-4.26-6.479-5.304-1.772-.768-3.364-1.093-5.347-1.096-1.903-.003-3.553.325-5.211 1.036l-.507.219-2.168-2.165c-2.564-2.56-2.565-2.56-3.201-2.243zm12.234 5.408c2.828.313 5.405 1.641 7.567 3.897.757.789 1.568 1.827 1.612 2.06.043.223-.079.456-.611 1.188-.883 1.215-2.033 2.407-3.091 3.2l-.569.427-1.515-1.512.211-.383a5.246 5.246 0 0 0 .649-2.559c.003-.693-.052-1.047-.264-1.707-.551-1.708-1.869-2.977-3.669-3.528-.451-.137-.541-.147-1.467-.147-.921 0-1.019.009-1.467.145-.264.08-.712.261-.995.403l-.516.259-.521-.524c-.288-.288-.512-.535-.499-.548.013-.012.288-.105.611-.207a12.92 12.92 0 0 1 2.16-.461c.572-.064 1.812-.067 2.373-.004zM6.901 10.916c-.944.796-2.3 2.291-2.944 3.245a3.726 3.726 0 0 0-.36.747c-.128.383-.14.481-.119.985.031.692.14.98.667 1.764 3.153 4.692 7.885 7.252 12.72 6.884 1.207-.091 2.701-.405 3.481-.731l.204-.087-1.751-1.745-.293.079c-.804.212-1.245.259-2.48.261-1.309.001-1.6-.031-2.616-.292-2.713-.695-5.163-2.473-7.125-5.173-.532-.732-.653-.965-.611-1.188.073-.391 1.664-2.221 2.631-3.028.257-.215.504-.423.547-.461.068-.06-.029-.179-.692-.843-.425-.425-.787-.773-.804-.773-.019 0-.223.16-.455.356zm9.766 1.964c1.212.255 2.2 1.251 2.46 2.48a3.405 3.405 0 0 1-.088 1.621l-.115.369-4.26-4.257.175-.072c.513-.213 1.221-.268 1.828-.141zm-5.783 1.375c-.305.805-.376 2.015-.169 2.919a5.446 5.446 0 0 0 4.112 4.112c.904.207 2.113.136 2.919-.169.14-.053.131-.065-.788-.985-.86-.861-.944-.931-1.121-.931-.303 0-.985-.195-1.347-.384-.487-.255-1.091-.877-1.335-1.376-.191-.391-.352-.984-.353-1.307-.001-.137-.141-.301-.932-1.091-.92-.919-.932-.928-.985-.788z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="M2.765 2.19c-.208.103-.52.206-.623.412-.415.513-.415.924-.104 1.438.104.103 6.02 5.96 13.08 13.051 9.03 8.94 12.975 12.846 13.183 12.846.52.205 1.246-.103 1.66-.72.312-.41.312-.72 0-1.13-.103-.206-1.037-1.13-2.49-2.57l-2.284-2.26.623-.514c1.66-1.233 3.218-2.98 4.463-4.83.52-.822.727-1.336.727-2.055 0-.925-.208-1.439-.83-2.26-2.077-2.775-4.88-5.036-7.786-6.27-2.076-.924-4.048-1.335-6.436-1.335-2.284 0-4.256.41-6.228 1.233l-.52.103-2.594-2.467C3.49 1.78 3.49 1.78 2.765 2.19M17.4 8.562q5.138.615 9.032 4.624c.934.925 1.868 2.158 1.972 2.467 0 .308-.104.513-.727 1.438-1.038 1.439-2.387 2.877-3.737 3.802l-.726.514-1.765-1.747.207-.41c.52-.926.83-1.953.727-2.98 0-.823-.104-1.234-.311-2.056-.623-2.056-2.284-3.494-4.36-4.213-.52-.206-.623-.206-1.765-.206s-1.246 0-1.765.206c-.311.102-.83.308-1.142.513l-.622.103-.623-.617-.623-.616s.311-.103.727-.206c.83-.205 1.66-.41 2.595-.513.727-.206 2.18-.206 2.906-.103M5.152 10c-1.142.924-2.803 2.671-3.53 3.802-.207.308-.31.616-.414.925C1 15.138 1 15.24 1 15.858c0 .822.208 1.13.83 2.055 3.737 5.55 9.447 8.632 15.26 8.119 1.453-.103 3.218-.514 4.152-.823l.208-.102-2.076-2.056-.312.103c-.934.206-1.453.308-3.01.308s-1.869 0-3.114-.308c-3.218-.822-6.229-2.98-8.512-6.166-.623-.822-.83-1.13-.727-1.438.104-.514 1.972-2.672 3.114-3.597a5 5 0 0 0 .623-.514c.104-.103 0-.205-.83-1.027-.52-.412-.935-.823-.935-.823s-.311.206-.519.412m11.627 2.363c1.453.308 2.595 1.439 2.906 2.98.104.617.104 1.336-.104 1.953l-.104.41-5.086-5.035.208-.102a3.16 3.16 0 0 1 2.18-.206m-6.955 1.541c-.312 1.028-.416 2.467-.104 3.495.519 2.466 2.491 4.316 4.879 4.83 1.038.205 2.491.205 3.529-.206.208-.103.208-.103-.934-1.13-1.038-1.028-1.142-1.131-1.35-1.131-.311 0-1.142-.206-1.66-.411-.623-.308-1.35-1.028-1.558-1.644-.207-.514-.415-1.13-.415-1.542 0-.205-.207-.308-1.142-1.336-1.142-1.027-1.142-1.027-1.245-.925"/></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M15.093 7.467c-4.001.269-7.715 2.347-10.539 5.897-.605.761-.799 1.073-.959 1.548-.127.379-.139.479-.117.981.031.692.14.98.667 1.764 3.153 4.692 7.885 7.252 12.72 6.884 3.104-.236 5.764-1.428 8.275-3.709 1.348-1.224 2.987-3.331 3.275-4.207.213-.651.148-1.485-.165-2.109-.296-.591-1.261-1.777-2.22-2.729-3.103-3.083-6.92-4.591-10.936-4.32zm2.827 2.346c2.488.436 4.833 1.745 6.793 3.792.757.789 1.568 1.827 1.612 2.06.043.223-.079.456-.611 1.188-2.193 3.017-4.92 4.831-8.115 5.396-.539.095-2.661.095-3.2 0-3.195-.565-5.921-2.379-8.115-5.396-.532-.732-.653-.965-.611-1.188.044-.233.855-1.271 1.612-2.06 2.187-2.284 4.781-3.608 7.673-3.919.573-.061 2.311.013 2.96.127zm-2.88.862c-.455.075-1.283.377-1.72.628a5.616 5.616 0 0 0-2.143 2.263c-1.8 3.611.799 7.829 4.823 7.829 1.675 0 3.171-.719 4.224-2.029 1.821-2.268 1.484-5.635-.752-7.505-.715-.597-1.691-1.051-2.565-1.191-.413-.065-1.455-.063-1.867.005zm1.543 2.184c.931.155 1.86.868 2.287 1.755.433.899.433 1.872.001 2.773-.283.589-.895 1.215-1.452 1.484a3.26 3.26 0 0 1-2.837 0c-.557-.269-1.169-.895-1.452-1.484-.604-1.259-.364-2.645.625-3.629.791-.784 1.727-1.083 2.828-.899z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="M16.35 21.8c1.6 0 3-.6 4.2-1.7 1.2-1.2 1.7-2.6 1.7-4.2s-.6-3-1.7-4.2-2.5-1.7-4.2-1.7-3 .6-4.2 1.7-1.7 2.5-1.7 4.2.6 3 1.7 4.2 2.6 1.7 4.2 1.7m0-2.4c-1 0-1.8-.3-2.5-1s-1-1.5-1-2.5.3-1.8 1-2.5 1.5-1 2.5-1 1.8.3 2.5 1 1 1.5 1 2.5-.3 1.8-1 2.5c-.6.7-1.5 1-2.5 1m0 6.4c-3.2 0-6.1-.9-8.8-2.7-2.4-1.6-4.2-3.8-5.4-6.4q-.3-.75 0-1.5c1.2-2.7 3-4.8 5.4-6.4 2.7-1.9 5.6-2.8 8.8-2.8s6.1.9 8.8 2.7c2.4 1.6 4.2 3.8 5.4 6.4q.3.75 0 1.5c-1.2 2.7-3 4.8-5.4 6.4-2.7 1.9-5.6 2.8-8.8 2.8m0-2.7c2.5 0 4.8-.7 6.8-2 1.7-1.1 3.1-2.5 4.2-4.3.4-.6.4-1.4 0-2-1.1-1.7-2.5-3.2-4.2-4.3-2.1-1.3-4.4-2-6.8-2s-4.8.7-6.8 2c-1.8 1.2-3.2 2.6-4.2 4.4-.4.6-.4 1.4 0 2 1.1 1.7 2.5 3.2 4.2 4.3 2.1 1.3 4.3 1.9 6.8 1.9"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 781 B

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M18.196 6.821a4.935 4.935 0 0 1 6.979 6.979l-3.08 3.081a4.935 4.935 0 0 1-6.979 0 1.6 1.6 0 1 0-2.263 2.263 8.134 8.134 0 0 0 11.504 0l3.08-3.08c3.177-3.177 3.177-8.327 0-11.504s-8.328-3.177-11.504 0l-1.54 1.54a1.6 1.6 0 1 0 2.263 2.263l1.54-1.54zm-4.392 18.358A4.935 4.935 0 0 1 6.825 18.2l3.081-3.081a4.935 4.935 0 0 1 6.979 0 1.6 1.6 0 1 0 2.263-2.263 8.134 8.134 0 0 0-11.504 0l-3.08 3.081c-3.177 3.177-3.177 8.327 0 11.504s8.327 3.177 11.504 0l1.54-1.54a1.6 1.6 0 1 0-2.263-2.263l-1.54 1.54z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="M12.954 10.3c1.992 0 3.984.8 5.577 2.3.498.5.498 1.4 0 1.9s-1.394.5-1.892 0c-.996-1-2.29-1.5-3.685-1.5-1.394 0-2.689.5-3.684 1.5l-3.087 3.1c-1.992 2-1.992 5.3 0 7.3s5.278 2.1 7.27.1l1.593-1.6c.498-.5 1.394-.5 1.892 0 .298.3.398.6.398 1s-.1.7-.398 1l-1.494 1.5a7.85 7.85 0 0 1-11.154 0C2.796 25.4 2 23.4 2 21.3s.797-4.1 2.29-5.6l3.088-3.1c1.593-1.5 3.585-2.3 5.576-2.3M21.221 2c2.091 0 3.983.8 5.477 2.3 3.087 3.1 3.087 8.1-.1 11.1l-3.186 3.2c-3.087 3-8.067 2.9-11.055-.1-.497-.5-.497-1.4 0-1.9.3-.3.698-.4.997-.4.398 0 .697.1.996.4.995 1 2.29 1.5 3.684 1.5s2.689-.5 3.685-1.5l3.087-3.1c1.991-2 1.991-5.3 0-7.3-.996-.9-2.29-1.5-3.685-1.5-1.294 0-2.59.5-3.585 1.5l-1.494 1.5c-.498.5-1.394.5-1.892 0s-.498-1.4 0-1.9l1.495-1.5A7.82 7.82 0 0 1 21.22 2"/></svg>

Before

Width:  |  Height:  |  Size: 577 B

After

Width:  |  Height:  |  Size: 851 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="M14.925 29c-.3 0-.6-.1-1-.2q-.45-.15-.9-.6l-9.3-9.3c-.3-.3-.4-.5-.6-.9s-.1-.6-.1-.9.1-.6.2-1q.15-.45.6-.9l11.4-11.4c.2-.2.5-.4.8-.6.3-.1.7-.2 1-.2h9.3c.7 0 1.3.3 1.8.8s.8 1.1.8 1.8v9.3c0 .3-.1.7-.2 1s-.3.6-.6.8l-11.4 11.5q-.45.45-.9.6c-.3.1-.6.2-.9.2m0-2.6 11.5-11.5V5.6h-9.3l-11.5 11.5zm8.2-15.6c.5 0 1-.2 1.4-.6.3-.4.5-.8.5-1.4s-.2-1-.6-1.4-.8-.6-1.4-.6c-.5 0-1 .2-1.4.6s-.6.8-.6 1.4.2 1 .6 1.4c.5.4.9.6 1.5.6"/></svg>

After

Width:  |  Height:  |  Size: 516 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="M14.925 29c-.3 0-.6-.1-1-.2s-.6-.3-.9-.6l-9.3-9.3c-.3-.3-.4-.5-.6-.9s-.1-.6-.1-.9.1-.6.2-1 .3-.6.6-.9l11.4-11.4c.2-.2.5-.4.8-.6.3-.1.7-.2 1-.2h9.3c.7 0 1.3.3 1.8.8s.8 1.1.8 1.8v9.3c0 .3-.1.7-.2 1s-.3.6-.6.8l-11.4 11.5q-.45.45-.9.6c-.3.1-.6.2-.9.2m8.2-18.2c.5 0 1-.2 1.4-.6.3-.4.5-.8.5-1.4s-.2-1-.6-1.4-.8-.6-1.4-.6c-.5 0-1 .2-1.4.6s-.6.8-.6 1.4.2 1 .6 1.4c.5.4.9.6 1.5.6"/></svg>

After

Width:  |  Height:  |  Size: 475 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="m29 23.875-3.8-3.8 3-3c.2-.2.4-.5.6-.8s.2-.6.2-1v-9.3c0-.7-.3-1.3-.8-1.8s-1.1-.8-1.8-.8H17c-.3 0-.7.1-1 .2s-.6.3-.8.6l-3 2.9-3.7-3.7c-.5-.5-1.4-.5-1.9 0s-.5 1.4 0 1.9l20.4 20.4c.6.5 1.4.5 2 .1.5-.5.5-1.4 0-1.9m-11.9-17.9h9.3v9.3l-3 3-9.3-9.3zM18.7 22.875l-3.9 3.9-9.3-9.3 3.9-3.9c.6-.5.6-1.3.1-1.8s-1.3-.5-1.8 0l-3.9 3.9c-.3.3-.4.6-.6.9-.1.3-.2.6-.2 1 0 .3.1.6.2 1q.15.45.6.9l9.3 9.3q.45.45.9.6c.3.1.6.2 1 .2s.6-.1 1-.2q.45-.15.9-.6l3.9-3.9c.5-.5.5-1.3 0-1.8-.7-.7-1.5-.7-2.1-.2"/><path fill="#000" d="M24.5 10.575c.3-.4.5-.8.5-1.4 0-.5-.2-1-.6-1.4s-.8-.6-1.4-.6-1 .2-1.4.6-.6.8-.6 1.4c0 .5.2 1 .6 1.4s.8.6 1.4.6q.9 0 1.5-.6"/></svg>

After

Width:  |  Height:  |  Size: 729 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="M3.8 15.675c-.3.3-.4.6-.6.9-.1.3-.2.6-.2 1 0 .3.1.6.2 1q.15.45.6.9l9.3 9.3q.45.45.9.6c.3.1.6.2 1 .2.3 0 .6-.1 1-.2q.45-.15.9-.6l5.7-5.7-13.1-13.1zM29.1 23.875l-3.7-3.7 2.9-2.9c.2-.2.4-.5.6-.8.1-.3.2-.6.2-1v-9.4c0-.7-.3-1.3-.8-1.8s-1.1-.8-1.8-.8h-9.4c-.3 0-.7.1-1 .2s-.6.3-.8.6l-2.9 2.9-3.8-3.8c-.5-.5-1.4-.5-1.9 0-.6.5-.6 1.4 0 1.9l20.4 20.5c.5.5 1.4.5 1.9 0 .6-.6.6-1.4.1-1.9m-7.3-16c.4-.4.8-.6 1.4-.6.5 0 1 .2 1.4.6s.5.9.5 1.4-.2 1-.6 1.4-.8.6-1.4.6c-.5 0-1-.2-1.4-.6s-.6-.8-.6-1.4c.1-.5.3-1 .7-1.4"/></svg>

After

Width:  |  Height:  |  Size: 605 B

View File

@ -1485,6 +1485,7 @@
"GiftInfoWear" = "Wear"; "GiftInfoWear" = "Wear";
"GiftInfoTakeOff" = "Take Off"; "GiftInfoTakeOff" = "Take Off";
"GiftInfoTransfer" = "Transfer"; "GiftInfoTransfer" = "Transfer";
"GiftInfoUnlist" = "Unlist";
"GiftTransferTitle" = "Transfer"; "GiftTransferTitle" = "Transfer";
"GiftTransferTON" = "Send via Blockchain"; "GiftTransferTON" = "Send via Blockchain";
"GiftTransferTONBlocked" = "unlocks in {time}"; "GiftTransferTONBlocked" = "unlocks in {time}";
@ -1953,5 +1954,25 @@
"ApiMessageActionPaidMessagesRefundedIncoming" = "{user} refunded **{stars}** to you"; "ApiMessageActionPaidMessagesRefundedIncoming" = "{user} refunded **{stars}** to you";
"NotificationTitleNotSupportedInFrozenAccount" = "Your account is frozen"; "NotificationTitleNotSupportedInFrozenAccount" = "Your account is frozen";
"NotificationMessageNotSupportedInFrozenAccount" = "This action is not available"; "NotificationMessageNotSupportedInFrozenAccount" = "This action is not available";
"NotificationGiftIsSale" = "{gift} is now for sale!";
"NotificationGiftIsUnlist" = "{gift} is removed from sale.";
"GiftRibbonSale" = "sale";
"ButtonBuyGift" = "Buy for {stars}";
"GiftInfoBuyGift" = "{user} is selling this gift and you can buy it.";
"StarsGiftBought"= "You bought gift!";
"ButtonSellGift" = "Sell for {stars}";
"GiftSellTitle" = "Sell Gift";
"Sell" = "Sell";
"InputPlaceholderGiftResalePrice" = "Enter Price";
"DescriptionComposerGiftResalePrice" = "You will receive **{stars}**.";
"DescriptionComposerGiftMinimumPrice" = "Minimum price is **{stars}**.";
"ApiMessageMessageActionResaleStarGiftUniqueOutgoing" = "You paid {stars} for {gift}";
"ApiMessageMessageActionResaleStarGiftUniqueIncoming" = "You received {stars} from selling {gift}";
"ModalStarsBalanceBarDescription" = "Your balance is **{stars}**";
"NotificationGiftCanResellAt" = "You will be able to resell this gift on {date}.";
"NotificationGiftCanTransferAt" = "You can transfer this gift after {date}.";
"StarGiftSaleTransaction" = "Gift Purchase";
"StarGiftPurchaseTransaction" = "Gift Sale";
"GiftBuyConfirmDescription" = "Do you want to buy **{gift}** for **{stars}**?";
"ComposerTitleForwardFrom" = "From: **{users}**"; "ComposerTitleForwardFrom" = "From: **{users}**";
"ContextMenuItemMention" = "Mention"; "ContextMenuItemMention" = "Mention";

View File

@ -8,6 +8,7 @@ export { default as PaidReactionModal } from '../components/modals/paidReaction/
export { default as GiftModal } from '../components/modals/gift/GiftModal'; export { default as GiftModal } from '../components/modals/gift/GiftModal';
export { default as GiftRecipientPicker } from '../components/modals/gift/recipient/GiftRecipientPicker'; export { default as GiftRecipientPicker } from '../components/modals/gift/recipient/GiftRecipientPicker';
export { default as GiftInfoModal } from '../components/modals/gift/info/GiftInfoModal'; export { default as GiftInfoModal } from '../components/modals/gift/info/GiftInfoModal';
export { default as GiftResalePriceComposerModal } from '../components/modals/gift/resale/GiftResalePriceComposerModal';
export { default as GiftUpgradeModal } from '../components/modals/gift/upgrade/GiftUpgradeModal'; export { default as GiftUpgradeModal } from '../components/modals/gift/upgrade/GiftUpgradeModal';
export { default as GiftStatusInfoModal } from '../components/modals/gift/status/GiftStatusInfoModal'; export { default as GiftStatusInfoModal } from '../components/modals/gift/status/GiftStatusInfoModal';
export { default as GiftWithdrawModal } from '../components/modals/gift/withdraw/GiftWithdrawModal'; export { default as GiftWithdrawModal } from '../components/modals/gift/withdraw/GiftWithdrawModal';

View File

@ -7,9 +7,12 @@ import type {
import { DEFAULT_STATUS_ICON_ID, TME_LINK_PREFIX } from '../../../config'; import { DEFAULT_STATUS_ICON_ID, TME_LINK_PREFIX } from '../../../config';
import { copyTextToClipboard } from '../../../util/clipboard'; import { copyTextToClipboard } from '../../../util/clipboard';
import { formatDateAtTime } from '../../../util/dates/dateFormat';
import { getServerTime } from '../../../util/serverTime';
import useLang from '../../../hooks/useLang'; import useLang from '../../../hooks/useLang';
import useLastCallback from '../../../hooks/useLastCallback'; import useLastCallback from '../../../hooks/useLastCallback';
import useOldLang from '../../../hooks/useOldLang';
import MenuItem from '../../ui/MenuItem'; import MenuItem from '../../ui/MenuItem';
@ -32,13 +35,17 @@ const GiftMenuItems = ({
showNotification, showNotification,
openChatWithDraft, openChatWithDraft,
openGiftTransferModal, openGiftTransferModal,
openGiftResalePriceComposerModal,
openGiftStatusInfoModal, openGiftStatusInfoModal,
setEmojiStatus, setEmojiStatus,
toggleSavedGiftPinned, toggleSavedGiftPinned,
changeGiftVisibility, changeGiftVisibility,
updateStarGiftPrice,
closeGiftInfoModal,
} = getActions(); } = getActions();
const lang = useLang(); const lang = useLang();
const oldLang = useOldLang();
const isSavedGift = typeGift && 'gift' in typeGift; const isSavedGift = typeGift && 'gift' in typeGift;
const savedGift = isSavedGift ? typeGift : undefined; const savedGift = isSavedGift ? typeGift : undefined;
@ -62,6 +69,7 @@ const GiftMenuItems = ({
const isGiftUnique = gift && gift.type === 'starGiftUnique'; const isGiftUnique = gift && gift.type === 'starGiftUnique';
const canTakeOff = isGiftUnique && currenUniqueEmojiStatusSlug === gift.slug; const canTakeOff = isGiftUnique && currenUniqueEmojiStatusSlug === gift.slug;
const canWear = userCollectibleStatus && !canTakeOff; const canWear = userCollectibleStatus && !canTakeOff;
const giftResalePrice = isGiftUnique ? gift.resellPriceInStars : undefined;
const hasPinOptions = canManage && savedGift && !savedGift.isUnsaved && isGiftUnique; const hasPinOptions = canManage && savedGift && !savedGift.isUnsaved && isGiftUnique;
@ -84,10 +92,48 @@ const GiftMenuItems = ({
}); });
const handleTransfer = useLastCallback(() => { const handleTransfer = useLastCallback(() => {
if (savedGift?.gift.type !== 'starGiftUnique') return; if (!savedGift || savedGift?.gift.type !== 'starGiftUnique') return;
if (savedGift.canTransferAt && savedGift.canTransferAt > getServerTime()) {
showNotification({
message: {
key: 'NotificationGiftCanTransferAt',
variables: { date: formatDateAtTime(oldLang, savedGift.canTransferAt * 1000) },
},
});
return;
}
openGiftTransferModal({ gift: savedGift }); openGiftTransferModal({ gift: savedGift });
}); });
const handleSell = useLastCallback(() => {
if (!savedGift) return;
if (savedGift.canResellAt && savedGift.canResellAt > getServerTime()) {
showNotification({
message: {
key: 'NotificationGiftCanResellAt',
variables: { date: formatDateAtTime(oldLang, savedGift.canResellAt * 1000) },
},
});
return;
}
openGiftResalePriceComposerModal({ peerId, gift: savedGift });
});
const handleUnsell = useLastCallback(() => {
if (!savedGift || savedGift.gift.type !== 'starGiftUnique' || !savedGift.inputGift) return;
closeGiftInfoModal();
updateStarGiftPrice({ gift: savedGift.inputGift, price: 0 });
showNotification({
icon: 'unlist-outline',
message: {
key: 'NotificationGiftIsUnlist',
variables: { gift: lang('GiftUnique', { title: savedGift.gift.title, number: savedGift.gift.number }) },
},
});
});
const handleWear = useLastCallback(() => { const handleWear = useLastCallback(() => {
if (gift?.type !== 'starGiftUnique' || !userCollectibleStatus) return; if (gift?.type !== 'starGiftUnique' || !userCollectibleStatus) return;
openGiftStatusInfoModal({ emojiStatus: userCollectibleStatus }); openGiftStatusInfoModal({ emojiStatus: userCollectibleStatus });
@ -123,18 +169,28 @@ const GiftMenuItems = ({
{lang('GiftInfoTransfer')} {lang('GiftInfoTransfer')}
</MenuItem> </MenuItem>
)} )}
{canManage && isGiftUnique && !giftResalePrice && (
<MenuItem icon="sell-outline" onClick={handleSell}>
{lang('Sell')}
</MenuItem>
)}
{canManage && isGiftUnique && giftResalePrice && (
<MenuItem icon="unlist-outline" onClick={handleUnsell}>
{lang('GiftInfoUnlist')}
</MenuItem>
)}
{canManage && savedGift && ( {canManage && savedGift && (
<MenuItem icon={savedGift.isUnsaved ? 'eye-outline' : 'eye-crossed-outline'} onClick={handleTriggerVisibility}> <MenuItem icon={savedGift.isUnsaved ? 'eye-outline' : 'eye-crossed-outline'} onClick={handleTriggerVisibility}>
{lang(savedGift.isUnsaved ? 'GiftActionShow' : 'GiftActionHide')} {lang(savedGift.isUnsaved ? 'GiftActionShow' : 'GiftActionHide')}
</MenuItem> </MenuItem>
)} )}
{canWear && ( {canWear && (
<MenuItem icon="crown-wear" onClick={handleWear}> <MenuItem icon="crown-wear-outline" onClick={handleWear}>
{lang('GiftInfoWear')} {lang('GiftInfoWear')}
</MenuItem> </MenuItem>
)} )}
{canTakeOff && ( {canTakeOff && (
<MenuItem icon="crown-take-off" onClick={handleTakeOff}> <MenuItem icon="crown-take-off-outline" onClick={handleTakeOff}>
{lang('GiftInfoTakeOff')} {lang('GiftInfoTakeOff')}
</MenuItem> </MenuItem>
)} )}

View File

@ -14,6 +14,7 @@ const COLORS = {
red: [['#FF5B54', '#ED1C26'], ['#653633', '#532224']], red: [['#FF5B54', '#ED1C26'], ['#653633', '#532224']],
blue: [['#6ED2FF', '#34A4FC'], ['#344F5A', '#152E42']], blue: [['#6ED2FF', '#34A4FC'], ['#344F5A', '#152E42']],
purple: [['#E367D7', '#757BF6'], ['#E367D7', '#757BF6']], purple: [['#E367D7', '#757BF6'], ['#E367D7', '#757BF6']],
green: [['#52D553', '#4BB121'], ['#52D553', '#4BB121']],
} as const; } as const;
type ColorKey = keyof typeof COLORS; type ColorKey = keyof typeof COLORS;

View File

@ -1,4 +1,4 @@
.header { .root {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;

View File

@ -0,0 +1,60 @@
import React, { memo, useMemo } from '../../../lib/teact/teact';
import type {
ApiPeer, ApiStarGiftUnique,
} from '../../../api/types';
import { getGiftAttributes } from '../helpers/gifts';
import { REM } from '../helpers/mediaDimensions';
import AnimatedIconFromSticker from '../AnimatedIconFromSticker';
import Avatar from '../Avatar';
import Icon from '../icons/Icon';
import RadialPatternBackground from '../profile/RadialPatternBackground';
import styles from './GiftTransferPreview.module.scss';
type OwnProps = {
peer: ApiPeer;
gift: ApiStarGiftUnique;
};
const AVATAR_SIZE = 4 * REM;
const GIFT_STICKER_SIZE = 3 * REM;
const GiftTransferPreview = ({
peer,
gift,
}: OwnProps) => {
const giftAttributes = useMemo(() => {
return getGiftAttributes(gift);
}, [gift]);
if (!giftAttributes) return undefined;
return (
<div className={styles.root}>
<div className={styles.giftPreview}>
<RadialPatternBackground
className={styles.backdrop}
backgroundColors={[giftAttributes.backdrop!.centerColor, giftAttributes.backdrop!.edgeColor]}
patternColor={giftAttributes.backdrop?.patternColor}
patternIcon={giftAttributes.pattern?.sticker}
/>
<AnimatedIconFromSticker
className={styles.sticker}
size={GIFT_STICKER_SIZE}
sticker={giftAttributes.model?.sticker}
/>
</div>
<Icon name="next" className={styles.arrow} />
<Avatar
peer={peer}
size={AVATAR_SIZE}
className={styles.avatar}
/>
</div>
);
};
export default memo(GiftTransferPreview);

View File

@ -66,11 +66,22 @@ const SavedGift = ({
const canManage = peerId === currentUserId || hasAdminRights; const canManage = peerId === currentUserId || hasAdminRights;
const totalIssued = getTotalGiftAvailability(gift.gift); const totalIssued = getTotalGiftAvailability(gift.gift);
const ribbonText = gift.isPinned && gift.gift.type === 'starGiftUnique' const starGift = gift.gift;
? lang('GiftSavedNumber', { number: gift.gift.number }) const starGiftUnique = starGift.type === 'starGiftUnique' ? starGift : undefined;
: totalIssued const ribbonText = (() => {
? lang('ActionStarGiftLimitedRibbon', { total: formatIntegerCompact(lang, totalIssued) }) if (starGiftUnique?.resellPriceInStars) {
: undefined; return lang('GiftRibbonSale');
}
if (gift.isPinned && starGiftUnique) {
return lang('GiftSavedNumber', { number: starGiftUnique.number });
}
if (totalIssued) {
return lang('ActionStarGiftLimitedRibbon', { total: formatIntegerCompact(lang, totalIssued) });
}
return undefined;
})();
const ribbonColor = starGiftUnique?.resellPriceInStars ? 'green' : 'blue';
const { const {
isContextMenuOpen, contextMenuAnchor, isContextMenuOpen, contextMenuAnchor,
@ -150,7 +161,7 @@ const SavedGift = ({
)} )}
{ribbonText && ( {ribbonText && (
<GiftRibbon <GiftRibbon
color="blue" color={ribbonColor}
text={ribbonText} text={ribbonText}
/> />
)} )}

View File

@ -597,7 +597,7 @@ const ActionMessageText = ({
case 'starGiftUnique': { case 'starGiftUnique': {
const { const {
isTransferred, isUpgrade, savedId, peerId, fromId, isTransferred, isUpgrade, savedId, peerId, fromId, resaleStars, gift,
} = action; } = action;
const isToChannel = Boolean(peerId && savedId); const isToChannel = Boolean(peerId && savedId);
@ -606,6 +606,19 @@ const ActionMessageText = ({
const fromTitle = (fromPeer && getPeerTitle(lang, fromPeer)) || userFallbackText; const fromTitle = (fromPeer && getPeerTitle(lang, fromPeer)) || userFallbackText;
const fromLink = renderPeerLink(fromPeer?.id, fromTitle, asPreview); const fromLink = renderPeerLink(fromPeer?.id, fromTitle, asPreview);
if (resaleStars) {
return lang(
isOutgoing
? 'ApiMessageMessageActionResaleStarGiftUniqueOutgoing'
: 'ApiMessageMessageActionResaleStarGiftUniqueIncoming',
{
gift: lang('GiftUnique', { title: gift.title, number: gift.number }),
stars: renderStrong(formatStarsAsText(lang, resaleStars)),
},
{ withNodes: true },
);
}
if (isToChannel) { if (isToChannel) {
const channelPeer = selectPeer(global, peerId!); const channelPeer = selectPeer(global, peerId!);
const isYou = fromPeer?.id === currentUserId; const isYou = fromPeer?.id === currentUserId;

View File

@ -19,6 +19,7 @@ import FrozenAccountModal from './frozenAccount/FrozenAccountModal.async';
import PremiumGiftModal from './gift/GiftModal.async'; import PremiumGiftModal from './gift/GiftModal.async';
import GiftInfoModal from './gift/info/GiftInfoModal.async'; import GiftInfoModal from './gift/info/GiftInfoModal.async';
import GiftRecipientPicker from './gift/recipient/GiftRecipientPicker.async'; import GiftRecipientPicker from './gift/recipient/GiftRecipientPicker.async';
import GiftResalePriceComposerModal from './gift/resale/GiftResalePriceComposerModal.async';
import GiftStatusInfoModal from './gift/status/GiftStatusInfoModal.async'; import GiftStatusInfoModal from './gift/status/GiftStatusInfoModal.async';
import GiftTransferModal from './gift/transfer/GiftTransferModal.async'; import GiftTransferModal from './gift/transfer/GiftTransferModal.async';
import GiftUpgradeModal from './gift/upgrade/GiftUpgradeModal.async'; import GiftUpgradeModal from './gift/upgrade/GiftUpgradeModal.async';
@ -69,6 +70,7 @@ type ModalKey = keyof Pick<TabState,
'isGiftRecipientPickerOpen' | 'isGiftRecipientPickerOpen' |
'isWebAppsCloseConfirmationModalOpen' | 'isWebAppsCloseConfirmationModalOpen' |
'giftInfoModal' | 'giftInfoModal' |
'giftResalePriceComposerModal' |
'suggestedStatusModal' | 'suggestedStatusModal' |
'emojiStatusAccessModal' | 'emojiStatusAccessModal' |
'locationAccessModal' | 'locationAccessModal' |
@ -120,6 +122,7 @@ const MODALS: ModalRegistry = {
isGiftRecipientPickerOpen: GiftRecipientPicker, isGiftRecipientPickerOpen: GiftRecipientPicker,
isWebAppsCloseConfirmationModalOpen: WebAppsCloseConfirmationModal, isWebAppsCloseConfirmationModalOpen: WebAppsCloseConfirmationModal,
giftInfoModal: GiftInfoModal, giftInfoModal: GiftInfoModal,
giftResalePriceComposerModal: GiftResalePriceComposerModal,
suggestedStatusModal: SuggestedStatusModal, suggestedStatusModal: SuggestedStatusModal,
emojiStatusAccessModal: EmojiStatusAccessModal, emojiStatusAccessModal: EmojiStatusAccessModal,
locationAccessModal: LocationAccessModal, locationAccessModal: LocationAccessModal,

View File

@ -32,6 +32,8 @@ type OwnProps = {
hasBackdrop?: boolean; hasBackdrop?: boolean;
onClose: NoneToVoidFunction; onClose: NoneToVoidFunction;
onButtonClick?: NoneToVoidFunction; onButtonClick?: NoneToVoidFunction;
withBalanceBar?: boolean;
isLowStackPriority?: true;
}; };
const TableInfoModal = ({ const TableInfoModal = ({
@ -47,6 +49,8 @@ const TableInfoModal = ({
hasBackdrop, hasBackdrop,
onClose, onClose,
onButtonClick, onButtonClick,
withBalanceBar,
isLowStackPriority,
}: OwnProps) => { }: OwnProps) => {
const { openChat } = getActions(); const { openChat } = getActions();
const handleOpenChat = useLastCallback((peerId: string) => { const handleOpenChat = useLastCallback((peerId: string) => {
@ -66,6 +70,8 @@ const TableInfoModal = ({
className={className} className={className}
contentClassName={styles.content} contentClassName={styles.content}
onClose={onClose} onClose={onClose}
withBalanceBar={withBalanceBar}
isLowStackPriority={isLowStackPriority}
> >
{headerAvatarPeer && ( {headerAvatarPeer && (
<Avatar peer={headerAvatarPeer} size="jumbo" className={styles.avatar} /> <Avatar peer={headerAvatarPeer} size="jumbo" className={styles.avatar} />

View File

@ -19,6 +19,17 @@
z-index: -1; z-index: -1;
} }
.amount {
display: flex;
gap: 0.25rem;
font-size: 1.125rem;
font-weight: var(--font-weight-medium);
line-height: 1.325;
margin-bottom: 0.125rem;
align-items: center;
color: white;
}
.sticker { .sticker {
margin-top: 2rem; margin-top: 2rem;
} }

View File

@ -2,14 +2,20 @@ import React, { memo, useMemo } from '../../../lib/teact/teact';
import type { import type {
ApiStarGiftAttributeBackdrop, ApiStarGiftAttributeModel, ApiStarGiftAttributePattern, ApiStarGiftAttributeBackdrop, ApiStarGiftAttributeModel, ApiStarGiftAttributePattern,
ApiStarsAmount,
} from '../../../api/types'; } from '../../../api/types';
import {
formatStarsTransactionAmount,
} from '../../../global/helpers/payments';
import buildClassName from '../../../util/buildClassName'; import buildClassName from '../../../util/buildClassName';
import buildStyle from '../../../util/buildStyle'; import buildStyle from '../../../util/buildStyle';
import { useTransitionActiveKey } from '../../../hooks/animations/useTransitionActiveKey'; import { useTransitionActiveKey } from '../../../hooks/animations/useTransitionActiveKey';
import useLang from '../../../hooks/useLang';
import AnimatedIconFromSticker from '../../common/AnimatedIconFromSticker'; import AnimatedIconFromSticker from '../../common/AnimatedIconFromSticker';
import StarIcon from '../../common/icons/StarIcon';
import RadialPatternBackground from '../../common/profile/RadialPatternBackground'; import RadialPatternBackground from '../../common/profile/RadialPatternBackground';
import Transition from '../../ui/Transition'; import Transition from '../../ui/Transition';
@ -22,6 +28,7 @@ type OwnProps = {
title?: string; title?: string;
subtitle?: string; subtitle?: string;
className?: string; className?: string;
resellPrice?: ApiStarsAmount;
}; };
const STICKER_SIZE = 120; const STICKER_SIZE = 120;
@ -33,7 +40,9 @@ const UniqueGiftHeader = ({
title, title,
subtitle, subtitle,
className, className,
resellPrice,
}: OwnProps) => { }: OwnProps) => {
const lang = useLang();
const activeKey = useTransitionActiveKey([modelAttribute, backdropAttribute, patternAttribute]); const activeKey = useTransitionActiveKey([modelAttribute, backdropAttribute, patternAttribute]);
const subtitleColor = backdropAttribute?.textColor; const subtitleColor = backdropAttribute?.textColor;
@ -73,6 +82,14 @@ const UniqueGiftHeader = ({
{subtitle} {subtitle}
</p> </p>
)} )}
{resellPrice && (
<p className={styles.amount}>
<span>
{formatStarsTransactionAmount(lang, resellPrice)}
</span>
<StarIcon type="gold" size="middle" />
</p>
)}
</div> </div>
); );
}; };

View File

@ -18,6 +18,63 @@
color: var(--color-error); color: var(--color-error);
} }
.headerSplitButton {
display: flex;
flex-direction: row;
position: absolute;
right: 0.375rem;
}
.headerButton,
.giftResalePriceContainer {
height: 1.75rem;
width: fit-content;
font-size: 1rem;
font-weight: var(--font-weight-medium);
outline: none !important;
align-items: center;
display: flex;
justify-content: center;
color: white;
border-radius: 1rem;
background-color: rgba(0, 0, 0, 0.2);
backdrop-filter: blur(25px);
pointer-events: auto;
padding: 0.25rem;
padding-inline: 0.625rem;
}
.giftResalePriceContainer {
font-size: 0.75rem;
}
.giftResalePriceStar {
margin-inline-start: 0 !important;
}
.headerButton {
position: relative;
cursor: var(--custom-cursor, pointer);
flex-shrink: 0;
overflow: hidden;
transition: background-color 0.15s;
&:hover {
background-color: rgba(0, 0, 0, 0.1);
}
}
.left {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
.right {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
.description { .description {
text-align: center; text-align: center;
color: var(--_color-description, var(--color-text)); color: var(--_color-description, var(--color-text));

View File

@ -1,10 +1,11 @@
import type { FC, TeactNode } from '../../../../lib/teact/teact'; import type { FC, TeactNode } from '../../../../lib/teact/teact';
import React, { memo, useMemo } from '../../../../lib/teact/teact'; import React, { memo, useMemo, useState } from '../../../../lib/teact/teact';
import { getActions, getGlobal, withGlobal } from '../../../../global'; import { getActions, getGlobal, withGlobal } from '../../../../global';
import type { import type {
ApiEmojiStatusType, ApiEmojiStatusType,
ApiPeer, ApiPeer,
ApiUser,
} from '../../../../api/types'; } from '../../../../api/types';
import type { TabState } from '../../../../global/types'; import type { TabState } from '../../../../global/types';
@ -31,6 +32,7 @@ import AnimatedIconFromSticker from '../../../common/AnimatedIconFromSticker';
import Avatar from '../../../common/Avatar'; import Avatar from '../../../common/Avatar';
import BadgeButton from '../../../common/BadgeButton'; import BadgeButton from '../../../common/BadgeButton';
import GiftMenuItems from '../../../common/gift/GiftMenuItems'; import GiftMenuItems from '../../../common/gift/GiftMenuItems';
import GiftTransferPreview from '../../../common/gift/GiftTransferPreview';
import Icon from '../../../common/icons/Icon'; import Icon from '../../../common/icons/Icon';
import SafeLink from '../../../common/SafeLink'; import SafeLink from '../../../common/SafeLink';
import Button from '../../../ui/Button'; import Button from '../../../ui/Button';
@ -55,6 +57,7 @@ type StateProps = {
currentUserEmojiStatus?: ApiEmojiStatusType; currentUserEmojiStatus?: ApiEmojiStatusType;
collectibleEmojiStatuses?: ApiEmojiStatusType[]; collectibleEmojiStatuses?: ApiEmojiStatusType[];
tonExplorerUrl?: string; tonExplorerUrl?: string;
currentUser?: ApiUser;
}; };
const STICKER_SIZE = 120; const STICKER_SIZE = 120;
@ -69,6 +72,7 @@ const GiftInfoModal = ({
currentUserEmojiStatus, currentUserEmojiStatus,
collectibleEmojiStatuses, collectibleEmojiStatuses,
tonExplorerUrl, tonExplorerUrl,
currentUser,
}: OwnProps & StateProps) => { }: OwnProps & StateProps) => {
const { const {
closeGiftInfoModal, closeGiftInfoModal,
@ -78,12 +82,14 @@ const GiftInfoModal = ({
focusMessage, focusMessage,
openGiftUpgradeModal, openGiftUpgradeModal,
showNotification, showNotification,
buyStarGift,
} = getActions(); } = getActions();
const [isConvertConfirmOpen, openConvertConfirm, closeConvertConfirm] = useFlag(); const [isConvertConfirmOpen, openConvertConfirm, closeConvertConfirm] = useFlag();
const lang = useLang(); const lang = useLang();
const oldLang = useOldLang(); const oldLang = useOldLang();
const [isConfirmModalOpen, setIsConfirmModalOpen] = useState<boolean>(false);
const isOpen = Boolean(modal); const isOpen = Boolean(modal);
const renderingModal = useCurrentOrPrev(modal); const renderingModal = useCurrentOrPrev(modal);
@ -106,12 +112,24 @@ const GiftInfoModal = ({
const hasConvertOption = canConvertDifference > 0 && Boolean(savedGift?.starsToConvert); const hasConvertOption = canConvertDifference > 0 && Boolean(savedGift?.starsToConvert);
const isGiftUnique = gift && gift.type === 'starGiftUnique'; const isGiftUnique = gift && gift.type === 'starGiftUnique';
const uniqueGift = isGiftUnique ? gift : undefined;
const canFocusUpgrade = Boolean(savedGift?.upgradeMsgId); const canFocusUpgrade = Boolean(savedGift?.upgradeMsgId);
const canManage = !canFocusUpgrade && savedGift?.inputGift && ( const canManage = !canFocusUpgrade && savedGift?.inputGift && (
isTargetChat ? hasAdminRights : renderingTargetPeer?.id === currentUserId isTargetChat ? hasAdminRights : renderingTargetPeer?.id === currentUserId
); );
const resellPriceInStars = isGiftUnique ? gift.resellPriceInStars : undefined;
const canBuyGift = !canManage && Boolean(resellPriceInStars);
const giftOwnerTitle = (() => {
if (!isGiftUnique) return undefined;
const { ownerName, ownerId } = gift;
const global = getGlobal(); // Peer titles do not need to be reactive
const owner = ownerId ? selectPeer(global, ownerId) : undefined;
return owner ? getPeerTitle(lang, owner) : ownerName;
})();
const handleClose = useLastCallback(() => { const handleClose = useLastCallback(() => {
closeGiftInfoModal(); closeGiftInfoModal();
}); });
@ -142,26 +160,57 @@ const GiftInfoModal = ({
openGiftUpgradeModal({ giftId: savedGift.gift.id, gift: savedGift }); openGiftUpgradeModal({ giftId: savedGift.gift.id, gift: savedGift });
}); });
const handleBuyGift = useLastCallback(() => {
if (!savedGift || gift?.type !== 'starGiftUnique' || !gift.resellPriceInStars) return;
setIsConfirmModalOpen(true);
});
const closeConfirmModal = useLastCallback(() => {
setIsConfirmModalOpen(false);
});
const handleConfirmBuyGift = useLastCallback(() => {
if (!savedGift || gift?.type !== 'starGiftUnique' || !gift.resellPriceInStars) return;
closeConfirmModal();
buyStarGift({ slug: gift.slug, stars: gift.resellPriceInStars });
});
const giftAttributes = useMemo(() => { const giftAttributes = useMemo(() => {
return gift && getGiftAttributes(gift); return gift && getGiftAttributes(gift);
}, [gift]); }, [gift]);
const SettingsMenuButton: FC<{ onTrigger: () => void; isMenuOpen?: boolean }> = useMemo(() => { const SettingsMenuButton: FC<{ onTrigger: () => void; isMenuOpen?: boolean }> = useMemo(() => {
return ({ onTrigger, isMenuOpen }) => ( return ({ onTrigger }) => (
<Button <div
round className={buildClassName(
size="smaller" styles.headerButton,
color="translucent-white" styles.left,
className={isMenuOpen ? 'active' : ''} )}
tabIndex={0}
role="button"
aria-haspopup="menu"
aria-label={lang('AriaMoreButton')}
onClick={onTrigger} onClick={onTrigger}
ariaLabel={lang('AriaMoreButton')}
> >
<Icon name="more" /> <Icon
</Button> name="more"
className={styles.icon}
/>
</div>
); );
}, [lang]); }, [lang]);
const renderFooterButton = useLastCallback(() => { const renderFooterButton = useLastCallback(() => {
if (canBuyGift) {
return (
<Button noForcedUpperCase size="smaller" onClick={handleBuyGift}>
{lang('ButtonBuyGift', {
stars: formatStarsAsIcon(lang, resellPriceInStars!, { asFont: true }),
}, { withNodes: true })}
</Button>
);
}
if (canFocusUpgrade) { if (canFocusUpgrade) {
return ( return (
<Button size="smaller" onClick={handleFocusUpgraded}> <Button size="smaller" onClick={handleFocusUpgraded}>
@ -312,17 +361,36 @@ const GiftInfoModal = ({
<div <div
className={styles.modalHeader} className={styles.modalHeader}
> >
<Button {Boolean(canManage && resellPriceInStars) && (
className={styles.modalCloseButton} <div className={styles.giftResalePriceContainer}>
round {formatStarsAsIcon(lang, resellPriceInStars!, {
color="translucent-white" asFont: true,
size="smaller" className: styles.giftResalePriceStar,
ariaLabel={lang('Close')} })}
onClick={handleClose} </div>
> )}
<Icon name="close" /> <div className={styles.headerSplitButton}>
</Button> {isOpen && uniqueGiftContextMenu}
{isOpen && uniqueGiftContextMenu} <div
className={buildClassName(
styles.headerButton,
styles.right,
)}
tabIndex={0}
role="button"
aria-haspopup="menu"
aria-label={lang('Close')}
onClick={handleClose}
>
<Icon
name="close"
className={buildClassName(
styles.icon,
styles.moreIcon,
)}
/>
</div>
</div>
</div> </div>
); );
@ -574,7 +642,7 @@ const GiftInfoModal = ({
const footer = ( const footer = (
<div className={styles.footer}> <div className={styles.footer}>
{(canManage || tonLink) && ( {(canManage || tonLink || canBuyGift) && (
<div className={styles.footerDescription}> <div className={styles.footerDescription}>
{tonLink && ( {tonLink && (
<div> <div>
@ -596,11 +664,18 @@ const GiftInfoModal = ({
})} })}
</div> </div>
)} )}
{isVisibleForMe && ( {!canBuyGift && isVisibleForMe && (
<div> <div>
{lang('GiftInfoSenderHidden')} {lang('GiftInfoSenderHidden')}
</div> </div>
)} )}
{canBuyGift && giftOwnerTitle && (
<div>
{lang('GiftInfoBuyGift', {
user: giftOwnerTitle,
}, { withNodes: true })}
</div>
)}
</div> </div>
)} )}
{renderFooterButton()} {renderFooterButton()}
@ -617,8 +692,9 @@ const GiftInfoModal = ({
typeGift, savedGift, renderingTargetPeer, giftSticker, lang, typeGift, savedGift, renderingTargetPeer, giftSticker, lang,
canManage, hasConvertOption, isSender, oldLang, tonExplorerUrl, canManage, hasConvertOption, isSender, oldLang, tonExplorerUrl,
gift, giftAttributes, renderFooterButton, isTargetChat, gift, giftAttributes, renderFooterButton, isTargetChat,
SettingsMenuButton, isOpen, isGiftUnique, renderingModal, SettingsMenuButton, isGiftUnique, renderingModal,
collectibleEmojiStatuses, currentUserEmojiStatus, saleDateInfo, collectibleEmojiStatuses, currentUserEmojiStatus, saleDateInfo,
canBuyGift, giftOwnerTitle, isOpen, resellPriceInStars,
]); ]);
return ( return (
@ -632,7 +708,35 @@ const GiftInfoModal = ({
footer={modalData?.footer} footer={modalData?.footer}
className={styles.modal} className={styles.modal}
onClose={handleClose} onClose={handleClose}
withBalanceBar={Boolean(canBuyGift)}
isLowStackPriority
/> />
{uniqueGift && currentUser && resellPriceInStars && (
<ConfirmDialog
isOpen={isConfirmModalOpen}
noDefaultTitle
onClose={closeConfirmModal}
confirmLabel={lang('ButtonBuyGift', {
stars: formatStarsAsIcon(lang, resellPriceInStars!, { asFont: true }),
}, { withNodes: true })}
confirmHandler={handleConfirmBuyGift}
>
<GiftTransferPreview
peer={currentUser}
gift={uniqueGift}
/>
<p>
{lang('GiftBuyConfirmDescription', {
gift: lang('GiftUnique', { title: uniqueGift.title, number: uniqueGift.number }),
stars: formatStarsAsText(lang, resellPriceInStars),
}, {
withNodes: true,
withMarkdown: true,
})}
</p>
</ConfirmDialog>
)}
{savedGift && ( {savedGift && (
<ConfirmDialog <ConfirmDialog
isOpen={isConvertConfirmOpen} isOpen={isConvertConfirmOpen}
@ -691,6 +795,7 @@ export default memo(withGlobal<OwnProps>(
hasAdminRights, hasAdminRights,
currentUserEmojiStatus, currentUserEmojiStatus,
collectibleEmojiStatuses, collectibleEmojiStatuses,
currentUser,
}; };
}, },
)(GiftInfoModal)); )(GiftInfoModal));

View File

@ -0,0 +1,18 @@
import type { FC } from '../../../../lib/teact/teact';
import React from '../../../../lib/teact/teact';
import type { OwnProps } from './GiftResalePriceComposerModal';
import { Bundles } from '../../../../util/moduleLoader';
import useModuleLoader from '../../../../hooks/useModuleLoader';
const GiftResalePriceComposerModalAsync: FC<OwnProps> = (props) => {
const { modal } = props;
const GiftResalePriceComposerModal = useModuleLoader(Bundles.Stars, 'GiftResalePriceComposerModal', !modal);
// eslint-disable-next-line react/jsx-props-no-spreading
return GiftResalePriceComposerModal ? <GiftResalePriceComposerModal {...props} /> : undefined;
};
export default GiftResalePriceComposerModalAsync;

View File

@ -0,0 +1,19 @@
.descriptionContainer {
color: var(--color-text-secondary);
font-size: 0.875rem;
margin-bottom: 2rem;
margin-inline: 1rem;
display: flex;
}
.descriptionPrice {
margin-left: auto;
}
.inputPrice {
margin-top: 0.5rem;
:global(.input-group) {
margin-bottom: 0.25rem;
}
}

View File

@ -0,0 +1,158 @@
import React, {
memo, useState,
} from '../../../../lib/teact/teact';
import { getActions, withGlobal } from '../../../../global';
import type { TabState } from '../../../../global/types';
import { formatCurrencyAsString } from '../../../../util/formatCurrency';
import { formatStarsAsIcon, formatStarsAsText } from '../../../../util/localization/format';
import useCurrentOrPrev from '../../../../hooks/useCurrentOrPrev';
import useLang from '../../../../hooks/useLang';
import useLastCallback from '../../../../hooks/useLastCallback';
import Button from '../../../ui/Button';
import InputText from '../../../ui/InputText';
import Modal from '../../../ui/Modal';
import styles from './GiftResalePriceComposerModal.module.scss';
export type OwnProps = {
modal: TabState['giftResalePriceComposerModal'];
};
export type StateProps = {
starsStargiftResaleCommissionPermille?: number;
starsStargiftResaleAmountMin: number;
starsStargiftResaleAmountMax?: number;
starsUsdWithdrawRate?: number;
};
const GiftResalePriceComposerModal = ({
modal, starsStargiftResaleCommissionPermille,
starsStargiftResaleAmountMin, starsStargiftResaleAmountMax, starsUsdWithdrawRate,
}: OwnProps & StateProps) => {
const {
closeGiftResalePriceComposerModal,
closeGiftInfoModal,
updateStarGiftPrice,
showNotification,
} = getActions();
const isOpen = Boolean(modal);
const [price, setPrice] = useState<number | undefined>(undefined);
const renderingModal = useCurrentOrPrev(modal);
const { gift: typeGift } = renderingModal || {};
const isSavedGift = typeGift && 'gift' in typeGift;
const savedGift = isSavedGift ? typeGift : undefined;
const hasPrice = Boolean(price);
const lang = useLang();
const handleChangePrice = useLastCallback((e) => {
const value = e.target.value;
const number = parseFloat(value);
const result = value === '' || Number.isNaN(number) ? undefined
: starsStargiftResaleAmountMax ? Math.min(number, starsStargiftResaleAmountMax) : number;
setPrice(result);
});
const handleClose = useLastCallback(() => {
closeGiftResalePriceComposerModal();
});
const handleSellGift = useLastCallback(() => {
if (!savedGift || savedGift.gift.type !== 'starGiftUnique' || !savedGift.inputGift || !price) return;
closeGiftResalePriceComposerModal();
closeGiftInfoModal();
updateStarGiftPrice({ gift: savedGift.inputGift, price });
showNotification({
icon: 'sell-outline',
message: {
key: 'NotificationGiftIsSale',
variables: {
gift: lang('GiftUnique', { title: savedGift.gift.title, number: savedGift.gift.number }),
},
},
});
});
const commission = starsStargiftResaleCommissionPermille;
const isPriceCorrect = hasPrice && price > starsStargiftResaleAmountMin;
return (
<Modal
isOpen={isOpen}
title={lang('GiftSellTitle')}
hasCloseButton
isSlim
onClose={handleClose}
>
<div className={styles.inputPrice}>
<InputText
label={lang('InputPlaceholderGiftResalePrice')}
onChange={handleChangePrice}
value={price?.toString()}
inputMode="numeric"
tabIndex={0}
teactExperimentControlled
/>
</div>
<div className={styles.descriptionContainer}>
<span>
{!isPriceCorrect && commission && lang('DescriptionComposerGiftMinimumPrice', {
stars: formatStarsAsText(lang, starsStargiftResaleAmountMin),
}, {
withMarkdown: true,
withNodes: true,
})}
{isPriceCorrect && lang('DescriptionComposerGiftResalePrice',
{
stars: formatStarsAsText(lang, commission ? Number((price * (commission)).toFixed()) : price),
},
{
withMarkdown: true,
withNodes: true,
})}
</span>
{isPriceCorrect && starsUsdWithdrawRate && (
<span className={styles.descriptionPrice}>
{`${formatCurrencyAsString(
price * starsUsdWithdrawRate,
'USD',
lang.code,
)}`}
</span>
)}
</div>
<Button noForcedUpperCase disabled={!isPriceCorrect} size="smaller" onClick={handleSellGift}>
{isPriceCorrect && lang('ButtonSellGift', {
stars: formatStarsAsIcon(lang, price, { asFont: true }),
}, { withNodes: true })}
{!isPriceCorrect && lang('Sell')}
</Button>
</Modal>
);
};
export default memo(withGlobal<OwnProps>(
(global): StateProps => {
const configPermille = global.appConfig?.starsStargiftResaleCommissionPermille;
const starsStargiftResaleCommissionPermille = configPermille ? (configPermille / 1000) : undefined;
const starsStargiftResaleAmountMin = global.appConfig?.starsStargiftResaleAmountMin || 0;
const starsStargiftResaleAmountMax = global.appConfig?.starsStargiftResaleAmountMax;
const starsUsdWithdrawRateX1000 = global.appConfig?.starsUsdWithdrawRateX1000;
const starsUsdWithdrawRate = starsUsdWithdrawRateX1000 ? starsUsdWithdrawRateX1000 / 1000 : 1;
return {
starsStargiftResaleCommissionPermille,
starsStargiftResaleAmountMin,
starsStargiftResaleAmountMax,
starsUsdWithdrawRate,
};
},
)(GiftResalePriceComposerModal));

View File

@ -14,7 +14,6 @@ import { unique } from '../../../../util/iteratees';
import { formatStarsAsIcon, formatStarsAsText } from '../../../../util/localization/format'; import { formatStarsAsIcon, formatStarsAsText } from '../../../../util/localization/format';
import { MEMO_EMPTY_ARRAY } from '../../../../util/memo'; import { MEMO_EMPTY_ARRAY } from '../../../../util/memo';
import { getGiftAttributes } from '../../../common/helpers/gifts'; import { getGiftAttributes } from '../../../common/helpers/gifts';
import { REM } from '../../../common/helpers/mediaDimensions';
import sortChatIds from '../../../common/helpers/sortChatIds'; import sortChatIds from '../../../common/helpers/sortChatIds';
import useCurrentOrPrev from '../../../../hooks/useCurrentOrPrev'; import useCurrentOrPrev from '../../../../hooks/useCurrentOrPrev';
@ -23,16 +22,11 @@ import useLang from '../../../../hooks/useLang';
import useLastCallback from '../../../../hooks/useLastCallback'; import useLastCallback from '../../../../hooks/useLastCallback';
import usePeerSearch from '../../../../hooks/usePeerSearch'; import usePeerSearch from '../../../../hooks/usePeerSearch';
import AnimatedIconFromSticker from '../../../common/AnimatedIconFromSticker'; import GiftTransferPreview from '../../../common/gift/GiftTransferPreview';
import Avatar from '../../../common/Avatar';
import Icon from '../../../common/icons/Icon';
import PeerPicker from '../../../common/pickers/PeerPicker'; import PeerPicker from '../../../common/pickers/PeerPicker';
import PickerModal from '../../../common/pickers/PickerModal'; import PickerModal from '../../../common/pickers/PickerModal';
import RadialPatternBackground from '../../../common/profile/RadialPatternBackground';
import ConfirmDialog from '../../../ui/ConfirmDialog'; import ConfirmDialog from '../../../ui/ConfirmDialog';
import styles from './GiftTransferModal.module.scss';
export type OwnProps = { export type OwnProps = {
modal: TabState['giftTransferModal']; modal: TabState['giftTransferModal'];
}; };
@ -44,9 +38,6 @@ type StateProps = {
type Categories = 'withdraw'; type Categories = 'withdraw';
const AVATAR_SIZE = 4 * REM;
const GIFT_STICKER_SIZE = 3 * REM;
const GiftTransferModal = ({ const GiftTransferModal = ({
modal, contactIds, currentUserId, modal, contactIds, currentUserId,
}: OwnProps & StateProps) => { }: OwnProps & StateProps) => {
@ -175,27 +166,12 @@ const GiftTransferModal = ({
) : lang('GiftTransferConfirmButtonFree')} ) : lang('GiftTransferConfirmButtonFree')}
confirmHandler={handleTransfer} confirmHandler={handleTransfer}
> >
<div className={styles.header}> {renderingSelectedPeer && (
<div className={styles.giftPreview}> <GiftTransferPreview
<RadialPatternBackground
className={styles.backdrop}
backgroundColors={[giftAttributes.backdrop!.centerColor, giftAttributes.backdrop!.edgeColor]}
patternColor={giftAttributes.backdrop?.patternColor}
patternIcon={giftAttributes.pattern?.sticker}
/>
<AnimatedIconFromSticker
className={styles.sticker}
size={GIFT_STICKER_SIZE}
sticker={giftAttributes.model?.sticker}
/>
</div>
<Icon name="next" className={styles.arrow} />
<Avatar
peer={renderingSelectedPeer} peer={renderingSelectedPeer}
size={AVATAR_SIZE} gift={uniqueGift}
className={styles.avatar}
/> />
</div> )}
<p> <p>
{renderingModal?.gift.transferStars {renderingModal?.gift.transferStars
? lang('GiftTransferConfirmDescription', { ? lang('GiftTransferConfirmDescription', {

View File

@ -18,6 +18,13 @@ export function getTransactionTitle(oldLang: OldLangFn, lang: LangFn, transactio
}, },
); );
} }
if (transaction.isGiftResale) {
return isNegativeStarsAmount(transaction.stars)
? lang('StarGiftSaleTransaction')
: lang('StarGiftPurchaseTransaction');
}
if (transaction.starRefCommision) { if (transaction.starRefCommision) {
return oldLang('StarTransactionCommission', formatPercent(transaction.starRefCommision)); return oldLang('StarTransactionCommission', formatPercent(transaction.starRefCommision));
} }

View File

@ -80,7 +80,11 @@ const StarsTransactionItem = ({ transaction, className }: OwnProps) => {
} }
if (transaction.isGiftUpgrade && transaction.starGift?.type === 'starGiftUnique') { if (transaction.isGiftUpgrade && transaction.starGift?.type === 'starGiftUnique') {
description = transaction.starGift.title; description = lang('GiftUnique', { title: transaction.starGift.title, number: transaction.starGift.number });
}
if (transaction.isGiftResale && transaction.starGift?.type === 'starGiftUnique') {
description = lang('GiftUnique', { title: transaction.starGift.title, number: transaction.starGift.number });
} }
if (transaction.photo) { if (transaction.photo) {

View File

@ -85,7 +85,7 @@ const StarsTransactionModal: FC<OwnProps & StateProps> = ({
} }
const { const {
giveawayPostId, photo, stars, isGiftUpgrade, starGift, giveawayPostId, photo, stars, isGiftUpgrade, starGift, isGiftResale,
} = transaction; } = transaction;
const gift = transaction?.starGift; const gift = transaction?.starGift;
@ -131,6 +131,7 @@ const StarsTransactionModal: FC<OwnProps & StateProps> = ({
modelAttribute={giftAttributes!.model!} modelAttribute={giftAttributes!.model!}
title={gift.title} title={gift.title}
subtitle={lang('GiftInfoCollectible', { number: gift.number })} subtitle={lang('GiftInfoCollectible', { number: gift.number })}
resellPrice={transaction.stars}
/> />
</div> </div>
); );
@ -194,7 +195,7 @@ const StarsTransactionModal: FC<OwnProps & StateProps> = ({
const tableData: TableData = []; const tableData: TableData = [];
if (transaction && !transaction.paidMessages) { if (transaction && !transaction.paidMessages && !isGiftResale) {
tableData.push([ tableData.push([
oldLang('StarsTransaction.StarRefReason.Title'), oldLang('StarsTransaction.StarRefReason.Title'),
oldLang('StarsTransaction.StarRefReason.Program'), oldLang('StarsTransaction.StarRefReason.Program'),
@ -208,12 +209,21 @@ const StarsTransactionModal: FC<OwnProps & StateProps> = ({
]); ]);
} }
if (isGiftResale) {
tableData.push([
oldLang('StarGiftReason'),
isNegativeStarsAmount(transaction.stars)
? lang('StarGiftSaleTransaction')
: lang('StarGiftPurchaseTransaction'),
]);
}
let peerLabel; let peerLabel;
if (isGiftUpgrade) { if (isGiftUpgrade) {
peerLabel = oldLang('Stars.Transaction.GiftFrom'); peerLabel = oldLang('Stars.Transaction.GiftFrom');
} else if (isNegativeStarsAmount(stars) || transaction.isMyGift) { } else if (isNegativeStarsAmount(stars) || transaction.isMyGift) {
peerLabel = oldLang('Stars.Transaction.To'); peerLabel = oldLang('Stars.Transaction.To');
} else if (transaction.starRefCommision && !transaction.paidMessages) { } else if (transaction.starRefCommision && !transaction.paidMessages && !isGiftResale) {
peerLabel = oldLang('StarsTransaction.StarRefReason.Miniapp'); peerLabel = oldLang('StarsTransaction.StarRefReason.Miniapp');
} else if (peerId) { } else if (peerId) {
peerLabel = oldLang('Star.Transaction.From'); peerLabel = oldLang('Star.Transaction.From');

View File

@ -54,6 +54,16 @@
align-items: center; align-items: center;
} }
&.with-balance-bar {
.modal-container {
top: 5.5rem;
}
.modal-dialog {
margin-top: 0;
max-height: calc(100vh - 7.5rem);
}
}
.modal-backdrop { .modal-backdrop {
position: fixed; position: fixed;
top: 0; top: 0;

View File

@ -17,6 +17,7 @@ import useShowTransition from '../../hooks/useShowTransition';
import Icon from '../common/icons/Icon'; import Icon from '../common/icons/Icon';
import Button, { type OwnProps as ButtonProps } from './Button'; import Button, { type OwnProps as ButtonProps } from './Button';
import ModalStarBalanceBar from './ModalStarBalanceBar';
import Portal from './Portal'; import Portal from './Portal';
import './Modal.scss'; import './Modal.scss';
@ -46,6 +47,7 @@ export type OwnProps = {
onClose: () => void; onClose: () => void;
onCloseAnimationEnd?: () => void; onCloseAnimationEnd?: () => void;
onEnter?: () => void; onEnter?: () => void;
withBalanceBar?: Boolean;
}; };
const Modal: FC<OwnProps> = ({ const Modal: FC<OwnProps> = ({
@ -70,6 +72,7 @@ const Modal: FC<OwnProps> = ({
onClose, onClose,
onCloseAnimationEnd, onCloseAnimationEnd,
onEnter, onEnter,
withBalanceBar,
}) => { }) => {
const { const {
ref: modalRef, ref: modalRef,
@ -167,6 +170,7 @@ const Modal: FC<OwnProps> = ({
noBackdrop && 'transparent-backdrop', noBackdrop && 'transparent-backdrop',
isSlim && 'slim', isSlim && 'slim',
isLowStackPriority && 'low-priority', isLowStackPriority && 'low-priority',
withBalanceBar && 'with-balance-bar',
); );
return ( return (
@ -177,6 +181,11 @@ const Modal: FC<OwnProps> = ({
tabIndex={-1} tabIndex={-1}
role="dialog" role="dialog"
> >
{withBalanceBar && (
<ModalStarBalanceBar
isModalOpen={isOpen}
/>
)}
<div className="modal-container"> <div className="modal-container">
<div className="modal-backdrop" onClick={!noBackdropClose ? onClose : undefined} /> <div className="modal-backdrop" onClick={!noBackdropClose ? onClose : undefined} />
<div className="modal-dialog" ref={dialogRef} style={dialogStyle}> <div className="modal-dialog" ref={dialogRef} style={dialogStyle}>

View File

@ -0,0 +1,46 @@
.root {
position: absolute;
top: 0rem;
left: 50%;
background-color: var(--color-background);
color: var(--color-text);
display: flex;
flex-direction: column;
align-items: center;
padding: 0.5rem 1.25rem;
border-radius: 2rem;
font-size: 0.875rem;
white-space: nowrap;
z-index: var(--z-modal);
:global(.confirm) & {
z-index: var(--z-modal-confirm);
}
:global(.low-priority) & {
z-index: var(--z-modal-low-priority);
}
transform: translate(-50%, -1rem);
transition: transform 0.2s ease, opacity 0.2s ease;
:global(body:not(.no-page-transitions)) .dots {
transition: none;
transform: none !important;
}
&:not(:global(.open)) {
transform: translate(-50%, 0);
}
&:not(:global(.closing)) {
transform: translate(-50%, 1rem);
}
}
.starIcon {
margin-inline-start: 0.125rem !important;
}

View File

@ -0,0 +1,88 @@
import React, {
memo,
} from '../../lib/teact/teact';
import { getActions, withGlobal } from '../../global';
import type { ApiStarsAmount } from '../../api/types';
import { formatStarsAmount } from '../../global/helpers/payments';
import buildClassName from '../../util/buildClassName';
import { formatStarsAsIcon } from '../../util/localization/format';
import useLang from '../../hooks/useLang';
import useLastCallback from '../../hooks/useLastCallback';
import useShowTransition from '../../hooks/useShowTransition';
import Link from './Link';
import styles from './ModalStarBalanceBar.module.scss';
export type OwnProps = {
onCloseAnimationEnd?: () => void;
isModalOpen?: true;
};
export type StateProps = {
starBalance?: ApiStarsAmount;
};
function ModalStarBalanceBar({
starBalance,
isModalOpen,
onCloseAnimationEnd,
}: StateProps & OwnProps) {
const {
openStarsBalanceModal,
} = getActions();
const lang = useLang();
const isOpen = isModalOpen ? Boolean(starBalance) : false;
const {
ref,
shouldRender,
} = useShowTransition({
isOpen,
onCloseAnimationEnd,
withShouldRender: true,
});
const handleGetMoreStars = useLastCallback(() => {
openStarsBalanceModal({});
});
if (!shouldRender || !starBalance) {
return undefined;
}
return (
<div
className={buildClassName(styles.root)}
ref={ref}
>
<div>
{lang('ModalStarsBalanceBarDescription', {
stars: formatStarsAsIcon(lang, formatStarsAmount(lang, starBalance), { className: styles.starIcon }),
}, {
withNodes: true,
withMarkdown: true,
})}
</div>
<div>
<Link isPrimary onClick={handleGetMoreStars}>{lang('GetMoreStarsLinkText')}</Link>
</div>
</div>
);
}
export default memo(withGlobal(
(global): StateProps => {
const {
stars,
} = global;
return {
starBalance: stars?.balance,
};
},
)(ModalStarBalanceBar));

View File

@ -1,5 +1,6 @@
import type { import type {
ApiInputInvoice, ApiInputInvoicePremiumGiftStars, ApiInputInvoiceStarGift, ApiRequestInputInvoice, ApiInputInvoice, ApiInputInvoicePremiumGiftStars, ApiInputInvoiceStarGift, ApiInputInvoiceStarGiftResale,
ApiRequestInputInvoice,
} from '../../../api/types'; } from '../../../api/types';
import type { ApiCredentials } from '../../../components/payment/PaymentModal'; import type { ApiCredentials } from '../../../components/payment/PaymentModal';
import type { RegularLangFnParameters } from '../../../util/localization'; import type { RegularLangFnParameters } from '../../../util/localization';
@ -143,6 +144,20 @@ addActionHandler('sendStarGift', (global, actions, payload): ActionReturnType =>
payInputStarInvoice(global, inputInvoice, gift.stars, tabId); payInputStarInvoice(global, inputInvoice, gift.stars, tabId);
}); });
addActionHandler('buyStarGift', (global, actions, payload): ActionReturnType => {
const {
slug, stars, tabId = getCurrentTabId(),
} = payload;
const inputInvoice: ApiInputInvoiceStarGiftResale = {
type: 'stargiftResale',
slug,
peerId: global.currentUserId!,
};
payInputStarInvoice(global, inputInvoice, stars, tabId);
});
addActionHandler('sendPremiumGiftByStars', (global, actions, payload): ActionReturnType => { addActionHandler('sendPremiumGiftByStars', (global, actions, payload): ActionReturnType => {
const { const {
userId, months, amount, message, tabId = getCurrentTabId(), userId, months, amount, message, tabId = getCurrentTabId(),
@ -1184,6 +1199,7 @@ addActionHandler('processStarGiftWithdrawal', async (global, actions, payload):
function handlePaymentFormError(error: string, tabId: number) { function handlePaymentFormError(error: string, tabId: number) {
if (error === 'SLUG_INVALID') { if (error === 'SLUG_INVALID') {
// eslint-disable-next-line eslint-multitab-tt/no-getactions-in-actions
getActions().showNotification({ getActions().showNotification({
message: { message: {
key: 'PaymentInvoiceNotFound', key: 'PaymentInvoiceNotFound',
@ -1193,5 +1209,6 @@ function handlePaymentFormError(error: string, tabId: number) {
return; return;
} }
// eslint-disable-next-line eslint-multitab-tt/no-getactions-in-actions
getActions().showDialog({ data: { message: error, hasErrorKey: true }, tabId }); getActions().showDialog({ data: { message: error, hasErrorKey: true }, tabId });
} }

View File

@ -1,5 +1,6 @@
import type { ApiSavedStarGift, ApiStarGiftUnique } from '../../../api/types'; import type { ApiSavedStarGift, ApiStarGiftUnique } from '../../../api/types';
import type { StarGiftCategory } from '../../../types'; import type { StarGiftCategory } from '../../../types';
import type { ActionReturnType } from '../../types';
import { getCurrentTabId } from '../../../util/establishMultitabRole'; import { getCurrentTabId } from '../../../util/establishMultitabRole';
import { buildCollectionByKey } from '../../../util/iteratees'; import { buildCollectionByKey } from '../../../util/iteratees';
@ -144,12 +145,13 @@ addActionHandler('loadPeerSavedGifts', async (global, actions, payload): Promise
const peer = selectPeer(global, peerId); const peer = selectPeer(global, peerId);
if (!peer) return; if (!peer) return;
global = getGlobal();
const currentGifts = selectPeerSavedGifts(global, peerId, tabId); const currentGifts = selectPeerSavedGifts(global, peerId, tabId);
const localNextOffset = currentGifts?.nextOffset; const localNextOffset = currentGifts?.nextOffset;
if (!shouldRefresh && currentGifts && !localNextOffset) return; // Already loaded all if (!shouldRefresh && currentGifts && !localNextOffset) return; // Already loaded all
global = getGlobal();
const fetchingFilter = selectGiftProfileFilter(global, peerId, tabId); const fetchingFilter = selectGiftProfileFilter(global, peerId, tabId);
const result = await callApi('fetchSavedStarGifts', { const result = await callApi('fetchSavedStarGifts', {
@ -171,6 +173,18 @@ addActionHandler('loadPeerSavedGifts', async (global, actions, payload): Promise
setGlobal(global); setGlobal(global);
}); });
addActionHandler('reloadPeerSavedGifts', (global, actions, payload): ActionReturnType => {
const {
peerId,
} = payload;
Object.values(global.byTabId).forEach((tabState) => {
if (selectPeerSavedGifts(global, peerId, tabState.id)) {
actions.loadPeerSavedGifts({ peerId, shouldRefresh: true, tabId: tabState.id });
}
});
});
addActionHandler('loadStarsSubscriptions', async (global): Promise<void> => { addActionHandler('loadStarsSubscriptions', async (global): Promise<void> => {
const subscriptions = global.stars?.subscriptions; const subscriptions = global.stars?.subscriptions;
const offset = subscriptions?.nextOffset; const offset = subscriptions?.nextOffset;
@ -347,3 +361,24 @@ addActionHandler('toggleSavedGiftPinned', async (global, actions, payload): Prom
} }
}); });
}); });
addActionHandler('updateStarGiftPrice', async (global, actions, payload): Promise<void> => {
const {
gift, price,
} = payload;
const requestSavedGift = getRequestInputSavedStarGift(global, gift);
if (!requestSavedGift) {
return;
}
const result = await callApi('updateStarGiftPrice', {
inputSavedGift: requestSavedGift,
price,
});
if (!result) return;
actions.reloadPeerSavedGifts({ peerId: global.currentUserId! });
});

View File

@ -151,6 +151,25 @@ addActionHandler('apiUpdate', (global, actions, update): ActionReturnType => {
} }
} }
if (inputInvoice?.type === 'stargiftResale') {
const starGiftModalState = selectTabState(global, tabId).giftInfoModal;
if (starGiftModalState) {
actions.showNotification({
message: {
key: 'StarsGiftBought',
},
tabId,
});
if (starGiftModalState.peerId) {
actions.reloadPeerSavedGifts({ peerId: starGiftModalState.peerId });
}
actions.reloadPeerSavedGifts({ peerId: inputInvoice.peerId });
actions.requestConfetti({ withStars: true, tabId });
actions.closeGiftInfoModal({ tabId });
}
}
break; break;
} }

View File

@ -265,8 +265,23 @@ addActionHandler('openGiftInfoModal', (global, actions, payload): ActionReturnTy
}, tabId); }, tabId);
}); });
addActionHandler('openGiftResalePriceComposerModal', (global, actions, payload): ActionReturnType => {
const {
gift, peerId, tabId = getCurrentTabId(),
} = payload;
return updateTabState(global, {
giftResalePriceComposerModal: {
peerId,
gift,
},
}, tabId);
});
addTabStateResetterAction('closeGiftInfoModal', 'giftInfoModal'); addTabStateResetterAction('closeGiftInfoModal', 'giftInfoModal');
addTabStateResetterAction('closeGiftResalePriceComposerModal', 'giftResalePriceComposerModal');
addTabStateResetterAction('closeGiftUpgradeModal', 'giftUpgradeModal'); addTabStateResetterAction('closeGiftUpgradeModal', 'giftUpgradeModal');
addActionHandler('openGiftWithdrawModal', (global, actions, payload): ActionReturnType => { addActionHandler('openGiftWithdrawModal', (global, actions, payload): ActionReturnType => {

View File

@ -21,6 +21,22 @@ export function getRequestInputInvoice<T extends GlobalState>(
): ApiRequestInputInvoice | undefined { ): ApiRequestInputInvoice | undefined {
if (inputInvoice.type === 'slug') return inputInvoice; if (inputInvoice.type === 'slug') return inputInvoice;
if (inputInvoice.type === 'stargiftResale') {
const {
slug,
peerId,
} = inputInvoice;
const peer = selectPeer(global, peerId);
if (!peer) return undefined;
return {
type: 'stargiftResale',
slug,
peer,
};
}
if (inputInvoice.type === 'stargift') { if (inputInvoice.type === 'stargift') {
const { const {
peerId, shouldHideName, giftId, message, shouldUpgrade, peerId, shouldHideName, giftId, message, shouldUpgrade,

View File

@ -2406,6 +2406,10 @@ export interface ActionPayloads {
} & WithTabId; } & WithTabId;
closeGiftModal: WithTabId | undefined; closeGiftModal: WithTabId | undefined;
sendStarGift: StarGiftInfo & WithTabId; sendStarGift: StarGiftInfo & WithTabId;
buyStarGift: {
slug: string;
stars: number;
} & WithTabId;
sendPremiumGiftByStars: { sendPremiumGiftByStars: {
userId: string; userId: string;
months: number; months: number;
@ -2423,7 +2427,12 @@ export interface ActionPayloads {
} | { } | {
gift: ApiStarGift; gift: ApiStarGift;
}) & WithTabId; }) & WithTabId;
openGiftResalePriceComposerModal: ({
peerId: string;
gift: ApiSavedStarGift;
}) & WithTabId;
closeGiftInfoModal: WithTabId | undefined; closeGiftInfoModal: WithTabId | undefined;
closeGiftResalePriceComposerModal: WithTabId | undefined;
openGiftUpgradeModal: { openGiftUpgradeModal: {
giftId: string; giftId: string;
@ -2465,6 +2474,9 @@ export interface ActionPayloads {
peerId: string; peerId: string;
shouldRefresh?: boolean; shouldRefresh?: boolean;
} & WithTabId; } & WithTabId;
reloadPeerSavedGifts: {
peerId: string;
};
changeGiftVisibility: { changeGiftVisibility: {
gift: ApiInputSavedStarGift; gift: ApiInputSavedStarGift;
shouldUnsave?: boolean; shouldUnsave?: boolean;
@ -2477,6 +2489,11 @@ export interface ActionPayloads {
gift: ApiSavedStarGift; gift: ApiSavedStarGift;
} & WithTabId; } & WithTabId;
updateStarGiftPrice: {
gift: ApiInputSavedStarGift;
price: number;
} & WithTabId;
openStarsGiftModal: ({ openStarsGiftModal: ({
chatId?: string; chatId?: string;
forUserId?: string; forUserId?: string;

View File

@ -764,6 +764,11 @@ export type TabState = {
gift: ApiSavedStarGift | ApiStarGift; gift: ApiSavedStarGift | ApiStarGift;
}; };
giftResalePriceComposerModal?: {
peerId?: string;
gift: ApiSavedStarGift | ApiStarGift;
};
giftTransferModal?: { giftTransferModal?: {
gift: ApiSavedStarGift; gift: ApiSavedStarGift;
}; };

View File

@ -12,5 +12,5 @@ for (const tl of Object.values(Api)) {
} }
} }
export const LAYER = 201; export const LAYER = 203;
export { tlobjects }; export { tlobjects };

View File

@ -69,7 +69,7 @@ namespace Api {
export type TypeChatPhoto = ChatPhotoEmpty | ChatPhoto; export type TypeChatPhoto = ChatPhotoEmpty | ChatPhoto;
export type TypeMessage = MessageEmpty | Message | MessageService; export type TypeMessage = MessageEmpty | Message | MessageService;
export type TypeMessageMedia = MessageMediaEmpty | MessageMediaPhoto | MessageMediaGeo | MessageMediaContact | MessageMediaUnsupported | MessageMediaDocument | MessageMediaWebPage | MessageMediaVenue | MessageMediaGame | MessageMediaInvoice | MessageMediaGeoLive | MessageMediaPoll | MessageMediaDice | MessageMediaStory | MessageMediaGiveaway | MessageMediaGiveawayResults | MessageMediaPaidMedia; export type TypeMessageMedia = MessageMediaEmpty | MessageMediaPhoto | MessageMediaGeo | MessageMediaContact | MessageMediaUnsupported | MessageMediaDocument | MessageMediaWebPage | MessageMediaVenue | MessageMediaGame | MessageMediaInvoice | MessageMediaGeoLive | MessageMediaPoll | MessageMediaDice | MessageMediaStory | MessageMediaGiveaway | MessageMediaGiveawayResults | MessageMediaPaidMedia;
export type TypeMessageAction = MessageActionEmpty | MessageActionChatCreate | MessageActionChatEditTitle | MessageActionChatEditPhoto | MessageActionChatDeletePhoto | MessageActionChatAddUser | MessageActionChatDeleteUser | MessageActionChatJoinedByLink | MessageActionChannelCreate | MessageActionChatMigrateTo | MessageActionChannelMigrateFrom | MessageActionPinMessage | MessageActionHistoryClear | MessageActionGameScore | MessageActionPaymentSentMe | MessageActionPaymentSent | MessageActionPhoneCall | MessageActionScreenshotTaken | MessageActionCustomAction | MessageActionBotAllowed | MessageActionSecureValuesSentMe | MessageActionSecureValuesSent | MessageActionContactSignUp | MessageActionGeoProximityReached | MessageActionGroupCall | MessageActionInviteToGroupCall | MessageActionSetMessagesTTL | MessageActionGroupCallScheduled | MessageActionSetChatTheme | MessageActionChatJoinedByRequest | MessageActionWebViewDataSentMe | MessageActionWebViewDataSent | MessageActionGiftPremium | MessageActionTopicCreate | MessageActionTopicEdit | MessageActionSuggestProfilePhoto | MessageActionRequestedPeer | MessageActionSetChatWallPaper | MessageActionGiftCode | MessageActionGiveawayLaunch | MessageActionGiveawayResults | MessageActionBoostApply | MessageActionRequestedPeerSentMe | MessageActionPaymentRefunded | MessageActionGiftStars | MessageActionPrizeStars | MessageActionStarGift | MessageActionStarGiftUnique | MessageActionPaidMessagesRefunded | MessageActionPaidMessagesPrice; export type TypeMessageAction = MessageActionEmpty | MessageActionChatCreate | MessageActionChatEditTitle | MessageActionChatEditPhoto | MessageActionChatDeletePhoto | MessageActionChatAddUser | MessageActionChatDeleteUser | MessageActionChatJoinedByLink | MessageActionChannelCreate | MessageActionChatMigrateTo | MessageActionChannelMigrateFrom | MessageActionPinMessage | MessageActionHistoryClear | MessageActionGameScore | MessageActionPaymentSentMe | MessageActionPaymentSent | MessageActionPhoneCall | MessageActionScreenshotTaken | MessageActionCustomAction | MessageActionBotAllowed | MessageActionSecureValuesSentMe | MessageActionSecureValuesSent | MessageActionContactSignUp | MessageActionGeoProximityReached | MessageActionGroupCall | MessageActionInviteToGroupCall | MessageActionSetMessagesTTL | MessageActionGroupCallScheduled | MessageActionSetChatTheme | MessageActionChatJoinedByRequest | MessageActionWebViewDataSentMe | MessageActionWebViewDataSent | MessageActionGiftPremium | MessageActionTopicCreate | MessageActionTopicEdit | MessageActionSuggestProfilePhoto | MessageActionRequestedPeer | MessageActionSetChatWallPaper | MessageActionGiftCode | MessageActionGiveawayLaunch | MessageActionGiveawayResults | MessageActionBoostApply | MessageActionRequestedPeerSentMe | MessageActionPaymentRefunded | MessageActionGiftStars | MessageActionPrizeStars | MessageActionStarGift | MessageActionStarGiftUnique | MessageActionPaidMessagesRefunded | MessageActionPaidMessagesPrice | MessageActionConferenceCall;
export type TypeDialog = Dialog | DialogFolder; export type TypeDialog = Dialog | DialogFolder;
export type TypePhoto = PhotoEmpty | Photo; export type TypePhoto = PhotoEmpty | Photo;
export type TypePhotoSize = PhotoSizeEmpty | PhotoSize | PhotoCachedSize | PhotoStrippedSize | PhotoSizeProgressive | PhotoPathSize; export type TypePhotoSize = PhotoSizeEmpty | PhotoSize | PhotoCachedSize | PhotoStrippedSize | PhotoSizeProgressive | PhotoPathSize;
@ -85,7 +85,7 @@ namespace Api {
export type TypeImportedContact = ImportedContact; export type TypeImportedContact = ImportedContact;
export type TypeContactStatus = ContactStatus; 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 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 | UpdateNewStoryReaction | UpdateBroadcastRevenueTransactions | UpdateStarsBalance | UpdateBusinessBotCallbackQuery | UpdateStarsRevenueStatus | UpdateBotPurchasedPaidMedia | UpdatePaidReactionPrivacy | UpdateSentPhoneCode; 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 | UpdateBroadcastRevenueTransactions | UpdateStarsBalance | UpdateBusinessBotCallbackQuery | UpdateStarsRevenueStatus | UpdateBotPurchasedPaidMedia | UpdatePaidReactionPrivacy | UpdateSentPhoneCode | UpdateGroupCallChainBlocks;
export type TypeUpdates = UpdatesTooLong | UpdateShortMessage | UpdateShortChatMessage | UpdateShort | UpdatesCombined | Updates | UpdateShortSentMessage; export type TypeUpdates = UpdatesTooLong | UpdateShortMessage | UpdateShortChatMessage | UpdateShort | UpdatesCombined | Updates | UpdateShortSentMessage;
export type TypeDcOption = DcOption; export type TypeDcOption = DcOption;
export type TypeConfig = Config; export type TypeConfig = Config;
@ -144,7 +144,7 @@ namespace Api {
export type TypeHighScore = HighScore; export type TypeHighScore = HighScore;
export type TypeRichText = TextEmpty | TextPlain | TextBold | TextItalic | TextUnderline | TextStrike | TextFixed | TextUrl | TextEmail | TextConcat | TextSubscript | TextSuperscript | TextMarked | TextPhone | TextImage | TextAnchor; export type TypeRichText = TextEmpty | TextPlain | TextBold | TextItalic | TextUnderline | TextStrike | TextFixed | TextUrl | TextEmail | TextConcat | TextSubscript | TextSuperscript | TextMarked | TextPhone | TextImage | TextAnchor;
export type TypePageBlock = PageBlockUnsupported | PageBlockTitle | PageBlockSubtitle | PageBlockAuthorDate | PageBlockHeader | PageBlockSubheader | PageBlockParagraph | PageBlockPreformatted | PageBlockFooter | PageBlockDivider | PageBlockAnchor | PageBlockList | PageBlockBlockquote | PageBlockPullquote | PageBlockPhoto | PageBlockVideo | PageBlockCover | PageBlockEmbed | PageBlockEmbedPost | PageBlockCollage | PageBlockSlideshow | PageBlockChannel | PageBlockAudio | PageBlockKicker | PageBlockTable | PageBlockOrderedList | PageBlockDetails | PageBlockRelatedArticles | PageBlockMap; export type TypePageBlock = PageBlockUnsupported | PageBlockTitle | PageBlockSubtitle | PageBlockAuthorDate | PageBlockHeader | PageBlockSubheader | PageBlockParagraph | PageBlockPreformatted | PageBlockFooter | PageBlockDivider | PageBlockAnchor | PageBlockList | PageBlockBlockquote | PageBlockPullquote | PageBlockPhoto | PageBlockVideo | PageBlockCover | PageBlockEmbed | PageBlockEmbedPost | PageBlockCollage | PageBlockSlideshow | PageBlockChannel | PageBlockAudio | PageBlockKicker | PageBlockTable | PageBlockOrderedList | PageBlockDetails | PageBlockRelatedArticles | PageBlockMap;
export type TypePhoneCallDiscardReason = PhoneCallDiscardReasonMissed | PhoneCallDiscardReasonDisconnect | PhoneCallDiscardReasonHangup | PhoneCallDiscardReasonBusy; export type TypePhoneCallDiscardReason = PhoneCallDiscardReasonMissed | PhoneCallDiscardReasonDisconnect | PhoneCallDiscardReasonHangup | PhoneCallDiscardReasonBusy | PhoneCallDiscardReasonMigrateConferenceCall;
export type TypeDataJSON = DataJSON; export type TypeDataJSON = DataJSON;
export type TypeLabeledPrice = LabeledPrice; export type TypeLabeledPrice = LabeledPrice;
export type TypeInvoice = Invoice; export type TypeInvoice = Invoice;
@ -167,7 +167,7 @@ namespace Api {
export type TypeLangPackString = LangPackString | LangPackStringPluralized | LangPackStringDeleted; export type TypeLangPackString = LangPackString | LangPackStringPluralized | LangPackStringDeleted;
export type TypeLangPackDifference = LangPackDifference; export type TypeLangPackDifference = LangPackDifference;
export type TypeLangPackLanguage = LangPackLanguage; export type TypeLangPackLanguage = LangPackLanguage;
export type TypeChannelAdminLogEventAction = ChannelAdminLogEventActionChangeTitle | ChannelAdminLogEventActionChangeAbout | ChannelAdminLogEventActionChangeUsername | ChannelAdminLogEventActionChangePhoto | ChannelAdminLogEventActionToggleInvites | ChannelAdminLogEventActionToggleSignatures | ChannelAdminLogEventActionUpdatePinned | ChannelAdminLogEventActionEditMessage | ChannelAdminLogEventActionDeleteMessage | ChannelAdminLogEventActionParticipantJoin | ChannelAdminLogEventActionParticipantLeave | ChannelAdminLogEventActionParticipantInvite | ChannelAdminLogEventActionParticipantToggleBan | ChannelAdminLogEventActionParticipantToggleAdmin | ChannelAdminLogEventActionChangeStickerSet | ChannelAdminLogEventActionTogglePreHistoryHidden | ChannelAdminLogEventActionDefaultBannedRights | ChannelAdminLogEventActionStopPoll | ChannelAdminLogEventActionChangeLinkedChat | ChannelAdminLogEventActionChangeLocation | ChannelAdminLogEventActionToggleSlowMode | ChannelAdminLogEventActionStartGroupCall | ChannelAdminLogEventActionDiscardGroupCall | ChannelAdminLogEventActionParticipantMute | ChannelAdminLogEventActionParticipantUnmute | ChannelAdminLogEventActionToggleGroupCallSetting | ChannelAdminLogEventActionParticipantJoinByInvite | ChannelAdminLogEventActionExportedInviteDelete | ChannelAdminLogEventActionExportedInviteRevoke | ChannelAdminLogEventActionExportedInviteEdit | ChannelAdminLogEventActionParticipantVolume | ChannelAdminLogEventActionChangeHistoryTTL | ChannelAdminLogEventActionParticipantJoinByRequest | ChannelAdminLogEventActionToggleNoForwards | ChannelAdminLogEventActionSendMessage | ChannelAdminLogEventActionChangeAvailableReactions | ChannelAdminLogEventActionChangeUsernames | ChannelAdminLogEventActionToggleForum | ChannelAdminLogEventActionCreateTopic | ChannelAdminLogEventActionEditTopic | ChannelAdminLogEventActionDeleteTopic | ChannelAdminLogEventActionPinTopic | ChannelAdminLogEventActionToggleAntiSpam | ChannelAdminLogEventActionChangePeerColor | ChannelAdminLogEventActionChangeProfilePeerColor | ChannelAdminLogEventActionChangeWallpaper | ChannelAdminLogEventActionChangeEmojiStatus | ChannelAdminLogEventActionChangeEmojiStickerSet | ChannelAdminLogEventActionToggleSignatureProfiles | ChannelAdminLogEventActionParticipantSubExtend; export type TypeChannelAdminLogEventAction = ChannelAdminLogEventActionChangeTitle | ChannelAdminLogEventActionChangeAbout | ChannelAdminLogEventActionChangeUsername | ChannelAdminLogEventActionChangePhoto | ChannelAdminLogEventActionToggleInvites | ChannelAdminLogEventActionToggleSignatures | ChannelAdminLogEventActionUpdatePinned | ChannelAdminLogEventActionEditMessage | ChannelAdminLogEventActionDeleteMessage | ChannelAdminLogEventActionParticipantJoin | ChannelAdminLogEventActionParticipantLeave | ChannelAdminLogEventActionParticipantInvite | ChannelAdminLogEventActionParticipantToggleBan | ChannelAdminLogEventActionParticipantToggleAdmin | ChannelAdminLogEventActionChangeStickerSet | ChannelAdminLogEventActionTogglePreHistoryHidden | ChannelAdminLogEventActionDefaultBannedRights | ChannelAdminLogEventActionStopPoll | ChannelAdminLogEventActionChangeLinkedChat | ChannelAdminLogEventActionChangeLocation | ChannelAdminLogEventActionToggleSlowMode | ChannelAdminLogEventActionStartGroupCall | ChannelAdminLogEventActionDiscardGroupCall | ChannelAdminLogEventActionParticipantMute | ChannelAdminLogEventActionParticipantUnmute | ChannelAdminLogEventActionToggleGroupCallSetting | ChannelAdminLogEventActionParticipantJoinByInvite | ChannelAdminLogEventActionExportedInviteDelete | ChannelAdminLogEventActionExportedInviteRevoke | ChannelAdminLogEventActionExportedInviteEdit | ChannelAdminLogEventActionParticipantVolume | ChannelAdminLogEventActionChangeHistoryTTL | ChannelAdminLogEventActionParticipantJoinByRequest | ChannelAdminLogEventActionToggleNoForwards | ChannelAdminLogEventActionSendMessage | ChannelAdminLogEventActionChangeAvailableReactions | ChannelAdminLogEventActionChangeUsernames | ChannelAdminLogEventActionToggleForum | ChannelAdminLogEventActionCreateTopic | ChannelAdminLogEventActionEditTopic | ChannelAdminLogEventActionDeleteTopic | ChannelAdminLogEventActionPinTopic | ChannelAdminLogEventActionToggleAntiSpam | ChannelAdminLogEventActionChangePeerColor | ChannelAdminLogEventActionChangeProfilePeerColor | ChannelAdminLogEventActionChangeWallpaper | ChannelAdminLogEventActionChangeEmojiStatus | ChannelAdminLogEventActionChangeEmojiStickerSet | ChannelAdminLogEventActionToggleSignatureProfiles | ChannelAdminLogEventActionParticipantSubExtend | ChannelAdminLogEventActionToggleAutotranslation;
export type TypeChannelAdminLogEvent = ChannelAdminLogEvent; export type TypeChannelAdminLogEvent = ChannelAdminLogEvent;
export type TypeChannelAdminLogEventsFilter = ChannelAdminLogEventsFilter; export type TypeChannelAdminLogEventsFilter = ChannelAdminLogEventsFilter;
export type TypePopularContact = PopularContact; export type TypePopularContact = PopularContact;
@ -251,7 +251,7 @@ namespace Api {
export type TypeMessageReplies = MessageReplies; export type TypeMessageReplies = MessageReplies;
export type TypePeerBlocked = PeerBlocked; export type TypePeerBlocked = PeerBlocked;
export type TypeGroupCall = GroupCallDiscarded | GroupCall; export type TypeGroupCall = GroupCallDiscarded | GroupCall;
export type TypeInputGroupCall = InputGroupCall; export type TypeInputGroupCall = InputGroupCall | InputGroupCallSlug | InputGroupCallInviteMessage;
export type TypeGroupCallParticipant = GroupCallParticipant; export type TypeGroupCallParticipant = GroupCallParticipant;
export type TypeInlineQueryPeerType = InlineQueryPeerTypeSameBotPM | InlineQueryPeerTypePM | InlineQueryPeerTypeChat | InlineQueryPeerTypeMegagroup | InlineQueryPeerTypeBroadcast | InlineQueryPeerTypeBotPM; export type TypeInlineQueryPeerType = InlineQueryPeerTypeSameBotPM | InlineQueryPeerTypePM | InlineQueryPeerTypeChat | InlineQueryPeerTypeMegagroup | InlineQueryPeerTypeBroadcast | InlineQueryPeerTypeBotPM;
export type TypeChatInviteImporter = ChatInviteImporter; export type TypeChatInviteImporter = ChatInviteImporter;
@ -277,7 +277,7 @@ namespace Api {
export type TypeBotMenuButton = BotMenuButtonDefault | BotMenuButtonCommands | BotMenuButton; export type TypeBotMenuButton = BotMenuButtonDefault | BotMenuButtonCommands | BotMenuButton;
export type TypeNotificationSound = NotificationSoundDefault | NotificationSoundNone | NotificationSoundLocal | NotificationSoundRingtone; export type TypeNotificationSound = NotificationSoundDefault | NotificationSoundNone | NotificationSoundLocal | NotificationSoundRingtone;
export type TypeAttachMenuPeerType = AttachMenuPeerTypeSameBotPM | AttachMenuPeerTypeBotPM | AttachMenuPeerTypePM | AttachMenuPeerTypeChat | AttachMenuPeerTypeBroadcast; export type TypeAttachMenuPeerType = AttachMenuPeerTypeSameBotPM | AttachMenuPeerTypeBotPM | AttachMenuPeerTypePM | AttachMenuPeerTypeChat | AttachMenuPeerTypeBroadcast;
export type TypeInputInvoice = InputInvoiceMessage | InputInvoiceSlug | InputInvoicePremiumGiftCode | InputInvoiceStars | InputInvoiceChatInviteSubscription | InputInvoiceStarGift | InputInvoiceStarGiftUpgrade | InputInvoiceStarGiftTransfer | InputInvoicePremiumGiftStars | InputInvoiceBusinessBotTransferStars; export type TypeInputInvoice = InputInvoiceMessage | InputInvoiceSlug | InputInvoicePremiumGiftCode | InputInvoiceStars | InputInvoiceChatInviteSubscription | InputInvoiceStarGift | InputInvoiceStarGiftUpgrade | InputInvoiceStarGiftTransfer | InputInvoicePremiumGiftStars | InputInvoiceBusinessBotTransferStars | InputInvoiceStarGiftResale;
export type TypeInputStorePaymentPurpose = InputStorePaymentPremiumSubscription | InputStorePaymentGiftPremium | InputStorePaymentPremiumGiftCode | InputStorePaymentPremiumGiveaway | InputStorePaymentStarsTopup | InputStorePaymentStarsGift | InputStorePaymentStarsGiveaway | InputStorePaymentAuthCode; export type TypeInputStorePaymentPurpose = InputStorePaymentPremiumSubscription | InputStorePaymentGiftPremium | InputStorePaymentPremiumGiftCode | InputStorePaymentPremiumGiveaway | InputStorePaymentStarsTopup | InputStorePaymentStarsGift | InputStorePaymentStarsGiveaway | InputStorePaymentAuthCode;
export type TypePaymentFormMethod = PaymentFormMethod; export type TypePaymentFormMethod = PaymentFormMethod;
export type TypeEmojiStatus = EmojiStatusEmpty | EmojiStatus | EmojiStatusCollectible | InputEmojiStatusCollectible; export type TypeEmojiStatus = EmojiStatusEmpty | EmojiStatus | EmojiStatusCollectible | InputEmojiStatusCollectible;
@ -386,12 +386,15 @@ namespace Api {
export type TypeBotVerification = BotVerification; export type TypeBotVerification = BotVerification;
export type TypeStarGiftAttribute = StarGiftAttributeModel | StarGiftAttributePattern | StarGiftAttributeBackdrop | StarGiftAttributeOriginalDetails; export type TypeStarGiftAttribute = StarGiftAttributeModel | StarGiftAttributePattern | StarGiftAttributeBackdrop | StarGiftAttributeOriginalDetails;
export type TypeSavedStarGift = SavedStarGift; export type TypeSavedStarGift = SavedStarGift;
export type TypeInputSavedStarGift = InputSavedStarGiftUser | InputSavedStarGiftChat; export type TypeInputSavedStarGift = InputSavedStarGiftUser | InputSavedStarGiftChat | InputSavedStarGiftSlug;
export type TypePaidReactionPrivacy = PaidReactionPrivacyDefault | PaidReactionPrivacyAnonymous | PaidReactionPrivacyPeer; export type TypePaidReactionPrivacy = PaidReactionPrivacyDefault | PaidReactionPrivacyAnonymous | PaidReactionPrivacyPeer;
export type TypeRequirementToContact = RequirementToContactEmpty | RequirementToContactPremium | RequirementToContactPaidMessages; export type TypeRequirementToContact = RequirementToContactEmpty | RequirementToContactPremium | RequirementToContactPaidMessages;
export type TypeBusinessBotRights = BusinessBotRights; export type TypeBusinessBotRights = BusinessBotRights;
export type TypeDisallowedGiftsSettings = DisallowedGiftsSettings; export type TypeDisallowedGiftsSettings = DisallowedGiftsSettings;
export type TypeSponsoredPeer = SponsoredPeer; export type TypeSponsoredPeer = SponsoredPeer;
export type TypeStarGiftAttributeId = StarGiftAttributeIdModel | StarGiftAttributeIdPattern | StarGiftAttributeIdBackdrop;
export type TypeStarGiftAttributeCounter = StarGiftAttributeCounter;
export type TypePendingSuggestion = PendingSuggestion;
export type TypeResPQ = ResPQ; export type TypeResPQ = ResPQ;
export type TypeP_Q_inner_data = PQInnerData | PQInnerDataDc | PQInnerDataTemp | PQInnerDataTempDc; export type TypeP_Q_inner_data = PQInnerData | PQInnerDataDc | PQInnerDataTemp | PQInnerDataTempDc;
export type TypeServer_DH_Params = ServerDHParamsFail | ServerDHParamsOk; export type TypeServer_DH_Params = ServerDHParamsFail | ServerDHParamsOk;
@ -606,6 +609,7 @@ namespace Api {
export type TypeUniqueStarGift = payments.UniqueStarGift; export type TypeUniqueStarGift = payments.UniqueStarGift;
export type TypeSavedStarGifts = payments.SavedStarGifts; export type TypeSavedStarGifts = payments.SavedStarGifts;
export type TypeStarGiftWithdrawalUrl = payments.StarGiftWithdrawalUrl; export type TypeStarGiftWithdrawalUrl = payments.StarGiftWithdrawalUrl;
export type TypeResaleStarGifts = payments.ResaleStarGifts;
} }
export namespace phone { export namespace phone {
@ -659,6 +663,7 @@ namespace Api {
export type TypePeerStories = stories.PeerStories; export type TypePeerStories = stories.PeerStories;
export type TypeStoryReactionsList = stories.StoryReactionsList; export type TypeStoryReactionsList = stories.StoryReactionsList;
export type TypeFoundStories = stories.FoundStories; export type TypeFoundStories = stories.FoundStories;
export type TypeCanSendStoryCount = stories.CanSendStoryCount;
} }
export namespace premium { export namespace premium {
@ -1704,6 +1709,7 @@ namespace Api {
storiesHiddenMin?: true; storiesHiddenMin?: true;
storiesUnavailable?: true; storiesUnavailable?: true;
signatureProfiles?: true; signatureProfiles?: true;
autotranslation?: true;
id: long; id: long;
accessHash?: long; accessHash?: long;
title: string; title: string;
@ -1751,6 +1757,7 @@ namespace Api {
storiesHiddenMin?: true; storiesHiddenMin?: true;
storiesUnavailable?: true; storiesUnavailable?: true;
signatureProfiles?: true; signatureProfiles?: true;
autotranslation?: true;
id: long; id: long;
accessHash?: long; accessHash?: long;
title: string; title: string;
@ -3187,6 +3194,9 @@ namespace Api {
fromId?: Api.TypePeer; fromId?: Api.TypePeer;
peer?: Api.TypePeer; peer?: Api.TypePeer;
savedId?: long; savedId?: long;
resaleStars?: long;
canTransferAt?: int;
canResellAt?: int;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
upgrade?: true; upgrade?: true;
@ -3199,10 +3209,12 @@ namespace Api {
fromId?: Api.TypePeer; fromId?: Api.TypePeer;
peer?: Api.TypePeer; peer?: Api.TypePeer;
savedId?: long; savedId?: long;
resaleStars?: long;
canTransferAt?: int;
canResellAt?: int;
CONSTRUCTOR_ID: 2900347777; CONSTRUCTOR_ID: 2900347777;
SUBCLASS_OF_ID: 2256589094; SUBCLASS_OF_ID: 2256589094;
className: 'MessageActionStarGiftUnique'; className: 'MessageActionStarGiftUnique';
static fromReader(reader: Reader): MessageActionStarGiftUnique; static fromReader(reader: Reader): MessageActionStarGiftUnique;
} }
export class MessageActionPaidMessagesRefunded extends VirtualClass<{ export class MessageActionPaidMessagesRefunded extends VirtualClass<{
@ -3227,6 +3239,24 @@ namespace Api {
static fromReader(reader: Reader): MessageActionPaidMessagesPrice; static fromReader(reader: Reader): MessageActionPaidMessagesPrice;
} }
export class MessageActionConferenceCall extends VirtualClass<{
// flags: Api.Type;
missed?: true;
active?: true;
video?: true;
callId: long;
duration?: int;
otherParticipants?: Api.TypePeer[];
}> {
// flags: Api.Type;
missed?: true;
active?: true;
video?: true;
callId: long;
duration?: int;
otherParticipants?: Api.TypePeer[];
static fromReader(reader: Reader): MessageActionConferenceCall;
}
export class Dialog extends VirtualClass<{ export class Dialog extends VirtualClass<{
// flags: Api.Type; // flags: Api.Type;
pinned?: true; pinned?: true;
@ -5911,6 +5941,18 @@ namespace Api {
static fromReader(reader: Reader): UpdateSentPhoneCode; static fromReader(reader: Reader): UpdateSentPhoneCode;
} }
export class UpdateGroupCallChainBlocks extends VirtualClass<{
call: Api.TypeInputGroupCall;
subChainId: int;
blocks: bytes[];
nextOffset: int;
}> {
call: Api.TypeInputGroupCall;
subChainId: int;
blocks: bytes[];
nextOffset: int;
static fromReader(reader: Reader): UpdateGroupCallChainBlocks;
}
export class UpdatesTooLong extends VirtualClass<void> { export class UpdatesTooLong extends VirtualClass<void> {
CONSTRUCTOR_ID: 3809980286; CONSTRUCTOR_ID: 3809980286;
SUBCLASS_OF_ID: 2331323052; SUBCLASS_OF_ID: 2331323052;
@ -9858,6 +9900,12 @@ namespace Api {
static fromReader(reader: Reader): PhoneCallDiscardReasonBusy; static fromReader(reader: Reader): PhoneCallDiscardReasonBusy;
} }
export class PhoneCallDiscardReasonMigrateConferenceCall extends VirtualClass<{
slug: string;
}> {
slug: string;
static fromReader(reader: Reader): PhoneCallDiscardReasonMigrateConferenceCall;
}
export class DataJSON extends VirtualClass<{ export class DataJSON extends VirtualClass<{
data: string; data: string;
}> { }> {
@ -10192,7 +10240,6 @@ namespace Api {
participantId: long; participantId: long;
protocol: Api.TypePhoneCallProtocol; protocol: Api.TypePhoneCallProtocol;
receiveDate?: int; receiveDate?: int;
conferenceCall?: Api.TypeInputGroupCall;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
video?: true; video?: true;
@ -10220,7 +10267,6 @@ namespace Api {
participantId: long; participantId: long;
gAHash: bytes; gAHash: bytes;
protocol: Api.TypePhoneCallProtocol; protocol: Api.TypePhoneCallProtocol;
conferenceCall?: Api.TypeInputGroupCall;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
video?: true; video?: true;
@ -10248,7 +10294,6 @@ namespace Api {
participantId: long; participantId: long;
gB: bytes; gB: bytes;
protocol: Api.TypePhoneCallProtocol; protocol: Api.TypePhoneCallProtocol;
conferenceCall?: Api.TypeInputGroupCall;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
video?: true; video?: true;
@ -10270,6 +10315,7 @@ namespace Api {
// flags: Api.Type; // flags: Api.Type;
p2pAllowed?: true; p2pAllowed?: true;
video?: true; video?: true;
conferenceSupported?: true;
id: long; id: long;
accessHash: long; accessHash: long;
date: int; date: int;
@ -10281,11 +10327,11 @@ namespace Api {
connections: Api.TypePhoneConnection[]; connections: Api.TypePhoneConnection[];
startDate: int; startDate: int;
customParameters?: Api.TypeDataJSON; customParameters?: Api.TypeDataJSON;
conferenceCall?: Api.TypeInputGroupCall;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
p2pAllowed?: true; p2pAllowed?: true;
video?: true; video?: true;
conferenceSupported?: true;
id: long; id: long;
accessHash: long; accessHash: long;
date: int; date: int;
@ -10312,7 +10358,6 @@ namespace Api {
id: long; id: long;
reason?: Api.TypePhoneCallDiscardReason; reason?: Api.TypePhoneCallDiscardReason;
duration?: int; duration?: int;
conferenceCall?: Api.TypeInputGroupCall;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
needRating?: true; needRating?: true;
@ -11062,6 +11107,12 @@ namespace Api {
static fromReader(reader: Reader): ChannelAdminLogEventActionParticipantSubExtend; static fromReader(reader: Reader): ChannelAdminLogEventActionParticipantSubExtend;
} }
export class ChannelAdminLogEventActionToggleAutotranslation extends VirtualClass<{
newValue: Bool;
}> {
newValue: Bool;
static fromReader(reader: Reader): ChannelAdminLogEventActionToggleAutotranslation;
}
export class ChannelAdminLogEvent extends VirtualClass<{ export class ChannelAdminLogEvent extends VirtualClass<{
id: long; id: long;
date: int; date: int;
@ -13195,6 +13246,8 @@ namespace Api {
recordVideoActive?: true; recordVideoActive?: true;
rtmpStream?: true; rtmpStream?: true;
listenersHidden?: true; listenersHidden?: true;
conference?: true;
creator?: true;
id: long; id: long;
accessHash: long; accessHash: long;
participantsCount: int; participantsCount: int;
@ -13205,7 +13258,7 @@ namespace Api {
unmutedVideoCount?: int; unmutedVideoCount?: int;
unmutedVideoLimit: int; unmutedVideoLimit: int;
version: int; version: int;
conferenceFromCall?: long; inviteLink?: string;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
joinMuted?: true; joinMuted?: true;
@ -13216,6 +13269,8 @@ namespace Api {
recordVideoActive?: true; recordVideoActive?: true;
rtmpStream?: true; rtmpStream?: true;
listenersHidden?: true; listenersHidden?: true;
conference?: true;
creator?: true;
id: long; id: long;
accessHash: long; accessHash: long;
participantsCount: int; participantsCount: int;
@ -13227,10 +13282,10 @@ namespace Api {
unmutedVideoLimit: int; unmutedVideoLimit: int;
version: int; version: int;
conferenceFromCall?: long; conferenceFromCall?: long;
inviteLink?: string;
CONSTRUCTOR_ID: 3455636451; CONSTRUCTOR_ID: 3455636451;
SUBCLASS_OF_ID: 548729632; SUBCLASS_OF_ID: 548729632;
className: 'GroupCall'; className: 'GroupCall';
static fromReader(reader: Reader): GroupCall; static fromReader(reader: Reader): GroupCall;
} }
export class InputGroupCall extends VirtualClass<{ export class InputGroupCall extends VirtualClass<{
@ -13245,6 +13300,18 @@ namespace Api {
static fromReader(reader: Reader): InputGroupCall; static fromReader(reader: Reader): InputGroupCall;
} }
export class InputGroupCallSlug extends VirtualClass<{
slug: string;
}> {
slug: string;
static fromReader(reader: Reader): InputGroupCallSlug;
}
export class InputGroupCallInviteMessage extends VirtualClass<{
msgId: int;
}> {
msgId: int;
static fromReader(reader: Reader): InputGroupCallInviteMessage;
}
export class GroupCallParticipant extends VirtualClass<{ export class GroupCallParticipant extends VirtualClass<{
// flags: Api.Type; // flags: Api.Type;
muted?: true; muted?: true;
@ -13979,6 +14046,14 @@ namespace Api {
static fromReader(reader: Reader): InputInvoiceBusinessBotTransferStars; static fromReader(reader: Reader): InputInvoiceBusinessBotTransferStars;
} }
export class InputInvoiceStarGiftResale extends VirtualClass<{
slug: string;
toId: Api.TypeInputPeer;
}> {
slug: string;
toId: Api.TypeInputPeer;
static fromReader(reader: Reader): InputInvoiceStarGiftResale;
}
export class InputStorePaymentPremiumSubscription extends VirtualClass<{ export class InputStorePaymentPremiumSubscription extends VirtualClass<{
// flags: Api.Type; // flags: Api.Type;
restore?: true; restore?: true;
@ -16228,6 +16303,8 @@ namespace Api {
gift?: true; gift?: true;
reaction?: true; reaction?: true;
stargiftUpgrade?: true; stargiftUpgrade?: true;
businessTransfer?: true;
stargiftResale?: true;
id: string; id: string;
stars: Api.TypeStarsAmount; stars: Api.TypeStarsAmount;
date: int; date: int;
@ -16257,6 +16334,8 @@ namespace Api {
gift?: true; gift?: true;
reaction?: true; reaction?: true;
stargiftUpgrade?: true; stargiftUpgrade?: true;
businessTransfer?: true;
stargiftResale?: true;
id: string; id: string;
stars: Api.TypeStarsAmount; stars: Api.TypeStarsAmount;
date: int; date: int;
@ -16498,10 +16577,13 @@ namespace Api {
stars: long; stars: long;
availabilityRemains?: int; availabilityRemains?: int;
availabilityTotal?: int; availabilityTotal?: int;
availabilityResale?: long;
convertStars: long; convertStars: long;
firstSaleDate?: int; firstSaleDate?: int;
lastSaleDate?: int; lastSaleDate?: int;
upgradeStars?: long; upgradeStars?: long;
resellMinStars?: long;
title?: string;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
limited?: true; limited?: true;
@ -16512,14 +16594,16 @@ namespace Api {
stars: long; stars: long;
availabilityRemains?: int; availabilityRemains?: int;
availabilityTotal?: int; availabilityTotal?: int;
availabilityResale?: long;
convertStars: long; convertStars: long;
firstSaleDate?: int; firstSaleDate?: int;
lastSaleDate?: int; lastSaleDate?: int;
upgradeStars?: long; upgradeStars?: long;
resellMinStars?: long;
title?: string;
CONSTRUCTOR_ID: 46953416; CONSTRUCTOR_ID: 46953416;
SUBCLASS_OF_ID: 3273414923; SUBCLASS_OF_ID: 3273414923;
className: 'StarGift'; className: 'StarGift';
static fromReader(reader: Reader): StarGift; static fromReader(reader: Reader): StarGift;
} }
export class StarGiftUnique extends VirtualClass<{ export class StarGiftUnique extends VirtualClass<{
@ -16535,6 +16619,7 @@ namespace Api {
availabilityIssued: int; availabilityIssued: int;
availabilityTotal: int; availabilityTotal: int;
giftAddress?: string; giftAddress?: string;
resellStars?: long;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
id: long; id: long;
@ -16548,10 +16633,10 @@ namespace Api {
availabilityIssued: int; availabilityIssued: int;
availabilityTotal: int; availabilityTotal: int;
giftAddress?: string; giftAddress?: string;
resellStars?: long;
CONSTRUCTOR_ID: 1549979985; CONSTRUCTOR_ID: 1549979985;
SUBCLASS_OF_ID: 3273414923; SUBCLASS_OF_ID: 3273414923;
className: 'StarGiftUnique'; className: 'StarGiftUnique';
static fromReader(reader: Reader): StarGiftUnique; static fromReader(reader: Reader): StarGiftUnique;
} }
export class MessageReportOption extends VirtualClass<{ export class MessageReportOption extends VirtualClass<{
@ -16739,6 +16824,7 @@ namespace Api {
} }
export class StarGiftAttributeBackdrop extends VirtualClass<{ export class StarGiftAttributeBackdrop extends VirtualClass<{
name: string; name: string;
backdropId: int;
centerColor: int; centerColor: int;
edgeColor: int; edgeColor: int;
patternColor: int; patternColor: int;
@ -16746,6 +16832,7 @@ namespace Api {
rarityPermille: int; rarityPermille: int;
}> { }> {
name: string; name: string;
backdropId: int;
centerColor: int; centerColor: int;
edgeColor: int; edgeColor: int;
patternColor: int; patternColor: int;
@ -16792,6 +16879,8 @@ namespace Api {
upgradeStars?: long; upgradeStars?: long;
canExportAt?: int; canExportAt?: int;
transferStars?: long; transferStars?: long;
canTransferAt?: int;
canResellAt?: int;
}> { }> {
// flags: Api.Type; // flags: Api.Type;
nameHidden?: true; nameHidden?: true;
@ -16809,10 +16898,11 @@ namespace Api {
upgradeStars?: long; upgradeStars?: long;
canExportAt?: int; canExportAt?: int;
transferStars?: long; transferStars?: long;
canTransferAt?: int;
canResellAt?: int;
CONSTRUCTOR_ID: 1616305061; CONSTRUCTOR_ID: 1616305061;
SUBCLASS_OF_ID: 2385198100; SUBCLASS_OF_ID: 2385198100;
className: 'SavedStarGift'; className: 'SavedStarGift';
static fromReader(reader: Reader): SavedStarGift; static fromReader(reader: Reader): SavedStarGift;
} }
export class InputSavedStarGiftUser extends VirtualClass<{ export class InputSavedStarGiftUser extends VirtualClass<{
@ -16837,6 +16927,12 @@ namespace Api {
static fromReader(reader: Reader): InputSavedStarGiftChat; static fromReader(reader: Reader): InputSavedStarGiftChat;
} }
export class InputSavedStarGiftSlug extends VirtualClass<{
slug: string;
}> {
slug: string;
static fromReader(reader: Reader): InputSavedStarGiftSlug;
}
export class PaidReactionPrivacyDefault extends VirtualClass<void> { export class PaidReactionPrivacyDefault extends VirtualClass<void> {
CONSTRUCTOR_ID: 543872158; CONSTRUCTOR_ID: 543872158;
SUBCLASS_OF_ID: 1708619318; SUBCLASS_OF_ID: 1708619318;
@ -16959,6 +17055,44 @@ namespace Api {
static fromReader(reader: Reader): SponsoredPeer; static fromReader(reader: Reader): SponsoredPeer;
} }
export class StarGiftAttributeIdModel extends VirtualClass<{
documentId: long;
}> {
documentId: long;
static fromReader(reader: Reader): StarGiftAttributeIdModel;
}
export class StarGiftAttributeIdPattern extends VirtualClass<{
documentId: long;
}> {
documentId: long;
static fromReader(reader: Reader): StarGiftAttributeIdPattern;
}
export class StarGiftAttributeIdBackdrop extends VirtualClass<{
backdropId: int;
}> {
backdropId: int;
static fromReader(reader: Reader): StarGiftAttributeIdBackdrop;
}
export class StarGiftAttributeCounter extends VirtualClass<{
attribute: Api.TypeStarGiftAttributeId;
count: int;
}> {
attribute: Api.TypeStarGiftAttributeId;
count: int;
static fromReader(reader: Reader): StarGiftAttributeCounter;
}
export class PendingSuggestion extends VirtualClass<{
suggestion: string;
title: Api.TypeTextWithEntities;
description: Api.TypeTextWithEntities;
url: string;
}> {
suggestion: string;
title: Api.TypeTextWithEntities;
description: Api.TypeTextWithEntities;
url: string;
static fromReader(reader: Reader): PendingSuggestion;
}
export class ResPQ extends VirtualClass<{ export class ResPQ extends VirtualClass<{
nonce: int128; nonce: int128;
serverNonce: int128; serverNonce: int128;
@ -19745,24 +19879,29 @@ namespace Api {
// flags: Api.Type; // flags: Api.Type;
proxy?: true; proxy?: true;
expires: int; expires: int;
peer: Api.TypePeer; peer?: Api.TypePeer;
chats: Api.TypeChat[];
users: Api.TypeUser[];
psaType?: string; psaType?: string;
psaMessage?: string; psaMessage?: string;
pendingSuggestions: string[];
dismissedSuggestions: string[];
customPendingSuggestion?: Api.TypePendingSuggestion;
chats: Api.TypeChat[];
users: Api.TypeUser[];
}> { }> {
// flags: Api.Type; // flags: Api.Type;
proxy?: true; proxy?: true;
expires: int; expires: int;
peer: Api.TypePeer; peer?: Api.TypePeer;
chats: Api.TypeChat[];
users: Api.TypeUser[];
psaType?: string; psaType?: string;
psaMessage?: string; psaMessage?: string;
pendingSuggestions: string[];
dismissedSuggestions: string[];
customPendingSuggestion?: Api.TypePendingSuggestion;
chats: Api.TypeChat[];
users: Api.TypeUser[];
CONSTRUCTOR_ID: 2352576831; CONSTRUCTOR_ID: 2352576831;
SUBCLASS_OF_ID: 2639877442; SUBCLASS_OF_ID: 2639877442;
className: 'PromoData'; className: 'PromoData';
static fromReader(reader: Reader): PromoData; static fromReader(reader: Reader): PromoData;
} }
export class CountryCode extends VirtualClass<{ export class CountryCode extends VirtualClass<{
@ -20922,6 +21061,28 @@ namespace Api {
static fromReader(reader: Reader): StarGiftWithdrawalUrl; static fromReader(reader: Reader): StarGiftWithdrawalUrl;
} }
export class ResaleStarGifts extends VirtualClass<{
// flags: Api.Type;
count: int;
gifts: Api.TypeStarGift[];
nextOffset?: string;
attributes?: Api.TypeStarGiftAttribute[];
attributesHash?: long;
chats: Api.TypeChat[];
counters?: Api.TypeStarGiftAttributeCounter[];
users: Api.TypeUser[];
}> {
// flags: Api.Type;
count: int;
gifts: Api.TypeStarGift[];
nextOffset?: string;
attributes?: Api.TypeStarGiftAttribute[];
attributesHash?: long;
chats: Api.TypeChat[];
counters?: Api.TypeStarGiftAttributeCounter[];
users: Api.TypeUser[];
static fromReader(reader: Reader): ResaleStarGifts;
}
} }
export namespace phone { export namespace phone {
@ -21531,6 +21692,12 @@ namespace Api {
static fromReader(reader: Reader): FoundStories; static fromReader(reader: Reader): FoundStories;
} }
export class CanSendStoryCount extends VirtualClass<{
countRemains: int;
}> {
countRemains: int;
static fromReader(reader: Reader): CanSendStoryCount;
}
} }
export namespace premium { export namespace premium {
@ -25991,6 +26158,13 @@ namespace Api {
channel: Api.TypeInputChannel; channel: Api.TypeInputChannel;
sendPaidMessagesStars: long; sendPaidMessagesStars: long;
} }
export class ToggleAutotranslation extends Request<Partial<{
channel: Api.TypeInputChannel;
enabled: Bool;
}>, Api.TypeUpdates> {
channel: Api.TypeInputChannel;
enabled: Bool;
}
} }
export namespace bots { export namespace bots {
@ -26607,6 +26781,32 @@ namespace Api {
}>, Bool> { }>, Bool> {
purpose: Api.TypeInputStorePaymentPurpose; purpose: Api.TypeInputStorePaymentPurpose;
} }
export class GetResaleStarGifts extends Request<Partial<{
// flags: Api.Type;
sortByPrice?: true;
sortByNum?: true;
attributesHash?: long;
giftId: long;
attributes?: Api.TypeStarGiftAttributeId[];
offset: string;
limit: int;
}>, payments.TypeResaleStarGifts> {
// flags: Api.Type;
sortByPrice?: true;
sortByNum?: true;
attributesHash?: long;
giftId: long;
attributes?: Api.TypeStarGiftAttributeId[];
offset: string;
limit: int;
}
export class UpdateStarGiftPrice extends Request<Partial<{
stargift: Api.TypeInputSavedStarGift;
resellStars: long;
}>, Api.TypeUpdates> {
stargift: Api.TypeInputSavedStarGift;
resellStars: long;
}
} }
export namespace stickers { export namespace stickers {
@ -26713,7 +26913,6 @@ namespace Api {
// flags: Api.Type; // flags: Api.Type;
video?: true; video?: true;
userId: Api.TypeInputUser; userId: Api.TypeInputUser;
conferenceCall?: Api.TypeInputGroupCall;
randomId: int; randomId: int;
gAHash: bytes; gAHash: bytes;
protocol: Api.TypePhoneCallProtocol; protocol: Api.TypePhoneCallProtocol;
@ -26721,7 +26920,6 @@ namespace Api {
// flags: Api.Type; // flags: Api.Type;
video?: true; video?: true;
userId: Api.TypeInputUser; userId: Api.TypeInputUser;
conferenceCall?: Api.TypeInputGroupCall;
randomId: int; randomId: int;
gAHash: bytes; gAHash: bytes;
protocol: Api.TypePhoneCallProtocol; protocol: Api.TypePhoneCallProtocol;
@ -26815,7 +27013,8 @@ namespace Api {
call: Api.TypeInputGroupCall; call: Api.TypeInputGroupCall;
joinAs: Api.TypeInputPeer; joinAs: Api.TypeInputPeer;
inviteHash?: string; inviteHash?: string;
keyFingerprint?: long; publicKey?: int256;
block?: bytes;
params: Api.TypeDataJSON; params: Api.TypeDataJSON;
}>, Api.TypeUpdates> { }>, Api.TypeUpdates> {
// flags: Api.Type; // flags: Api.Type;
@ -26824,7 +27023,8 @@ namespace Api {
call: Api.TypeInputGroupCall; call: Api.TypeInputGroupCall;
joinAs: Api.TypeInputPeer; joinAs: Api.TypeInputPeer;
inviteHash?: string; inviteHash?: string;
keyFingerprint?: long; publicKey?: int256;
block?: bytes;
params: Api.TypeDataJSON; params: Api.TypeDataJSON;
} }
export class LeaveGroupCall extends Request<Partial<{ export class LeaveGroupCall extends Request<Partial<{
@ -26992,11 +27192,72 @@ namespace Api {
file: Api.TypeInputFile; file: Api.TypeInputFile;
} }
export class CreateConferenceCall extends Request<Partial<{ export class CreateConferenceCall extends Request<Partial<{
peer: Api.TypeInputPhoneCall; // flags: Api.Type;
keyFingerprint: long; muted?: true;
}>, phone.TypePhoneCall> { videoStopped?: true;
peer: Api.TypeInputPhoneCall; join?: true;
keyFingerprint: long; randomId: int;
publicKey?: int256;
block?: bytes;
params?: Api.TypeDataJSON;
}>, Api.TypeUpdates> {
// flags: Api.Type;
muted?: true;
videoStopped?: true;
join?: true;
randomId: int;
publicKey?: int256;
block?: bytes;
params?: Api.TypeDataJSON;
}
export class DeleteConferenceCallParticipants extends Request<Partial<{
// flags: Api.Type;
onlyLeft?: true;
kick?: true;
call: Api.TypeInputGroupCall;
ids: long[];
block: bytes;
}>, Api.TypeUpdates> {
// flags: Api.Type;
onlyLeft?: true;
kick?: true;
call: Api.TypeInputGroupCall;
ids: long[];
block: bytes;
}
export class SendConferenceCallBroadcast extends Request<Partial<{
call: Api.TypeInputGroupCall;
block: bytes;
}>, Api.TypeUpdates> {
call: Api.TypeInputGroupCall;
block: bytes;
}
export class InviteConferenceCallParticipant extends Request<Partial<{
// flags: Api.Type;
video?: true;
call: Api.TypeInputGroupCall;
userId: Api.TypeInputUser;
}>, Api.TypeUpdates> {
// flags: Api.Type;
video?: true;
call: Api.TypeInputGroupCall;
userId: Api.TypeInputUser;
}
export class DeclineConferenceCallInvite extends Request<Partial<{
msgId: int;
}>, Api.TypeUpdates> {
msgId: int;
}
export class GetGroupCallChainBlocks extends Request<Partial<{
call: Api.TypeInputGroupCall;
subChainId: int;
offset: int;
limit: int;
}>, Api.TypeUpdates> {
call: Api.TypeInputGroupCall;
subChainId: int;
offset: int;
limit: int;
} }
} }
@ -27228,7 +27489,7 @@ namespace Api {
export namespace stories { export namespace stories {
export class CanSendStory extends Request<Partial<{ export class CanSendStory extends Request<Partial<{
peer: Api.TypeInputPeer; peer: Api.TypeInputPeer;
}>, Bool> { }>, stories.TypeCanSendStoryCount> {
peer: Api.TypeInputPeer; peer: Api.TypeInputPeer;
} }
export class SendStory extends Request<Partial<{ export class SendStory extends Request<Partial<{
@ -27564,11 +27825,11 @@ namespace Api {
| photos.UpdateProfilePhoto | photos.UploadProfilePhoto | photos.DeletePhotos | photos.GetUserPhotos | photos.UploadContactProfilePhoto | photos.UpdateProfilePhoto | photos.UploadProfilePhoto | photos.DeletePhotos | photos.GetUserPhotos | photos.UploadContactProfilePhoto
| upload.SaveFilePart | upload.GetFile | upload.SaveBigFilePart | upload.GetWebFile | upload.GetCdnFile | upload.ReuploadCdnFile | upload.GetCdnFileHashes | upload.GetFileHashes | upload.SaveFilePart | upload.GetFile | upload.SaveBigFilePart | upload.GetWebFile | upload.GetCdnFile | upload.ReuploadCdnFile | upload.GetCdnFileHashes | upload.GetFileHashes
| help.GetConfig | help.GetNearestDc | help.GetAppUpdate | help.GetInviteText | help.GetSupport | help.SetBotUpdatesStatus | help.GetCdnConfig | help.GetRecentMeUrls | help.GetTermsOfServiceUpdate | help.AcceptTermsOfService | help.GetDeepLinkInfo | help.GetAppConfig | help.SaveAppLog | help.GetPassportConfig | help.GetSupportName | help.GetUserInfo | help.EditUserInfo | help.GetPromoData | help.HidePromoData | help.DismissSuggestion | help.GetCountriesList | help.GetPremiumPromo | help.GetPeerColors | help.GetPeerProfileColors | help.GetTimezonesList | help.GetConfig | help.GetNearestDc | help.GetAppUpdate | help.GetInviteText | help.GetSupport | help.SetBotUpdatesStatus | help.GetCdnConfig | help.GetRecentMeUrls | help.GetTermsOfServiceUpdate | help.AcceptTermsOfService | help.GetDeepLinkInfo | help.GetAppConfig | help.SaveAppLog | help.GetPassportConfig | help.GetSupportName | help.GetUserInfo | help.EditUserInfo | help.GetPromoData | help.HidePromoData | help.DismissSuggestion | help.GetCountriesList | help.GetPremiumPromo | help.GetPeerColors | help.GetPeerProfileColors | help.GetTimezonesList
| channels.ReadHistory | channels.DeleteMessages | channels.ReportSpam | channels.GetMessages | channels.GetParticipants | channels.GetParticipant | channels.GetChannels | channels.GetFullChannel | channels.CreateChannel | channels.EditAdmin | channels.EditTitle | channels.EditPhoto | channels.CheckUsername | channels.UpdateUsername | channels.JoinChannel | channels.LeaveChannel | channels.InviteToChannel | channels.DeleteChannel | channels.ExportMessageLink | channels.ToggleSignatures | channels.GetAdminedPublicChannels | channels.EditBanned | channels.GetAdminLog | channels.SetStickers | channels.ReadMessageContents | channels.DeleteHistory | channels.TogglePreHistoryHidden | channels.GetLeftChannels | channels.GetGroupsForDiscussion | channels.SetDiscussionGroup | channels.EditCreator | channels.EditLocation | channels.ToggleSlowMode | channels.GetInactiveChannels | channels.ConvertToGigagroup | channels.GetSendAs | channels.DeleteParticipantHistory | channels.ToggleJoinToSend | channels.ToggleJoinRequest | channels.ReorderUsernames | channels.ToggleUsername | channels.DeactivateAllUsernames | channels.ToggleForum | channels.CreateForumTopic | channels.GetForumTopics | channels.GetForumTopicsByID | channels.EditForumTopic | channels.UpdatePinnedForumTopic | channels.DeleteTopicHistory | channels.ReorderPinnedForumTopics | channels.ToggleAntiSpam | channels.ReportAntiSpamFalsePositive | channels.ToggleParticipantsHidden | channels.UpdateColor | channels.ToggleViewForumAsMessages | channels.GetChannelRecommendations | channels.UpdateEmojiStatus | channels.SetBoostsToUnblockRestrictions | channels.SetEmojiStickers | channels.RestrictSponsoredMessages | channels.SearchPosts | channels.UpdatePaidMessagesPrice | channels.ReadHistory | channels.DeleteMessages | channels.ReportSpam | channels.GetMessages | channels.GetParticipants | channels.GetParticipant | channels.GetChannels | channels.GetFullChannel | channels.CreateChannel | channels.EditAdmin | channels.EditTitle | channels.EditPhoto | channels.CheckUsername | channels.UpdateUsername | channels.JoinChannel | channels.LeaveChannel | channels.InviteToChannel | channels.DeleteChannel | channels.ExportMessageLink | channels.ToggleSignatures | channels.GetAdminedPublicChannels | channels.EditBanned | channels.GetAdminLog | channels.SetStickers | channels.ReadMessageContents | channels.DeleteHistory | channels.TogglePreHistoryHidden | channels.GetLeftChannels | channels.GetGroupsForDiscussion | channels.SetDiscussionGroup | channels.EditCreator | channels.EditLocation | channels.ToggleSlowMode | channels.GetInactiveChannels | channels.ConvertToGigagroup | channels.GetSendAs | channels.DeleteParticipantHistory | channels.ToggleJoinToSend | channels.ToggleJoinRequest | channels.ReorderUsernames | channels.ToggleUsername | channels.DeactivateAllUsernames | channels.ToggleForum | channels.CreateForumTopic | channels.GetForumTopics | channels.GetForumTopicsByID | channels.EditForumTopic | channels.UpdatePinnedForumTopic | channels.DeleteTopicHistory | channels.ReorderPinnedForumTopics | channels.ToggleAntiSpam | channels.ReportAntiSpamFalsePositive | channels.ToggleParticipantsHidden | channels.UpdateColor | channels.ToggleViewForumAsMessages | channels.GetChannelRecommendations | channels.UpdateEmojiStatus | channels.SetBoostsToUnblockRestrictions | channels.SetEmojiStickers | channels.RestrictSponsoredMessages | channels.SearchPosts | channels.UpdatePaidMessagesPrice | channels.ToggleAutotranslation
| bots.SendCustomRequest | bots.AnswerWebhookJSONQuery | bots.SetBotCommands | bots.ResetBotCommands | bots.GetBotCommands | bots.SetBotMenuButton | bots.GetBotMenuButton | bots.SetBotBroadcastDefaultAdminRights | bots.SetBotGroupDefaultAdminRights | bots.SetBotInfo | bots.GetBotInfo | bots.ReorderUsernames | bots.ToggleUsername | bots.CanSendMessage | bots.AllowSendMessage | bots.InvokeWebViewCustomMethod | bots.GetPopularAppBots | bots.AddPreviewMedia | bots.EditPreviewMedia | bots.DeletePreviewMedia | bots.ReorderPreviewMedias | bots.GetPreviewInfo | bots.GetPreviewMedias | bots.UpdateUserEmojiStatus | bots.ToggleUserEmojiStatusPermission | bots.CheckDownloadFileParams | bots.GetAdminedBots | bots.UpdateStarRefProgram | bots.SetCustomVerification | bots.GetBotRecommendations | bots.SendCustomRequest | bots.AnswerWebhookJSONQuery | bots.SetBotCommands | bots.ResetBotCommands | bots.GetBotCommands | bots.SetBotMenuButton | bots.GetBotMenuButton | bots.SetBotBroadcastDefaultAdminRights | bots.SetBotGroupDefaultAdminRights | bots.SetBotInfo | bots.GetBotInfo | bots.ReorderUsernames | bots.ToggleUsername | bots.CanSendMessage | bots.AllowSendMessage | bots.InvokeWebViewCustomMethod | bots.GetPopularAppBots | bots.AddPreviewMedia | bots.EditPreviewMedia | bots.DeletePreviewMedia | bots.ReorderPreviewMedias | bots.GetPreviewInfo | bots.GetPreviewMedias | bots.UpdateUserEmojiStatus | bots.ToggleUserEmojiStatusPermission | bots.CheckDownloadFileParams | bots.GetAdminedBots | bots.UpdateStarRefProgram | bots.SetCustomVerification | bots.GetBotRecommendations
| payments.GetPaymentForm | payments.GetPaymentReceipt | payments.ValidateRequestedInfo | payments.SendPaymentForm | payments.GetSavedInfo | payments.ClearSavedInfo | payments.GetBankCardData | payments.ExportInvoice | payments.AssignAppStoreTransaction | payments.AssignPlayMarketTransaction | payments.GetPremiumGiftCodeOptions | payments.CheckGiftCode | payments.ApplyGiftCode | payments.GetGiveawayInfo | payments.LaunchPrepaidGiveaway | payments.GetStarsTopupOptions | payments.GetStarsStatus | payments.GetStarsTransactions | payments.SendStarsForm | payments.RefundStarsCharge | payments.GetStarsRevenueStats | payments.GetStarsRevenueWithdrawalUrl | payments.GetStarsRevenueAdsAccountUrl | payments.GetStarsTransactionsByID | payments.GetStarsGiftOptions | payments.GetStarsSubscriptions | payments.ChangeStarsSubscription | payments.FulfillStarsSubscription | payments.GetStarsGiveawayOptions | payments.GetStarGifts | payments.SaveStarGift | payments.ConvertStarGift | payments.BotCancelStarsSubscription | payments.GetConnectedStarRefBots | payments.GetConnectedStarRefBot | payments.GetSuggestedStarRefBots | payments.ConnectStarRefBot | payments.EditConnectedStarRefBot | payments.GetStarGiftUpgradePreview | payments.UpgradeStarGift | payments.TransferStarGift | payments.GetUniqueStarGift | payments.GetSavedStarGifts | payments.GetSavedStarGift | payments.GetStarGiftWithdrawalUrl | payments.ToggleChatStarGiftNotifications | payments.ToggleStarGiftsPinnedToTop | payments.CanPurchaseStore | payments.GetPaymentForm | payments.GetPaymentReceipt | payments.ValidateRequestedInfo | payments.SendPaymentForm | payments.GetSavedInfo | payments.ClearSavedInfo | payments.GetBankCardData | payments.ExportInvoice | payments.AssignAppStoreTransaction | payments.AssignPlayMarketTransaction | payments.GetPremiumGiftCodeOptions | payments.CheckGiftCode | payments.ApplyGiftCode | payments.GetGiveawayInfo | payments.LaunchPrepaidGiveaway | payments.GetStarsTopupOptions | payments.GetStarsStatus | payments.GetStarsTransactions | payments.SendStarsForm | payments.RefundStarsCharge | payments.GetStarsRevenueStats | payments.GetStarsRevenueWithdrawalUrl | payments.GetStarsRevenueAdsAccountUrl | payments.GetStarsTransactionsByID | payments.GetStarsGiftOptions | payments.GetStarsSubscriptions | payments.ChangeStarsSubscription | payments.FulfillStarsSubscription | payments.GetStarsGiveawayOptions | payments.GetStarGifts | payments.SaveStarGift | payments.ConvertStarGift | payments.BotCancelStarsSubscription | payments.GetConnectedStarRefBots | payments.GetConnectedStarRefBot | payments.GetSuggestedStarRefBots | payments.ConnectStarRefBot | payments.EditConnectedStarRefBot | payments.GetStarGiftUpgradePreview | payments.UpgradeStarGift | payments.TransferStarGift | payments.GetUniqueStarGift | payments.GetSavedStarGifts | payments.GetSavedStarGift | payments.GetStarGiftWithdrawalUrl | payments.ToggleChatStarGiftNotifications | payments.ToggleStarGiftsPinnedToTop | payments.CanPurchaseStore | payments.GetResaleStarGifts | payments.UpdateStarGiftPrice
| stickers.CreateStickerSet | stickers.RemoveStickerFromSet | stickers.ChangeStickerPosition | stickers.AddStickerToSet | stickers.SetStickerSetThumb | stickers.CheckShortName | stickers.SuggestShortName | stickers.ChangeSticker | stickers.RenameStickerSet | stickers.DeleteStickerSet | stickers.ReplaceSticker | stickers.CreateStickerSet | stickers.RemoveStickerFromSet | stickers.ChangeStickerPosition | stickers.AddStickerToSet | stickers.SetStickerSetThumb | stickers.CheckShortName | stickers.SuggestShortName | stickers.ChangeSticker | stickers.RenameStickerSet | stickers.DeleteStickerSet | stickers.ReplaceSticker
| phone.GetCallConfig | phone.RequestCall | phone.AcceptCall | phone.ConfirmCall | phone.ReceivedCall | phone.DiscardCall | phone.SetCallRating | phone.SaveCallDebug | phone.SendSignalingData | phone.CreateGroupCall | phone.JoinGroupCall | phone.LeaveGroupCall | phone.InviteToGroupCall | phone.DiscardGroupCall | phone.ToggleGroupCallSettings | phone.GetGroupCall | phone.GetGroupParticipants | phone.CheckGroupCall | phone.ToggleGroupCallRecord | phone.EditGroupCallParticipant | phone.EditGroupCallTitle | phone.GetGroupCallJoinAs | phone.ExportGroupCallInvite | phone.ToggleGroupCallStartSubscription | phone.StartScheduledGroupCall | phone.SaveDefaultGroupCallJoinAs | phone.JoinGroupCallPresentation | phone.LeaveGroupCallPresentation | phone.GetGroupCallStreamChannels | phone.GetGroupCallStreamRtmpUrl | phone.SaveCallLog | phone.CreateConferenceCall | phone.GetCallConfig | phone.RequestCall | phone.AcceptCall | phone.ConfirmCall | phone.ReceivedCall | phone.DiscardCall | phone.SetCallRating | phone.SaveCallDebug | phone.SendSignalingData | phone.CreateGroupCall | phone.JoinGroupCall | phone.LeaveGroupCall | phone.InviteToGroupCall | phone.DiscardGroupCall | phone.ToggleGroupCallSettings | phone.GetGroupCall | phone.GetGroupParticipants | phone.CheckGroupCall | phone.ToggleGroupCallRecord | phone.EditGroupCallParticipant | phone.EditGroupCallTitle | phone.GetGroupCallJoinAs | phone.ExportGroupCallInvite | phone.ToggleGroupCallStartSubscription | phone.StartScheduledGroupCall | phone.SaveDefaultGroupCallJoinAs | phone.JoinGroupCallPresentation | phone.LeaveGroupCallPresentation | phone.GetGroupCallStreamChannels | phone.GetGroupCallStreamRtmpUrl | phone.SaveCallLog | phone.CreateConferenceCall | phone.DeleteConferenceCallParticipants | phone.SendConferenceCallBroadcast | phone.InviteConferenceCallParticipant | phone.DeclineConferenceCallInvite | phone.GetGroupCallChainBlocks
| langpack.GetLangPack | langpack.GetStrings | langpack.GetDifference | langpack.GetLanguages | langpack.GetLanguage | langpack.GetLangPack | langpack.GetStrings | langpack.GetDifference | langpack.GetLanguages | langpack.GetLanguage
| folders.EditPeerFolders | folders.EditPeerFolders
| stats.GetBroadcastStats | stats.LoadAsyncGraph | stats.GetMegagroupStats | stats.GetMessagePublicForwards | stats.GetMessageStats | stats.GetStoryStats | stats.GetStoryPublicForwards | stats.GetBroadcastRevenueStats | stats.GetBroadcastRevenueWithdrawalUrl | stats.GetBroadcastRevenueTransactions | stats.GetBroadcastStats | stats.LoadAsyncGraph | stats.GetMegagroupStats | stats.GetMessagePublicForwards | stats.GetMessageStats | stats.GetStoryStats | stats.GetStoryPublicForwards | stats.GetBroadcastRevenueStats | stats.GetBroadcastRevenueWithdrawalUrl | stats.GetBroadcastRevenueTransactions

View File

@ -80,7 +80,7 @@ userStatusLastMonth#65899777 flags:# by_me:flags.0?true = UserStatus;
chatEmpty#29562865 id:long = Chat; chatEmpty#29562865 id:long = Chat;
chat#41cbf256 flags:# creator:flags.0?true left:flags.2?true deactivated:flags.5?true call_active:flags.23?true call_not_empty:flags.24?true noforwards:flags.25?true id:long title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; chat#41cbf256 flags:# creator:flags.0?true left:flags.2?true deactivated:flags.5?true call_active:flags.23?true call_not_empty:flags.24?true noforwards:flags.25?true id:long title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat;
chatForbidden#6592a1a7 id:long title:string = Chat; chatForbidden#6592a1a7 id:long title:string = Chat;
channel#7482147e 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 signature_profiles:flags2.12?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector<RestrictionReason> 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<Username> stories_max_id:flags2.4?int color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int subscription_until_date:flags2.11?int bot_verification_icon:flags2.13?long send_paid_messages_stars:flags2.14?long = Chat; channel#7482147e 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 signature_profiles:flags2.12?true autotranslation:flags2.15?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector<RestrictionReason> 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<Username> stories_max_id:flags2.4?int color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int subscription_until_date:flags2.11?int bot_verification_icon:flags2.13?long send_paid_messages_stars:flags2.14?long = 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; 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#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<BotInfo> 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<long> available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = 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<BotInfo> 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<long> available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = ChatFull;
channelFull#52d6806b 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 paid_media_allowed:flags2.14?true can_view_stars_revenue:flags2.15?true paid_reactions_available:flags2.16?true stargifts_available:flags2.19?true paid_messages_available:flags2.20?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<BotInfo> 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<string> groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector<long> 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 bot_verification:flags2.17?BotVerification stargifts_count:flags2.18?int = ChatFull; channelFull#52d6806b 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 paid_media_allowed:flags2.14?true can_view_stars_revenue:flags2.15?true paid_reactions_available:flags2.16?true stargifts_available:flags2.19?true paid_messages_available:flags2.20?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<BotInfo> 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<string> groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector<long> 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 bot_verification:flags2.17?BotVerification stargifts_count:flags2.18?int = ChatFull;
@ -158,9 +158,10 @@ messageActionPaymentRefunded#41b3e202 flags:# peer:Peer currency:string total_am
messageActionGiftStars#45d5b021 flags:# currency:string amount:long stars:long crypto_currency:flags.0?string crypto_amount:flags.0?long transaction_id:flags.1?string = MessageAction; messageActionGiftStars#45d5b021 flags:# currency:string amount:long stars:long crypto_currency:flags.0?string crypto_amount:flags.0?long transaction_id:flags.1?string = MessageAction;
messageActionPrizeStars#b00c47a2 flags:# unclaimed:flags.0?true stars:long transaction_id:string boost_peer:Peer giveaway_msg_id:int = MessageAction; messageActionPrizeStars#b00c47a2 flags:# unclaimed:flags.0?true stars:long transaction_id:string boost_peer:Peer giveaway_msg_id:int = MessageAction;
messageActionStarGift#4717e8a4 flags:# name_hidden:flags.0?true saved:flags.2?true converted:flags.3?true upgraded:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true gift:StarGift message:flags.1?TextWithEntities convert_stars:flags.4?long upgrade_msg_id:flags.5?int upgrade_stars:flags.8?long from_id:flags.11?Peer peer:flags.12?Peer saved_id:flags.12?long = MessageAction; messageActionStarGift#4717e8a4 flags:# name_hidden:flags.0?true saved:flags.2?true converted:flags.3?true upgraded:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true gift:StarGift message:flags.1?TextWithEntities convert_stars:flags.4?long upgrade_msg_id:flags.5?int upgrade_stars:flags.8?long from_id:flags.11?Peer peer:flags.12?Peer saved_id:flags.12?long = MessageAction;
messageActionStarGiftUnique#acdfcb81 flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long = MessageAction; messageActionStarGiftUnique#2e3ae60e flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long resale_stars:flags.8?long can_transfer_at:flags.9?int can_resell_at:flags.10?int = MessageAction;
messageActionPaidMessagesRefunded#ac1f1fcd count:int stars:long = MessageAction; messageActionPaidMessagesRefunded#ac1f1fcd count:int stars:long = MessageAction;
messageActionPaidMessagesPrice#bcd71419 stars:long = MessageAction; messageActionPaidMessagesPrice#bcd71419 stars:long = MessageAction;
messageActionConferenceCall#2ffe2f7a flags:# missed:flags.0?true active:flags.1?true video:flags.4?true call_id:long duration:flags.2?int other_participants:flags.3?Vector<Peer> = MessageAction;
dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog; dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog;
dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog; dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog;
photoEmpty#2331b22d id:long = Photo; photoEmpty#2331b22d id:long = Photo;
@ -378,6 +379,7 @@ updateStarsRevenueStatus#a584b019 peer:Peer status:StarsRevenueStatus = Update;
updateBotPurchasedPaidMedia#283bd312 user_id:long payload:string qts:int = Update; updateBotPurchasedPaidMedia#283bd312 user_id:long payload:string qts:int = Update;
updatePaidReactionPrivacy#8b725fce private:PaidReactionPrivacy = Update; updatePaidReactionPrivacy#8b725fce private:PaidReactionPrivacy = Update;
updateSentPhoneCode#504aa18f sent_code:auth.SentCode = Update; updateSentPhoneCode#504aa18f sent_code:auth.SentCode = Update;
updateGroupCallChainBlocks#a477288f call:InputGroupCall sub_chain_id:int blocks:Vector<bytes> next_offset:int = Update;
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; 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.differenceEmpty#5d75a138 date:int seq:int = updates.Difference;
updates.difference#f49ca0 new_messages:Vector<Message> new_encrypted_messages:Vector<EncryptedMessage> other_updates:Vector<Update> chats:Vector<Chat> users:Vector<User> state:updates.State = updates.Difference; updates.difference#f49ca0 new_messages:Vector<Message> new_encrypted_messages:Vector<EncryptedMessage> other_updates:Vector<Update> chats:Vector<Chat> users:Vector<User> state:updates.State = updates.Difference;
@ -750,6 +752,7 @@ phoneCallDiscardReasonMissed#85e42301 = PhoneCallDiscardReason;
phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason; phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason;
phoneCallDiscardReasonHangup#57adc690 = PhoneCallDiscardReason; phoneCallDiscardReasonHangup#57adc690 = PhoneCallDiscardReason;
phoneCallDiscardReasonBusy#faf7e8c9 = PhoneCallDiscardReason; phoneCallDiscardReasonBusy#faf7e8c9 = PhoneCallDiscardReason;
phoneCallDiscardReasonMigrateConferenceCall#9fbbf1f7 slug:string = PhoneCallDiscardReason;
dataJSON#7d748d04 data:string = DataJSON; dataJSON#7d748d04 data:string = DataJSON;
labeledPrice#cb296bf8 label:string amount:long = LabeledPrice; labeledPrice#cb296bf8 label:string amount:long = LabeledPrice;
invoice#49ee584 flags:# test:flags.0?true name_requested:flags.1?true phone_requested:flags.2?true email_requested:flags.3?true shipping_address_requested:flags.4?true flexible:flags.5?true phone_to_provider:flags.6?true email_to_provider:flags.7?true recurring:flags.9?true currency:string prices:Vector<LabeledPrice> max_tip_amount:flags.8?long suggested_tip_amounts:flags.8?Vector<long> terms_url:flags.10?string subscription_period:flags.11?int = Invoice; invoice#49ee584 flags:# test:flags.0?true name_requested:flags.1?true phone_requested:flags.2?true email_requested:flags.3?true shipping_address_requested:flags.4?true flexible:flags.5?true phone_to_provider:flags.6?true email_to_provider:flags.7?true recurring:flags.9?true currency:string prices:Vector<LabeledPrice> max_tip_amount:flags.8?long suggested_tip_amounts:flags.8?Vector<long> terms_url:flags.10?string subscription_period:flags.11?int = Invoice;
@ -782,11 +785,11 @@ shippingOption#b6213cdf id:string title:string prices:Vector<LabeledPrice> = Shi
inputStickerSetItem#32da9e9c flags:# document:InputDocument emoji:string mask_coords:flags.0?MaskCoords keywords:flags.1?string = InputStickerSetItem; inputStickerSetItem#32da9e9c flags:# document:InputDocument emoji:string mask_coords:flags.0?MaskCoords keywords:flags.1?string = InputStickerSetItem;
inputPhoneCall#1e36fded id:long access_hash:long = InputPhoneCall; inputPhoneCall#1e36fded id:long access_hash:long = InputPhoneCall;
phoneCallEmpty#5366c915 id:long = PhoneCall; phoneCallEmpty#5366c915 id:long = PhoneCall;
phoneCallWaiting#eed42858 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long protocol:PhoneCallProtocol receive_date:flags.0?int conference_call:flags.8?InputGroupCall = PhoneCall; phoneCallWaiting#c5226f17 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long protocol:PhoneCallProtocol receive_date:flags.0?int = PhoneCall;
phoneCallRequested#45361c63 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_hash:bytes protocol:PhoneCallProtocol conference_call:flags.8?InputGroupCall = PhoneCall; phoneCallRequested#14b0ed0c flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_hash:bytes protocol:PhoneCallProtocol = PhoneCall;
phoneCallAccepted#22fd7181 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_b:bytes protocol:PhoneCallProtocol conference_call:flags.8?InputGroupCall = PhoneCall; phoneCallAccepted#3660c311 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_b:bytes protocol:PhoneCallProtocol = PhoneCall;
phoneCall#3ba5940c flags:# p2p_allowed:flags.5?true video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_or_b:bytes key_fingerprint:long protocol:PhoneCallProtocol connections:Vector<PhoneConnection> start_date:int custom_parameters:flags.7?DataJSON conference_call:flags.8?InputGroupCall = PhoneCall; phoneCall#30535af5 flags:# p2p_allowed:flags.5?true video:flags.6?true conference_supported:flags.8?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_or_b:bytes key_fingerprint:long protocol:PhoneCallProtocol connections:Vector<PhoneConnection> start_date:int custom_parameters:flags.7?DataJSON = PhoneCall;
phoneCallDiscarded#f9d25503 flags:# need_rating:flags.2?true need_debug:flags.3?true video:flags.6?true id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int conference_call:flags.8?InputGroupCall = PhoneCall; phoneCallDiscarded#50ca4de1 flags:# need_rating:flags.2?true need_debug:flags.3?true video:flags.6?true id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = PhoneCall;
phoneConnection#9cc123c7 flags:# tcp:flags.0?true id:long ip:string ipv6:string port:int peer_tag:bytes = PhoneConnection; phoneConnection#9cc123c7 flags:# tcp:flags.0?true id:long ip:string ipv6:string port:int peer_tag:bytes = PhoneConnection;
phoneConnectionWebrtc#635fe375 flags:# turn:flags.0?true stun:flags.1?true id:long ip:string ipv6:string port:int username:string password:string = PhoneConnection; phoneConnectionWebrtc#635fe375 flags:# turn:flags.0?true stun:flags.1?true id:long ip:string ipv6:string port:int username:string password:string = PhoneConnection;
phoneCallProtocol#fc878fc8 flags:# udp_p2p:flags.0?true udp_reflector:flags.1?true min_layer:int max_layer:int library_versions:Vector<string> = PhoneCallProtocol; phoneCallProtocol#fc878fc8 flags:# udp_p2p:flags.0?true udp_reflector:flags.1?true min_layer:int max_layer:int library_versions:Vector<string> = PhoneCallProtocol;
@ -850,6 +853,7 @@ channelAdminLogEventActionChangeEmojiStatus#3ea9feb1 prev_value:EmojiStatus new_
channelAdminLogEventActionChangeEmojiStickerSet#46d840ab prev_stickerset:InputStickerSet new_stickerset:InputStickerSet = ChannelAdminLogEventAction; channelAdminLogEventActionChangeEmojiStickerSet#46d840ab prev_stickerset:InputStickerSet new_stickerset:InputStickerSet = ChannelAdminLogEventAction;
channelAdminLogEventActionToggleSignatureProfiles#60a79c79 new_value:Bool = ChannelAdminLogEventAction; channelAdminLogEventActionToggleSignatureProfiles#60a79c79 new_value:Bool = ChannelAdminLogEventAction;
channelAdminLogEventActionParticipantSubExtend#64642db3 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction; channelAdminLogEventActionParticipantSubExtend#64642db3 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction;
channelAdminLogEventActionToggleAutotranslation#c517f77e new_value:Bool = ChannelAdminLogEventAction;
channelAdminLogEvent#1fad68cd id:long date:int user_id:long action:ChannelAdminLogEventAction = ChannelAdminLogEvent; channelAdminLogEvent#1fad68cd id:long date:int user_id:long action:ChannelAdminLogEventAction = ChannelAdminLogEvent;
channels.adminLogResults#ed8af74d events:Vector<ChannelAdminLogEvent> chats:Vector<Chat> users:Vector<User> = channels.AdminLogResults; channels.adminLogResults#ed8af74d events:Vector<ChannelAdminLogEvent> chats:Vector<Chat> users:Vector<User> = channels.AdminLogResults;
channelAdminLogEventsFilter#ea107ae4 flags:# join:flags.0?true leave:flags.1?true invite:flags.2?true ban:flags.3?true unban:flags.4?true kick:flags.5?true unkick:flags.6?true promote:flags.7?true demote:flags.8?true info:flags.9?true settings:flags.10?true pinned:flags.11?true edit:flags.12?true delete:flags.13?true group_call:flags.14?true invites:flags.15?true send:flags.16?true forums:flags.17?true sub_extend:flags.18?true = ChannelAdminLogEventsFilter; channelAdminLogEventsFilter#ea107ae4 flags:# join:flags.0?true leave:flags.1?true invite:flags.2?true ban:flags.3?true unban:flags.4?true kick:flags.5?true unkick:flags.6?true promote:flags.7?true demote:flags.8?true info:flags.9?true settings:flags.10?true pinned:flags.11?true edit:flags.12?true delete:flags.13?true group_call:flags.14?true invites:flags.15?true send:flags.16?true forums:flags.17?true sub_extend:flags.18?true = ChannelAdminLogEventsFilter;
@ -1020,7 +1024,7 @@ statsGraphError#bedc9822 error:string = StatsGraph;
statsGraph#8ea464b6 flags:# json:DataJSON zoom_token:flags.0?string = StatsGraph; statsGraph#8ea464b6 flags:# json:DataJSON zoom_token:flags.0?string = StatsGraph;
stats.broadcastStats#396ca5fc period:StatsDateRangeDays followers:StatsAbsValueAndPrev views_per_post:StatsAbsValueAndPrev shares_per_post:StatsAbsValueAndPrev reactions_per_post:StatsAbsValueAndPrev views_per_story:StatsAbsValueAndPrev shares_per_story:StatsAbsValueAndPrev reactions_per_story:StatsAbsValueAndPrev enabled_notifications:StatsPercentValue growth_graph:StatsGraph followers_graph:StatsGraph mute_graph:StatsGraph top_hours_graph:StatsGraph interactions_graph:StatsGraph iv_interactions_graph:StatsGraph views_by_source_graph:StatsGraph new_followers_by_source_graph:StatsGraph languages_graph:StatsGraph reactions_by_emotion_graph:StatsGraph story_interactions_graph:StatsGraph story_reactions_by_emotion_graph:StatsGraph recent_posts_interactions:Vector<PostInteractionCounters> = stats.BroadcastStats; stats.broadcastStats#396ca5fc period:StatsDateRangeDays followers:StatsAbsValueAndPrev views_per_post:StatsAbsValueAndPrev shares_per_post:StatsAbsValueAndPrev reactions_per_post:StatsAbsValueAndPrev views_per_story:StatsAbsValueAndPrev shares_per_story:StatsAbsValueAndPrev reactions_per_story:StatsAbsValueAndPrev enabled_notifications:StatsPercentValue growth_graph:StatsGraph followers_graph:StatsGraph mute_graph:StatsGraph top_hours_graph:StatsGraph interactions_graph:StatsGraph iv_interactions_graph:StatsGraph views_by_source_graph:StatsGraph new_followers_by_source_graph:StatsGraph languages_graph:StatsGraph reactions_by_emotion_graph:StatsGraph story_interactions_graph:StatsGraph story_reactions_by_emotion_graph:StatsGraph recent_posts_interactions:Vector<PostInteractionCounters> = stats.BroadcastStats;
help.promoDataEmpty#98f6ac75 expires:int = help.PromoData; help.promoDataEmpty#98f6ac75 expires:int = help.PromoData;
help.promoData#8c39793f flags:# proxy:flags.0?true expires:int peer:Peer chats:Vector<Chat> users:Vector<User> psa_type:flags.1?string psa_message:flags.2?string = help.PromoData; help.promoData#8a4d87a flags:# proxy:flags.0?true expires:int peer:flags.3?Peer psa_type:flags.1?string psa_message:flags.2?string pending_suggestions:Vector<string> dismissed_suggestions:Vector<string> custom_pending_suggestion:flags.4?PendingSuggestion chats:Vector<Chat> users:Vector<User> = help.PromoData;
videoSize#de33b094 flags:# type:string w:int h:int size:int video_start_ts:flags.0?double = VideoSize; videoSize#de33b094 flags:# type:string w:int h:int size:int video_start_ts:flags.0?double = VideoSize;
videoSizeEmojiMarkup#f85c413c emoji_id:long background_colors:Vector<int> = VideoSize; videoSizeEmojiMarkup#f85c413c emoji_id:long background_colors:Vector<int> = VideoSize;
videoSizeStickerMarkup#da082fe stickerset:InputStickerSet sticker_id:long background_colors:Vector<int> = VideoSize; videoSizeStickerMarkup#da082fe stickerset:InputStickerSet sticker_id:long background_colors:Vector<int> = VideoSize;
@ -1042,8 +1046,10 @@ messageReplies#83d60fc2 flags:# comments:flags.0?true replies:int replies_pts:in
peerBlocked#e8fd8014 peer_id:Peer date:int = PeerBlocked; peerBlocked#e8fd8014 peer_id:Peer date:int = PeerBlocked;
stats.messageStats#7fe91c14 views_graph:StatsGraph reactions_by_emotion_graph:StatsGraph = stats.MessageStats; stats.messageStats#7fe91c14 views_graph:StatsGraph reactions_by_emotion_graph:StatsGraph = stats.MessageStats;
groupCallDiscarded#7780bcb4 id:long access_hash:long duration:int = GroupCall; groupCallDiscarded#7780bcb4 id:long access_hash:long duration:int = GroupCall;
groupCall#cdf8d3e3 flags:# join_muted:flags.1?true can_change_join_muted:flags.2?true join_date_asc:flags.6?true schedule_start_subscribed:flags.8?true can_start_video:flags.9?true record_video_active:flags.11?true rtmp_stream:flags.12?true listeners_hidden:flags.13?true id:long access_hash:long participants_count:int title:flags.3?string stream_dc_id:flags.4?int record_start_date:flags.5?int schedule_date:flags.7?int unmuted_video_count:flags.10?int unmuted_video_limit:int version:int conference_from_call:flags.14?long = GroupCall; groupCall#553b0ba1 flags:# join_muted:flags.1?true can_change_join_muted:flags.2?true join_date_asc:flags.6?true schedule_start_subscribed:flags.8?true can_start_video:flags.9?true record_video_active:flags.11?true rtmp_stream:flags.12?true listeners_hidden:flags.13?true conference:flags.14?true creator:flags.15?true id:long access_hash:long participants_count:int title:flags.3?string stream_dc_id:flags.4?int record_start_date:flags.5?int schedule_date:flags.7?int unmuted_video_count:flags.10?int unmuted_video_limit:int version:int invite_link:flags.16?string = GroupCall;
inputGroupCall#d8aa840f id:long access_hash:long = InputGroupCall; inputGroupCall#d8aa840f id:long access_hash:long = InputGroupCall;
inputGroupCallSlug#fe06823f slug:string = InputGroupCall;
inputGroupCallInviteMessage#8c10603f msg_id:int = InputGroupCall;
groupCallParticipant#eba636fe flags:# muted:flags.0?true left:flags.1?true can_self_unmute:flags.2?true just_joined:flags.4?true versioned:flags.5?true min:flags.8?true muted_by_you:flags.9?true volume_by_admin:flags.10?true self:flags.12?true video_joined:flags.15?true peer:Peer date:int active_date:flags.3?int source:int volume:flags.7?int about:flags.11?string raise_hand_rating:flags.13?long video:flags.6?GroupCallParticipantVideo presentation:flags.14?GroupCallParticipantVideo = GroupCallParticipant; groupCallParticipant#eba636fe flags:# muted:flags.0?true left:flags.1?true can_self_unmute:flags.2?true just_joined:flags.4?true versioned:flags.5?true min:flags.8?true muted_by_you:flags.9?true volume_by_admin:flags.10?true self:flags.12?true video_joined:flags.15?true peer:Peer date:int active_date:flags.3?int source:int volume:flags.7?int about:flags.11?string raise_hand_rating:flags.13?long video:flags.6?GroupCallParticipantVideo presentation:flags.14?GroupCallParticipantVideo = GroupCallParticipant;
phone.groupCall#9e727aad call:GroupCall participants:Vector<GroupCallParticipant> participants_next_offset:string chats:Vector<Chat> users:Vector<User> = phone.GroupCall; phone.groupCall#9e727aad call:GroupCall participants:Vector<GroupCallParticipant> participants_next_offset:string chats:Vector<Chat> users:Vector<User> = phone.GroupCall;
phone.groupParticipants#f47751b6 count:int participants:Vector<GroupCallParticipant> next_offset:string chats:Vector<Chat> users:Vector<User> version:int = phone.GroupParticipants; phone.groupParticipants#f47751b6 count:int participants:Vector<GroupCallParticipant> next_offset:string chats:Vector<Chat> users:Vector<User> version:int = phone.GroupParticipants;
@ -1134,6 +1140,7 @@ inputInvoiceStarGiftUpgrade#4d818d5d flags:# keep_original_details:flags.0?true
inputInvoiceStarGiftTransfer#4a5f5bd9 stargift:InputSavedStarGift to_id:InputPeer = InputInvoice; inputInvoiceStarGiftTransfer#4a5f5bd9 stargift:InputSavedStarGift to_id:InputPeer = InputInvoice;
inputInvoicePremiumGiftStars#dabab2ef flags:# user_id:InputUser months:int message:flags.0?TextWithEntities = InputInvoice; inputInvoicePremiumGiftStars#dabab2ef flags:# user_id:InputUser months:int message:flags.0?TextWithEntities = InputInvoice;
inputInvoiceBusinessBotTransferStars#f4997e42 bot:InputUser stars:long = InputInvoice; inputInvoiceBusinessBotTransferStars#f4997e42 bot:InputUser stars:long = InputInvoice;
inputInvoiceStarGiftResale#63cbc38c slug:string to_id:InputPeer = InputInvoice;
payments.exportedInvoice#aed0cbd9 url:string = payments.ExportedInvoice; payments.exportedInvoice#aed0cbd9 url:string = payments.ExportedInvoice;
messages.transcribedAudio#cfb9d957 flags:# pending:flags.0?true transcription_id:long text:string trial_remains_num:flags.1?int trial_remains_until_date:flags.1?int = messages.TranscribedAudio; messages.transcribedAudio#cfb9d957 flags:# pending:flags.0?true transcription_id:long text:string trial_remains_num:flags.1?int trial_remains_until_date:flags.1?int = messages.TranscribedAudio;
help.premiumPromo#5334759c status_text:string status_entities:Vector<MessageEntity> video_sections:Vector<string> videos:Vector<Document> period_options:Vector<PremiumSubscriptionOption> users:Vector<User> = help.PremiumPromo; help.premiumPromo#5334759c status_text:string status_entities:Vector<MessageEntity> video_sections:Vector<string> videos:Vector<Document> period_options:Vector<PremiumSubscriptionOption> users:Vector<User> = help.PremiumPromo;
@ -1354,7 +1361,7 @@ starsTransactionPeer#d80da15d peer:Peer = StarsTransactionPeer;
starsTransactionPeerAds#60682812 = StarsTransactionPeer; starsTransactionPeerAds#60682812 = StarsTransactionPeer;
starsTransactionPeerAPI#f9677aad = StarsTransactionPeer; starsTransactionPeerAPI#f9677aad = StarsTransactionPeer;
starsTopupOption#bd915c0 flags:# extended:flags.1?true stars:long store_product:flags.0?string currency:string amount:long = StarsTopupOption; starsTopupOption#bd915c0 flags:# extended:flags.1?true stars:long store_product:flags.0?string currency:string amount:long = StarsTopupOption;
starsTransaction#a39fd94a flags:# refund:flags.3?true pending:flags.4?true failed:flags.6?true gift:flags.10?true reaction:flags.11?true stargift_upgrade:flags.18?true id:string stars:StarsAmount date:int peer:StarsTransactionPeer title:flags.0?string description:flags.1?string photo:flags.2?WebDocument transaction_date:flags.5?int transaction_url:flags.5?string bot_payload:flags.7?bytes msg_id:flags.8?int extended_media:flags.9?Vector<MessageMedia> subscription_period:flags.12?int giveaway_post_id:flags.13?int stargift:flags.14?StarGift floodskip_number:flags.15?int starref_commission_permille:flags.16?int starref_peer:flags.17?Peer starref_amount:flags.17?StarsAmount paid_messages:flags.19?int premium_gift_months:flags.20?int = StarsTransaction; starsTransaction#a39fd94a flags:# refund:flags.3?true pending:flags.4?true failed:flags.6?true gift:flags.10?true reaction:flags.11?true stargift_upgrade:flags.18?true business_transfer:flags.21?true stargift_resale:flags.22?true id:string stars:StarsAmount date:int peer:StarsTransactionPeer title:flags.0?string description:flags.1?string photo:flags.2?WebDocument transaction_date:flags.5?int transaction_url:flags.5?string bot_payload:flags.7?bytes msg_id:flags.8?int extended_media:flags.9?Vector<MessageMedia> subscription_period:flags.12?int giveaway_post_id:flags.13?int stargift:flags.14?StarGift floodskip_number:flags.15?int starref_commission_permille:flags.16?int starref_peer:flags.17?Peer starref_amount:flags.17?StarsAmount paid_messages:flags.19?int premium_gift_months:flags.20?int = StarsTransaction;
payments.starsStatus#6c9ce8ed flags:# balance:StarsAmount subscriptions:flags.1?Vector<StarsSubscription> subscriptions_next_offset:flags.2?string subscriptions_missing_balance:flags.4?long history:flags.3?Vector<StarsTransaction> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.StarsStatus; payments.starsStatus#6c9ce8ed flags:# balance:StarsAmount subscriptions:flags.1?Vector<StarsSubscription> subscriptions_next_offset:flags.2?string subscriptions_missing_balance:flags.4?long history:flags.3?Vector<StarsTransaction> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.StarsStatus;
foundStory#e87acbc0 peer:Peer story:StoryItem = FoundStory; foundStory#e87acbc0 peer:Peer story:StoryItem = FoundStory;
stories.foundStories#e2de7737 flags:# count:int stories:Vector<FoundStory> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = stories.FoundStories; stories.foundStories#e2de7737 flags:# count:int stories:Vector<FoundStory> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = stories.FoundStories;
@ -1373,8 +1380,8 @@ starsSubscription#2e6eab1a flags:# canceled:flags.0?true can_refulfill:flags.1?t
messageReactor#4ba3a95a flags:# top:flags.0?true my:flags.1?true anonymous:flags.2?true peer_id:flags.3?Peer count:int = MessageReactor; messageReactor#4ba3a95a flags:# top:flags.0?true my:flags.1?true anonymous:flags.2?true peer_id:flags.3?Peer count:int = MessageReactor;
starsGiveawayOption#94ce852a flags:# extended:flags.0?true default:flags.1?true stars:long yearly_boosts:int store_product:flags.2?string currency:string amount:long winners:Vector<StarsGiveawayWinnersOption> = StarsGiveawayOption; starsGiveawayOption#94ce852a flags:# extended:flags.0?true default:flags.1?true stars:long yearly_boosts:int store_product:flags.2?string currency:string amount:long winners:Vector<StarsGiveawayWinnersOption> = StarsGiveawayOption;
starsGiveawayWinnersOption#54236209 flags:# default:flags.0?true users:int per_user_stars:long = StarsGiveawayWinnersOption; starsGiveawayWinnersOption#54236209 flags:# default:flags.0?true users:int per_user_stars:long = StarsGiveawayWinnersOption;
starGift#2cc73c8 flags:# limited:flags.0?true sold_out:flags.1?true birthday:flags.2?true id:long sticker:Document stars:long availability_remains:flags.0?int availability_total:flags.0?int convert_stars:long first_sale_date:flags.1?int last_sale_date:flags.1?int upgrade_stars:flags.3?long = StarGift; starGift#c62aca28 flags:# limited:flags.0?true sold_out:flags.1?true birthday:flags.2?true id:long sticker:Document stars:long availability_remains:flags.0?int availability_total:flags.0?int availability_resale:flags.4?long convert_stars:long first_sale_date:flags.1?int last_sale_date:flags.1?int upgrade_stars:flags.3?long resell_min_stars:flags.4?long title:flags.5?string = StarGift;
starGiftUnique#5c62d151 flags:# id:long title:string slug:string num:int owner_id:flags.0?Peer owner_name:flags.1?string owner_address:flags.2?string attributes:Vector<StarGiftAttribute> availability_issued:int availability_total:int gift_address:flags.3?string = StarGift; starGiftUnique#6411db89 flags:# id:long title:string slug:string num:int owner_id:flags.0?Peer owner_name:flags.1?string owner_address:flags.2?string attributes:Vector<StarGiftAttribute> availability_issued:int availability_total:int gift_address:flags.3?string resell_stars:flags.4?long = StarGift;
payments.starGiftsNotModified#a388a368 = payments.StarGifts; payments.starGiftsNotModified#a388a368 = payments.StarGifts;
payments.starGifts#901689ea hash:int gifts:Vector<StarGift> = payments.StarGifts; payments.starGifts#901689ea hash:int gifts:Vector<StarGift> = payments.StarGifts;
messageReportOption#7903e3d9 text:string option:bytes = MessageReportOption; messageReportOption#7903e3d9 text:string option:bytes = MessageReportOption;
@ -1395,17 +1402,18 @@ botVerifierSettings#b0cd6617 flags:# can_modify_custom_description:flags.1?true
botVerification#f93cd45c bot_id:long icon:long description:string = BotVerification; botVerification#f93cd45c bot_id:long icon:long description:string = BotVerification;
starGiftAttributeModel#39d99013 name:string document:Document rarity_permille:int = StarGiftAttribute; starGiftAttributeModel#39d99013 name:string document:Document rarity_permille:int = StarGiftAttribute;
starGiftAttributePattern#13acff19 name:string document:Document rarity_permille:int = StarGiftAttribute; starGiftAttributePattern#13acff19 name:string document:Document rarity_permille:int = StarGiftAttribute;
starGiftAttributeBackdrop#94271762 name:string center_color:int edge_color:int pattern_color:int text_color:int rarity_permille:int = StarGiftAttribute; starGiftAttributeBackdrop#d93d859c name:string backdrop_id:int center_color:int edge_color:int pattern_color:int text_color:int rarity_permille:int = StarGiftAttribute;
starGiftAttributeOriginalDetails#e0bff26c flags:# sender_id:flags.0?Peer recipient_id:Peer date:int message:flags.1?TextWithEntities = StarGiftAttribute; starGiftAttributeOriginalDetails#e0bff26c flags:# sender_id:flags.0?Peer recipient_id:Peer date:int message:flags.1?TextWithEntities = StarGiftAttribute;
payments.starGiftUpgradePreview#167bd90b sample_attributes:Vector<StarGiftAttribute> = payments.StarGiftUpgradePreview; payments.starGiftUpgradePreview#167bd90b sample_attributes:Vector<StarGiftAttribute> = payments.StarGiftUpgradePreview;
users.users#62d706b8 users:Vector<User> = users.Users; users.users#62d706b8 users:Vector<User> = users.Users;
users.usersSlice#315a4974 count:int users:Vector<User> = users.Users; users.usersSlice#315a4974 count:int users:Vector<User> = users.Users;
payments.uniqueStarGift#caa2f60b gift:StarGift users:Vector<User> = payments.UniqueStarGift; payments.uniqueStarGift#caa2f60b gift:StarGift users:Vector<User> = payments.UniqueStarGift;
messages.webPagePreview#b53e8b21 media:MessageMedia users:Vector<User> = messages.WebPagePreview; messages.webPagePreview#b53e8b21 media:MessageMedia users:Vector<User> = messages.WebPagePreview;
savedStarGift#6056dba5 flags:# name_hidden:flags.0?true unsaved:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true pinned_to_top:flags.12?true from_id:flags.1?Peer date:int gift:StarGift message:flags.2?TextWithEntities msg_id:flags.3?int saved_id:flags.11?long convert_stars:flags.4?long upgrade_stars:flags.6?long can_export_at:flags.7?int transfer_stars:flags.8?long = SavedStarGift; savedStarGift#dfda0499 flags:# name_hidden:flags.0?true unsaved:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true pinned_to_top:flags.12?true from_id:flags.1?Peer date:int gift:StarGift message:flags.2?TextWithEntities msg_id:flags.3?int saved_id:flags.11?long convert_stars:flags.4?long upgrade_stars:flags.6?long can_export_at:flags.7?int transfer_stars:flags.8?long can_transfer_at:flags.13?int can_resell_at:flags.14?int = SavedStarGift;
payments.savedStarGifts#95f389b1 flags:# count:int chat_notifications_enabled:flags.1?Bool gifts:Vector<SavedStarGift> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.SavedStarGifts; payments.savedStarGifts#95f389b1 flags:# count:int chat_notifications_enabled:flags.1?Bool gifts:Vector<SavedStarGift> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.SavedStarGifts;
inputSavedStarGiftUser#69279795 msg_id:int = InputSavedStarGift; inputSavedStarGiftUser#69279795 msg_id:int = InputSavedStarGift;
inputSavedStarGiftChat#f101aa7f peer:InputPeer saved_id:long = InputSavedStarGift; inputSavedStarGiftChat#f101aa7f peer:InputPeer saved_id:long = InputSavedStarGift;
inputSavedStarGiftSlug#2085c238 slug:string = InputSavedStarGift;
payments.starGiftWithdrawalUrl#84aa3a9c url:string = payments.StarGiftWithdrawalUrl; payments.starGiftWithdrawalUrl#84aa3a9c url:string = payments.StarGiftWithdrawalUrl;
paidReactionPrivacyDefault#206ad49e = PaidReactionPrivacy; paidReactionPrivacyDefault#206ad49e = PaidReactionPrivacy;
paidReactionPrivacyAnonymous#1f0c1ad9 = PaidReactionPrivacy; paidReactionPrivacyAnonymous#1f0c1ad9 = PaidReactionPrivacy;
@ -1419,6 +1427,13 @@ disallowedGiftsSettings#71f276c4 flags:# disallow_unlimited_stargifts:flags.0?tr
sponsoredPeer#c69708d3 flags:# random_id:bytes peer:Peer sponsor_info:flags.0?string additional_info:flags.1?string = SponsoredPeer; sponsoredPeer#c69708d3 flags:# random_id:bytes peer:Peer sponsor_info:flags.0?string additional_info:flags.1?string = SponsoredPeer;
contacts.sponsoredPeersEmpty#ea32b4b1 = contacts.SponsoredPeers; contacts.sponsoredPeersEmpty#ea32b4b1 = contacts.SponsoredPeers;
contacts.sponsoredPeers#eb032884 peers:Vector<SponsoredPeer> chats:Vector<Chat> users:Vector<User> = contacts.SponsoredPeers; contacts.sponsoredPeers#eb032884 peers:Vector<SponsoredPeer> chats:Vector<Chat> users:Vector<User> = contacts.SponsoredPeers;
starGiftAttributeIdModel#48aaae3c document_id:long = StarGiftAttributeId;
starGiftAttributeIdPattern#4a162433 document_id:long = StarGiftAttributeId;
starGiftAttributeIdBackdrop#1f01c757 backdrop_id:int = StarGiftAttributeId;
starGiftAttributeCounter#2eb1b658 attribute:StarGiftAttributeId count:int = StarGiftAttributeCounter;
payments.resaleStarGifts#947a12df flags:# count:int gifts:Vector<StarGift> next_offset:flags.0?string attributes:flags.1?Vector<StarGiftAttribute> attributes_hash:flags.1?long chats:Vector<Chat> counters:flags.2?Vector<StarGiftAttributeCounter> users:Vector<User> = payments.ResaleStarGifts;
stories.canSendStoryCount#c387c04e count_remains:int = stories.CanSendStoryCount;
pendingSuggestion#e7e82e12 suggestion:string title:TextWithEntities description:TextWithEntities url:string = PendingSuggestion;
---functions--- ---functions---
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; 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; 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;
@ -1750,7 +1765,8 @@ payments.getUniqueStarGift#a1974d72 slug:string = payments.UniqueStarGift;
payments.getSavedStarGifts#23830de9 flags:# exclude_unsaved:flags.0?true exclude_saved:flags.1?true exclude_unlimited:flags.2?true exclude_limited:flags.3?true exclude_unique:flags.4?true sort_by_value:flags.5?true peer:InputPeer offset:string limit:int = payments.SavedStarGifts; payments.getSavedStarGifts#23830de9 flags:# exclude_unsaved:flags.0?true exclude_saved:flags.1?true exclude_unlimited:flags.2?true exclude_limited:flags.3?true exclude_unique:flags.4?true sort_by_value:flags.5?true peer:InputPeer offset:string limit:int = payments.SavedStarGifts;
payments.getStarGiftWithdrawalUrl#d06e93a8 stargift:InputSavedStarGift password:InputCheckPasswordSRP = payments.StarGiftWithdrawalUrl; payments.getStarGiftWithdrawalUrl#d06e93a8 stargift:InputSavedStarGift password:InputCheckPasswordSRP = payments.StarGiftWithdrawalUrl;
payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector<InputSavedStarGift> = Bool; payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector<InputSavedStarGift> = Bool;
phone.requestCall#a6c4600c flags:# video:flags.0?true user_id:InputUser conference_call:flags.1?InputGroupCall random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall; payments.updateStarGiftPrice#3baea4e1 stargift:InputSavedStarGift resell_stars:long = Updates;
phone.requestCall#42ff96ed flags:# video:flags.0?true user_id:InputUser random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.acceptCall#3bd2b4a0 peer:InputPhoneCall g_b:bytes protocol:PhoneCallProtocol = phone.PhoneCall; phone.acceptCall#3bd2b4a0 peer:InputPhoneCall g_b:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.confirmCall#2efe1722 peer:InputPhoneCall g_a:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall; phone.confirmCall#2efe1722 peer:InputPhoneCall g_a:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall;
phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool; phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool;
@ -1759,7 +1775,7 @@ phone.setCallRating#59ead627 flags:# user_initiative:flags.0?true peer:InputPhon
phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool; phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool;
phone.sendSignalingData#ff7a9383 peer:InputPhoneCall data:bytes = Bool; phone.sendSignalingData#ff7a9383 peer:InputPhoneCall data:bytes = Bool;
phone.createGroupCall#48cdc6d8 flags:# rtmp_stream:flags.2?true peer:InputPeer random_id:int title:flags.0?string schedule_date:flags.1?int = Updates; phone.createGroupCall#48cdc6d8 flags:# rtmp_stream:flags.2?true peer:InputPeer random_id:int title:flags.0?string schedule_date:flags.1?int = Updates;
phone.joinGroupCall#d61e1df3 flags:# muted:flags.0?true video_stopped:flags.2?true call:InputGroupCall join_as:InputPeer invite_hash:flags.1?string key_fingerprint:flags.3?long params:DataJSON = Updates; phone.joinGroupCall#8fb53057 flags:# muted:flags.0?true video_stopped:flags.2?true call:InputGroupCall join_as:InputPeer invite_hash:flags.1?string public_key:flags.3?int256 block:flags.3?bytes params:DataJSON = Updates;
phone.leaveGroupCall#500377f9 call:InputGroupCall source:int = Updates; phone.leaveGroupCall#500377f9 call:InputGroupCall source:int = Updates;
phone.discardGroupCall#7a777135 call:InputGroupCall = Updates; phone.discardGroupCall#7a777135 call:InputGroupCall = Updates;
phone.getGroupCall#41845db call:InputGroupCall limit:int = phone.GroupCall; phone.getGroupCall#41845db call:InputGroupCall limit:int = phone.GroupCall;

View File

@ -319,6 +319,7 @@
"payments.getUniqueStarGift", "payments.getUniqueStarGift",
"payments.getStarGiftWithdrawalUrl", "payments.getStarGiftWithdrawalUrl",
"payments.toggleStarGiftsPinnedToTop", "payments.toggleStarGiftsPinnedToTop",
"payments.updateStarGiftPrice",
"langpack.getLangPack", "langpack.getLangPack",
"langpack.getStrings", "langpack.getStrings",
"langpack.getLanguages", "langpack.getLanguages",

View File

@ -99,7 +99,7 @@ userStatusLastMonth#65899777 flags:# by_me:flags.0?true = UserStatus;
chatEmpty#29562865 id:long = Chat; chatEmpty#29562865 id:long = Chat;
chat#41cbf256 flags:# creator:flags.0?true left:flags.2?true deactivated:flags.5?true call_active:flags.23?true call_not_empty:flags.24?true noforwards:flags.25?true id:long title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; chat#41cbf256 flags:# creator:flags.0?true left:flags.2?true deactivated:flags.5?true call_active:flags.23?true call_not_empty:flags.24?true noforwards:flags.25?true id:long title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat;
chatForbidden#6592a1a7 id:long title:string = Chat; chatForbidden#6592a1a7 id:long title:string = Chat;
channel#7482147e 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 signature_profiles:flags2.12?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector<RestrictionReason> 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<Username> stories_max_id:flags2.4?int color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int subscription_until_date:flags2.11?int bot_verification_icon:flags2.13?long send_paid_messages_stars:flags2.14?long = Chat; channel#7482147e 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 signature_profiles:flags2.12?true autotranslation:flags2.15?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector<RestrictionReason> 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<Username> stories_max_id:flags2.4?int color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int subscription_until_date:flags2.11?int bot_verification_icon:flags2.13?long send_paid_messages_stars:flags2.14?long = 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; 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#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<BotInfo> 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<long> available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = 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<BotInfo> 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<long> available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = ChatFull;
@ -184,9 +184,10 @@ messageActionPaymentRefunded#41b3e202 flags:# peer:Peer currency:string total_am
messageActionGiftStars#45d5b021 flags:# currency:string amount:long stars:long crypto_currency:flags.0?string crypto_amount:flags.0?long transaction_id:flags.1?string = MessageAction; messageActionGiftStars#45d5b021 flags:# currency:string amount:long stars:long crypto_currency:flags.0?string crypto_amount:flags.0?long transaction_id:flags.1?string = MessageAction;
messageActionPrizeStars#b00c47a2 flags:# unclaimed:flags.0?true stars:long transaction_id:string boost_peer:Peer giveaway_msg_id:int = MessageAction; messageActionPrizeStars#b00c47a2 flags:# unclaimed:flags.0?true stars:long transaction_id:string boost_peer:Peer giveaway_msg_id:int = MessageAction;
messageActionStarGift#4717e8a4 flags:# name_hidden:flags.0?true saved:flags.2?true converted:flags.3?true upgraded:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true gift:StarGift message:flags.1?TextWithEntities convert_stars:flags.4?long upgrade_msg_id:flags.5?int upgrade_stars:flags.8?long from_id:flags.11?Peer peer:flags.12?Peer saved_id:flags.12?long = MessageAction; messageActionStarGift#4717e8a4 flags:# name_hidden:flags.0?true saved:flags.2?true converted:flags.3?true upgraded:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true gift:StarGift message:flags.1?TextWithEntities convert_stars:flags.4?long upgrade_msg_id:flags.5?int upgrade_stars:flags.8?long from_id:flags.11?Peer peer:flags.12?Peer saved_id:flags.12?long = MessageAction;
messageActionStarGiftUnique#acdfcb81 flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long = MessageAction; messageActionStarGiftUnique#2e3ae60e flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long resale_stars:flags.8?long can_transfer_at:flags.9?int can_resell_at:flags.10?int = MessageAction;
messageActionPaidMessagesRefunded#ac1f1fcd count:int stars:long = MessageAction; messageActionPaidMessagesRefunded#ac1f1fcd count:int stars:long = MessageAction;
messageActionPaidMessagesPrice#bcd71419 stars:long = MessageAction; messageActionPaidMessagesPrice#bcd71419 stars:long = MessageAction;
messageActionConferenceCall#2ffe2f7a flags:# missed:flags.0?true active:flags.1?true video:flags.4?true call_id:long duration:flags.2?int other_participants:flags.3?Vector<Peer> = MessageAction;
dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog; dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog;
dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog; dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog;
@ -431,6 +432,7 @@ updateStarsRevenueStatus#a584b019 peer:Peer status:StarsRevenueStatus = Update;
updateBotPurchasedPaidMedia#283bd312 user_id:long payload:string qts:int = Update; updateBotPurchasedPaidMedia#283bd312 user_id:long payload:string qts:int = Update;
updatePaidReactionPrivacy#8b725fce private:PaidReactionPrivacy = Update; updatePaidReactionPrivacy#8b725fce private:PaidReactionPrivacy = Update;
updateSentPhoneCode#504aa18f sent_code:auth.SentCode = Update; updateSentPhoneCode#504aa18f sent_code:auth.SentCode = Update;
updateGroupCallChainBlocks#a477288f call:InputGroupCall sub_chain_id:int blocks:Vector<bytes> next_offset:int = Update;
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
@ -901,6 +903,7 @@ phoneCallDiscardReasonMissed#85e42301 = PhoneCallDiscardReason;
phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason; phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason;
phoneCallDiscardReasonHangup#57adc690 = PhoneCallDiscardReason; phoneCallDiscardReasonHangup#57adc690 = PhoneCallDiscardReason;
phoneCallDiscardReasonBusy#faf7e8c9 = PhoneCallDiscardReason; phoneCallDiscardReasonBusy#faf7e8c9 = PhoneCallDiscardReason;
phoneCallDiscardReasonMigrateConferenceCall#9fbbf1f7 slug:string = PhoneCallDiscardReason;
dataJSON#7d748d04 data:string = DataJSON; dataJSON#7d748d04 data:string = DataJSON;
@ -955,11 +958,11 @@ inputStickerSetItem#32da9e9c flags:# document:InputDocument emoji:string mask_co
inputPhoneCall#1e36fded id:long access_hash:long = InputPhoneCall; inputPhoneCall#1e36fded id:long access_hash:long = InputPhoneCall;
phoneCallEmpty#5366c915 id:long = PhoneCall; phoneCallEmpty#5366c915 id:long = PhoneCall;
phoneCallWaiting#eed42858 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long protocol:PhoneCallProtocol receive_date:flags.0?int conference_call:flags.8?InputGroupCall = PhoneCall; phoneCallWaiting#c5226f17 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long protocol:PhoneCallProtocol receive_date:flags.0?int = PhoneCall;
phoneCallRequested#45361c63 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_hash:bytes protocol:PhoneCallProtocol conference_call:flags.8?InputGroupCall = PhoneCall; phoneCallRequested#14b0ed0c flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_hash:bytes protocol:PhoneCallProtocol = PhoneCall;
phoneCallAccepted#22fd7181 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_b:bytes protocol:PhoneCallProtocol conference_call:flags.8?InputGroupCall = PhoneCall; phoneCallAccepted#3660c311 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_b:bytes protocol:PhoneCallProtocol = PhoneCall;
phoneCall#3ba5940c flags:# p2p_allowed:flags.5?true video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_or_b:bytes key_fingerprint:long protocol:PhoneCallProtocol connections:Vector<PhoneConnection> start_date:int custom_parameters:flags.7?DataJSON conference_call:flags.8?InputGroupCall = PhoneCall; phoneCall#30535af5 flags:# p2p_allowed:flags.5?true video:flags.6?true conference_supported:flags.8?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_or_b:bytes key_fingerprint:long protocol:PhoneCallProtocol connections:Vector<PhoneConnection> start_date:int custom_parameters:flags.7?DataJSON = PhoneCall;
phoneCallDiscarded#f9d25503 flags:# need_rating:flags.2?true need_debug:flags.3?true video:flags.6?true id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int conference_call:flags.8?InputGroupCall = PhoneCall; phoneCallDiscarded#50ca4de1 flags:# need_rating:flags.2?true need_debug:flags.3?true video:flags.6?true id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = PhoneCall;
phoneConnection#9cc123c7 flags:# tcp:flags.0?true id:long ip:string ipv6:string port:int peer_tag:bytes = PhoneConnection; phoneConnection#9cc123c7 flags:# tcp:flags.0?true id:long ip:string ipv6:string port:int peer_tag:bytes = PhoneConnection;
phoneConnectionWebrtc#635fe375 flags:# turn:flags.0?true stun:flags.1?true id:long ip:string ipv6:string port:int username:string password:string = PhoneConnection; phoneConnectionWebrtc#635fe375 flags:# turn:flags.0?true stun:flags.1?true id:long ip:string ipv6:string port:int username:string password:string = PhoneConnection;
@ -1033,6 +1036,7 @@ channelAdminLogEventActionChangeEmojiStatus#3ea9feb1 prev_value:EmojiStatus new_
channelAdminLogEventActionChangeEmojiStickerSet#46d840ab prev_stickerset:InputStickerSet new_stickerset:InputStickerSet = ChannelAdminLogEventAction; channelAdminLogEventActionChangeEmojiStickerSet#46d840ab prev_stickerset:InputStickerSet new_stickerset:InputStickerSet = ChannelAdminLogEventAction;
channelAdminLogEventActionToggleSignatureProfiles#60a79c79 new_value:Bool = ChannelAdminLogEventAction; channelAdminLogEventActionToggleSignatureProfiles#60a79c79 new_value:Bool = ChannelAdminLogEventAction;
channelAdminLogEventActionParticipantSubExtend#64642db3 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction; channelAdminLogEventActionParticipantSubExtend#64642db3 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction;
channelAdminLogEventActionToggleAutotranslation#c517f77e new_value:Bool = ChannelAdminLogEventAction;
channelAdminLogEvent#1fad68cd id:long date:int user_id:long action:ChannelAdminLogEventAction = ChannelAdminLogEvent; channelAdminLogEvent#1fad68cd id:long date:int user_id:long action:ChannelAdminLogEventAction = ChannelAdminLogEvent;
@ -1300,7 +1304,7 @@ statsGraph#8ea464b6 flags:# json:DataJSON zoom_token:flags.0?string = StatsGraph
stats.broadcastStats#396ca5fc period:StatsDateRangeDays followers:StatsAbsValueAndPrev views_per_post:StatsAbsValueAndPrev shares_per_post:StatsAbsValueAndPrev reactions_per_post:StatsAbsValueAndPrev views_per_story:StatsAbsValueAndPrev shares_per_story:StatsAbsValueAndPrev reactions_per_story:StatsAbsValueAndPrev enabled_notifications:StatsPercentValue growth_graph:StatsGraph followers_graph:StatsGraph mute_graph:StatsGraph top_hours_graph:StatsGraph interactions_graph:StatsGraph iv_interactions_graph:StatsGraph views_by_source_graph:StatsGraph new_followers_by_source_graph:StatsGraph languages_graph:StatsGraph reactions_by_emotion_graph:StatsGraph story_interactions_graph:StatsGraph story_reactions_by_emotion_graph:StatsGraph recent_posts_interactions:Vector<PostInteractionCounters> = stats.BroadcastStats; stats.broadcastStats#396ca5fc period:StatsDateRangeDays followers:StatsAbsValueAndPrev views_per_post:StatsAbsValueAndPrev shares_per_post:StatsAbsValueAndPrev reactions_per_post:StatsAbsValueAndPrev views_per_story:StatsAbsValueAndPrev shares_per_story:StatsAbsValueAndPrev reactions_per_story:StatsAbsValueAndPrev enabled_notifications:StatsPercentValue growth_graph:StatsGraph followers_graph:StatsGraph mute_graph:StatsGraph top_hours_graph:StatsGraph interactions_graph:StatsGraph iv_interactions_graph:StatsGraph views_by_source_graph:StatsGraph new_followers_by_source_graph:StatsGraph languages_graph:StatsGraph reactions_by_emotion_graph:StatsGraph story_interactions_graph:StatsGraph story_reactions_by_emotion_graph:StatsGraph recent_posts_interactions:Vector<PostInteractionCounters> = stats.BroadcastStats;
help.promoDataEmpty#98f6ac75 expires:int = help.PromoData; help.promoDataEmpty#98f6ac75 expires:int = help.PromoData;
help.promoData#8c39793f flags:# proxy:flags.0?true expires:int peer:Peer chats:Vector<Chat> users:Vector<User> psa_type:flags.1?string psa_message:flags.2?string = help.PromoData; help.promoData#8a4d87a flags:# proxy:flags.0?true expires:int peer:flags.3?Peer psa_type:flags.1?string psa_message:flags.2?string pending_suggestions:Vector<string> dismissed_suggestions:Vector<string> custom_pending_suggestion:flags.4?PendingSuggestion chats:Vector<Chat> users:Vector<User> = help.PromoData;
videoSize#de33b094 flags:# type:string w:int h:int size:int video_start_ts:flags.0?double = VideoSize; videoSize#de33b094 flags:# type:string w:int h:int size:int video_start_ts:flags.0?double = VideoSize;
videoSizeEmojiMarkup#f85c413c emoji_id:long background_colors:Vector<int> = VideoSize; videoSizeEmojiMarkup#f85c413c emoji_id:long background_colors:Vector<int> = VideoSize;
@ -1339,9 +1343,11 @@ peerBlocked#e8fd8014 peer_id:Peer date:int = PeerBlocked;
stats.messageStats#7fe91c14 views_graph:StatsGraph reactions_by_emotion_graph:StatsGraph = stats.MessageStats; stats.messageStats#7fe91c14 views_graph:StatsGraph reactions_by_emotion_graph:StatsGraph = stats.MessageStats;
groupCallDiscarded#7780bcb4 id:long access_hash:long duration:int = GroupCall; groupCallDiscarded#7780bcb4 id:long access_hash:long duration:int = GroupCall;
groupCall#cdf8d3e3 flags:# join_muted:flags.1?true can_change_join_muted:flags.2?true join_date_asc:flags.6?true schedule_start_subscribed:flags.8?true can_start_video:flags.9?true record_video_active:flags.11?true rtmp_stream:flags.12?true listeners_hidden:flags.13?true id:long access_hash:long participants_count:int title:flags.3?string stream_dc_id:flags.4?int record_start_date:flags.5?int schedule_date:flags.7?int unmuted_video_count:flags.10?int unmuted_video_limit:int version:int conference_from_call:flags.14?long = GroupCall; groupCall#553b0ba1 flags:# join_muted:flags.1?true can_change_join_muted:flags.2?true join_date_asc:flags.6?true schedule_start_subscribed:flags.8?true can_start_video:flags.9?true record_video_active:flags.11?true rtmp_stream:flags.12?true listeners_hidden:flags.13?true conference:flags.14?true creator:flags.15?true id:long access_hash:long participants_count:int title:flags.3?string stream_dc_id:flags.4?int record_start_date:flags.5?int schedule_date:flags.7?int unmuted_video_count:flags.10?int unmuted_video_limit:int version:int invite_link:flags.16?string = GroupCall;
inputGroupCall#d8aa840f id:long access_hash:long = InputGroupCall; inputGroupCall#d8aa840f id:long access_hash:long = InputGroupCall;
inputGroupCallSlug#fe06823f slug:string = InputGroupCall;
inputGroupCallInviteMessage#8c10603f msg_id:int = InputGroupCall;
groupCallParticipant#eba636fe flags:# muted:flags.0?true left:flags.1?true can_self_unmute:flags.2?true just_joined:flags.4?true versioned:flags.5?true min:flags.8?true muted_by_you:flags.9?true volume_by_admin:flags.10?true self:flags.12?true video_joined:flags.15?true peer:Peer date:int active_date:flags.3?int source:int volume:flags.7?int about:flags.11?string raise_hand_rating:flags.13?long video:flags.6?GroupCallParticipantVideo presentation:flags.14?GroupCallParticipantVideo = GroupCallParticipant; groupCallParticipant#eba636fe flags:# muted:flags.0?true left:flags.1?true can_self_unmute:flags.2?true just_joined:flags.4?true versioned:flags.5?true min:flags.8?true muted_by_you:flags.9?true volume_by_admin:flags.10?true self:flags.12?true video_joined:flags.15?true peer:Peer date:int active_date:flags.3?int source:int volume:flags.7?int about:flags.11?string raise_hand_rating:flags.13?long video:flags.6?GroupCallParticipantVideo presentation:flags.14?GroupCallParticipantVideo = GroupCallParticipant;
@ -1485,6 +1491,7 @@ inputInvoiceStarGiftUpgrade#4d818d5d flags:# keep_original_details:flags.0?true
inputInvoiceStarGiftTransfer#4a5f5bd9 stargift:InputSavedStarGift to_id:InputPeer = InputInvoice; inputInvoiceStarGiftTransfer#4a5f5bd9 stargift:InputSavedStarGift to_id:InputPeer = InputInvoice;
inputInvoicePremiumGiftStars#dabab2ef flags:# user_id:InputUser months:int message:flags.0?TextWithEntities = InputInvoice; inputInvoicePremiumGiftStars#dabab2ef flags:# user_id:InputUser months:int message:flags.0?TextWithEntities = InputInvoice;
inputInvoiceBusinessBotTransferStars#f4997e42 bot:InputUser stars:long = InputInvoice; inputInvoiceBusinessBotTransferStars#f4997e42 bot:InputUser stars:long = InputInvoice;
inputInvoiceStarGiftResale#63cbc38c slug:string to_id:InputPeer = InputInvoice;
payments.exportedInvoice#aed0cbd9 url:string = payments.ExportedInvoice; payments.exportedInvoice#aed0cbd9 url:string = payments.ExportedInvoice;
@ -1844,7 +1851,7 @@ starsTransactionPeerAPI#f9677aad = StarsTransactionPeer;
starsTopupOption#bd915c0 flags:# extended:flags.1?true stars:long store_product:flags.0?string currency:string amount:long = StarsTopupOption; starsTopupOption#bd915c0 flags:# extended:flags.1?true stars:long store_product:flags.0?string currency:string amount:long = StarsTopupOption;
starsTransaction#a39fd94a flags:# refund:flags.3?true pending:flags.4?true failed:flags.6?true gift:flags.10?true reaction:flags.11?true stargift_upgrade:flags.18?true id:string stars:StarsAmount date:int peer:StarsTransactionPeer title:flags.0?string description:flags.1?string photo:flags.2?WebDocument transaction_date:flags.5?int transaction_url:flags.5?string bot_payload:flags.7?bytes msg_id:flags.8?int extended_media:flags.9?Vector<MessageMedia> subscription_period:flags.12?int giveaway_post_id:flags.13?int stargift:flags.14?StarGift floodskip_number:flags.15?int starref_commission_permille:flags.16?int starref_peer:flags.17?Peer starref_amount:flags.17?StarsAmount paid_messages:flags.19?int premium_gift_months:flags.20?int = StarsTransaction; starsTransaction#a39fd94a flags:# refund:flags.3?true pending:flags.4?true failed:flags.6?true gift:flags.10?true reaction:flags.11?true stargift_upgrade:flags.18?true business_transfer:flags.21?true stargift_resale:flags.22?true id:string stars:StarsAmount date:int peer:StarsTransactionPeer title:flags.0?string description:flags.1?string photo:flags.2?WebDocument transaction_date:flags.5?int transaction_url:flags.5?string bot_payload:flags.7?bytes msg_id:flags.8?int extended_media:flags.9?Vector<MessageMedia> subscription_period:flags.12?int giveaway_post_id:flags.13?int stargift:flags.14?StarGift floodskip_number:flags.15?int starref_commission_permille:flags.16?int starref_peer:flags.17?Peer starref_amount:flags.17?StarsAmount paid_messages:flags.19?int premium_gift_months:flags.20?int = StarsTransaction;
payments.starsStatus#6c9ce8ed flags:# balance:StarsAmount subscriptions:flags.1?Vector<StarsSubscription> subscriptions_next_offset:flags.2?string subscriptions_missing_balance:flags.4?long history:flags.3?Vector<StarsTransaction> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.StarsStatus; payments.starsStatus#6c9ce8ed flags:# balance:StarsAmount subscriptions:flags.1?Vector<StarsSubscription> subscriptions_next_offset:flags.2?string subscriptions_missing_balance:flags.4?long history:flags.3?Vector<StarsTransaction> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.StarsStatus;
@ -1882,8 +1889,8 @@ starsGiveawayOption#94ce852a flags:# extended:flags.0?true default:flags.1?true
starsGiveawayWinnersOption#54236209 flags:# default:flags.0?true users:int per_user_stars:long = StarsGiveawayWinnersOption; starsGiveawayWinnersOption#54236209 flags:# default:flags.0?true users:int per_user_stars:long = StarsGiveawayWinnersOption;
starGift#2cc73c8 flags:# limited:flags.0?true sold_out:flags.1?true birthday:flags.2?true id:long sticker:Document stars:long availability_remains:flags.0?int availability_total:flags.0?int convert_stars:long first_sale_date:flags.1?int last_sale_date:flags.1?int upgrade_stars:flags.3?long = StarGift; starGift#c62aca28 flags:# limited:flags.0?true sold_out:flags.1?true birthday:flags.2?true id:long sticker:Document stars:long availability_remains:flags.0?int availability_total:flags.0?int availability_resale:flags.4?long convert_stars:long first_sale_date:flags.1?int last_sale_date:flags.1?int upgrade_stars:flags.3?long resell_min_stars:flags.4?long title:flags.5?string = StarGift;
starGiftUnique#5c62d151 flags:# id:long title:string slug:string num:int owner_id:flags.0?Peer owner_name:flags.1?string owner_address:flags.2?string attributes:Vector<StarGiftAttribute> availability_issued:int availability_total:int gift_address:flags.3?string = StarGift; starGiftUnique#6411db89 flags:# id:long title:string slug:string num:int owner_id:flags.0?Peer owner_name:flags.1?string owner_address:flags.2?string attributes:Vector<StarGiftAttribute> availability_issued:int availability_total:int gift_address:flags.3?string resell_stars:flags.4?long = StarGift;
payments.starGiftsNotModified#a388a368 = payments.StarGifts; payments.starGiftsNotModified#a388a368 = payments.StarGifts;
payments.starGifts#901689ea hash:int gifts:Vector<StarGift> = payments.StarGifts; payments.starGifts#901689ea hash:int gifts:Vector<StarGift> = payments.StarGifts;
@ -1919,7 +1926,7 @@ botVerification#f93cd45c bot_id:long icon:long description:string = BotVerificat
starGiftAttributeModel#39d99013 name:string document:Document rarity_permille:int = StarGiftAttribute; starGiftAttributeModel#39d99013 name:string document:Document rarity_permille:int = StarGiftAttribute;
starGiftAttributePattern#13acff19 name:string document:Document rarity_permille:int = StarGiftAttribute; starGiftAttributePattern#13acff19 name:string document:Document rarity_permille:int = StarGiftAttribute;
starGiftAttributeBackdrop#94271762 name:string center_color:int edge_color:int pattern_color:int text_color:int rarity_permille:int = StarGiftAttribute; starGiftAttributeBackdrop#d93d859c name:string backdrop_id:int center_color:int edge_color:int pattern_color:int text_color:int rarity_permille:int = StarGiftAttribute;
starGiftAttributeOriginalDetails#e0bff26c flags:# sender_id:flags.0?Peer recipient_id:Peer date:int message:flags.1?TextWithEntities = StarGiftAttribute; starGiftAttributeOriginalDetails#e0bff26c flags:# sender_id:flags.0?Peer recipient_id:Peer date:int message:flags.1?TextWithEntities = StarGiftAttribute;
payments.starGiftUpgradePreview#167bd90b sample_attributes:Vector<StarGiftAttribute> = payments.StarGiftUpgradePreview; payments.starGiftUpgradePreview#167bd90b sample_attributes:Vector<StarGiftAttribute> = payments.StarGiftUpgradePreview;
@ -1931,12 +1938,13 @@ payments.uniqueStarGift#caa2f60b gift:StarGift users:Vector<User> = payments.Uni
messages.webPagePreview#b53e8b21 media:MessageMedia users:Vector<User> = messages.WebPagePreview; messages.webPagePreview#b53e8b21 media:MessageMedia users:Vector<User> = messages.WebPagePreview;
savedStarGift#6056dba5 flags:# name_hidden:flags.0?true unsaved:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true pinned_to_top:flags.12?true from_id:flags.1?Peer date:int gift:StarGift message:flags.2?TextWithEntities msg_id:flags.3?int saved_id:flags.11?long convert_stars:flags.4?long upgrade_stars:flags.6?long can_export_at:flags.7?int transfer_stars:flags.8?long = SavedStarGift; savedStarGift#dfda0499 flags:# name_hidden:flags.0?true unsaved:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true pinned_to_top:flags.12?true from_id:flags.1?Peer date:int gift:StarGift message:flags.2?TextWithEntities msg_id:flags.3?int saved_id:flags.11?long convert_stars:flags.4?long upgrade_stars:flags.6?long can_export_at:flags.7?int transfer_stars:flags.8?long can_transfer_at:flags.13?int can_resell_at:flags.14?int = SavedStarGift;
payments.savedStarGifts#95f389b1 flags:# count:int chat_notifications_enabled:flags.1?Bool gifts:Vector<SavedStarGift> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.SavedStarGifts; payments.savedStarGifts#95f389b1 flags:# count:int chat_notifications_enabled:flags.1?Bool gifts:Vector<SavedStarGift> next_offset:flags.0?string chats:Vector<Chat> users:Vector<User> = payments.SavedStarGifts;
inputSavedStarGiftUser#69279795 msg_id:int = InputSavedStarGift; inputSavedStarGiftUser#69279795 msg_id:int = InputSavedStarGift;
inputSavedStarGiftChat#f101aa7f peer:InputPeer saved_id:long = InputSavedStarGift; inputSavedStarGiftChat#f101aa7f peer:InputPeer saved_id:long = InputSavedStarGift;
inputSavedStarGiftSlug#2085c238 slug:string = InputSavedStarGift;
payments.starGiftWithdrawalUrl#84aa3a9c url:string = payments.StarGiftWithdrawalUrl; payments.starGiftWithdrawalUrl#84aa3a9c url:string = payments.StarGiftWithdrawalUrl;
@ -1959,6 +1967,18 @@ sponsoredPeer#c69708d3 flags:# random_id:bytes peer:Peer sponsor_info:flags.0?st
contacts.sponsoredPeersEmpty#ea32b4b1 = contacts.SponsoredPeers; contacts.sponsoredPeersEmpty#ea32b4b1 = contacts.SponsoredPeers;
contacts.sponsoredPeers#eb032884 peers:Vector<SponsoredPeer> chats:Vector<Chat> users:Vector<User> = contacts.SponsoredPeers; contacts.sponsoredPeers#eb032884 peers:Vector<SponsoredPeer> chats:Vector<Chat> users:Vector<User> = contacts.SponsoredPeers;
starGiftAttributeIdModel#48aaae3c document_id:long = StarGiftAttributeId;
starGiftAttributeIdPattern#4a162433 document_id:long = StarGiftAttributeId;
starGiftAttributeIdBackdrop#1f01c757 backdrop_id:int = StarGiftAttributeId;
starGiftAttributeCounter#2eb1b658 attribute:StarGiftAttributeId count:int = StarGiftAttributeCounter;
payments.resaleStarGifts#947a12df flags:# count:int gifts:Vector<StarGift> next_offset:flags.0?string attributes:flags.1?Vector<StarGiftAttribute> attributes_hash:flags.1?long chats:Vector<Chat> counters:flags.2?Vector<StarGiftAttributeCounter> users:Vector<User> = payments.ResaleStarGifts;
stories.canSendStoryCount#c387c04e count_remains:int = stories.CanSendStoryCount;
pendingSuggestion#e7e82e12 suggestion:string title:TextWithEntities description:TextWithEntities url:string = PendingSuggestion;
---functions--- ---functions---
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
@ -2479,6 +2499,7 @@ channels.setEmojiStickers#3cd930b7 channel:InputChannel stickerset:InputStickerS
channels.restrictSponsoredMessages#9ae91519 channel:InputChannel restricted:Bool = Updates; channels.restrictSponsoredMessages#9ae91519 channel:InputChannel restricted:Bool = Updates;
channels.searchPosts#d19f987b hashtag:string offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages; channels.searchPosts#d19f987b hashtag:string offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
channels.updatePaidMessagesPrice#fc84653f channel:InputChannel send_paid_messages_stars:long = Updates; channels.updatePaidMessagesPrice#fc84653f channel:InputChannel send_paid_messages_stars:long = Updates;
channels.toggleAutotranslation#167fc0a1 channel:InputChannel enabled:Bool = Updates;
bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON; bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON;
bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool; bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool;
@ -2559,6 +2580,8 @@ payments.getStarGiftWithdrawalUrl#d06e93a8 stargift:InputSavedStarGift password:
payments.toggleChatStarGiftNotifications#60eaefa1 flags:# enabled:flags.0?true peer:InputPeer = Bool; payments.toggleChatStarGiftNotifications#60eaefa1 flags:# enabled:flags.0?true peer:InputPeer = Bool;
payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector<InputSavedStarGift> = Bool; payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector<InputSavedStarGift> = Bool;
payments.canPurchaseStore#4fdc5ea7 purpose:InputStorePaymentPurpose = Bool; payments.canPurchaseStore#4fdc5ea7 purpose:InputStorePaymentPurpose = Bool;
payments.getResaleStarGifts#7a5fa236 flags:# sort_by_price:flags.1?true sort_by_num:flags.2?true attributes_hash:flags.0?long gift_id:long attributes:flags.3?Vector<StarGiftAttributeId> offset:string limit:int = payments.ResaleStarGifts;
payments.updateStarGiftPrice#3baea4e1 stargift:InputSavedStarGift resell_stars:long = Updates;
stickers.createStickerSet#9021ab67 flags:# masks:flags.0?true emojis:flags.5?true text_color:flags.6?true user_id:InputUser title:string short_name:string thumb:flags.2?InputDocument stickers:Vector<InputStickerSetItem> software:flags.3?string = messages.StickerSet; stickers.createStickerSet#9021ab67 flags:# masks:flags.0?true emojis:flags.5?true text_color:flags.6?true user_id:InputUser title:string short_name:string thumb:flags.2?InputDocument stickers:Vector<InputStickerSetItem> software:flags.3?string = messages.StickerSet;
stickers.removeStickerFromSet#f7760f51 sticker:InputDocument = messages.StickerSet; stickers.removeStickerFromSet#f7760f51 sticker:InputDocument = messages.StickerSet;
@ -2573,7 +2596,7 @@ stickers.deleteStickerSet#87704394 stickerset:InputStickerSet = Bool;
stickers.replaceSticker#4696459a sticker:InputDocument new_sticker:InputStickerSetItem = messages.StickerSet; stickers.replaceSticker#4696459a sticker:InputDocument new_sticker:InputStickerSetItem = messages.StickerSet;
phone.getCallConfig#55451fa9 = DataJSON; phone.getCallConfig#55451fa9 = DataJSON;
phone.requestCall#a6c4600c flags:# video:flags.0?true user_id:InputUser conference_call:flags.1?InputGroupCall random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall; phone.requestCall#42ff96ed flags:# video:flags.0?true user_id:InputUser random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.acceptCall#3bd2b4a0 peer:InputPhoneCall g_b:bytes protocol:PhoneCallProtocol = phone.PhoneCall; phone.acceptCall#3bd2b4a0 peer:InputPhoneCall g_b:bytes protocol:PhoneCallProtocol = phone.PhoneCall;
phone.confirmCall#2efe1722 peer:InputPhoneCall g_a:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall; phone.confirmCall#2efe1722 peer:InputPhoneCall g_a:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall;
phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool; phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool;
@ -2582,7 +2605,7 @@ phone.setCallRating#59ead627 flags:# user_initiative:flags.0?true peer:InputPhon
phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool; phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool;
phone.sendSignalingData#ff7a9383 peer:InputPhoneCall data:bytes = Bool; phone.sendSignalingData#ff7a9383 peer:InputPhoneCall data:bytes = Bool;
phone.createGroupCall#48cdc6d8 flags:# rtmp_stream:flags.2?true peer:InputPeer random_id:int title:flags.0?string schedule_date:flags.1?int = Updates; phone.createGroupCall#48cdc6d8 flags:# rtmp_stream:flags.2?true peer:InputPeer random_id:int title:flags.0?string schedule_date:flags.1?int = Updates;
phone.joinGroupCall#d61e1df3 flags:# muted:flags.0?true video_stopped:flags.2?true call:InputGroupCall join_as:InputPeer invite_hash:flags.1?string key_fingerprint:flags.3?long params:DataJSON = Updates; phone.joinGroupCall#8fb53057 flags:# muted:flags.0?true video_stopped:flags.2?true call:InputGroupCall join_as:InputPeer invite_hash:flags.1?string public_key:flags.3?int256 block:flags.3?bytes params:DataJSON = Updates;
phone.leaveGroupCall#500377f9 call:InputGroupCall source:int = Updates; phone.leaveGroupCall#500377f9 call:InputGroupCall source:int = Updates;
phone.inviteToGroupCall#7b393160 call:InputGroupCall users:Vector<InputUser> = Updates; phone.inviteToGroupCall#7b393160 call:InputGroupCall users:Vector<InputUser> = Updates;
phone.discardGroupCall#7a777135 call:InputGroupCall = Updates; phone.discardGroupCall#7a777135 call:InputGroupCall = Updates;
@ -2603,7 +2626,12 @@ phone.leaveGroupCallPresentation#1c50d144 call:InputGroupCall = Updates;
phone.getGroupCallStreamChannels#1ab21940 call:InputGroupCall = phone.GroupCallStreamChannels; phone.getGroupCallStreamChannels#1ab21940 call:InputGroupCall = phone.GroupCallStreamChannels;
phone.getGroupCallStreamRtmpUrl#deb3abbf peer:InputPeer revoke:Bool = phone.GroupCallStreamRtmpUrl; phone.getGroupCallStreamRtmpUrl#deb3abbf peer:InputPeer revoke:Bool = phone.GroupCallStreamRtmpUrl;
phone.saveCallLog#41248786 peer:InputPhoneCall file:InputFile = Bool; phone.saveCallLog#41248786 peer:InputPhoneCall file:InputFile = Bool;
phone.createConferenceCall#dfc909ab peer:InputPhoneCall key_fingerprint:long = phone.PhoneCall; phone.createConferenceCall#7d0444bb flags:# muted:flags.0?true video_stopped:flags.2?true join:flags.3?true random_id:int public_key:flags.3?int256 block:flags.3?bytes params:flags.3?DataJSON = Updates;
phone.deleteConferenceCallParticipants#8ca60525 flags:# only_left:flags.0?true kick:flags.1?true call:InputGroupCall ids:Vector<long> block:bytes = Updates;
phone.sendConferenceCallBroadcast#c6701900 call:InputGroupCall block:bytes = Updates;
phone.inviteConferenceCallParticipant#bcf22685 flags:# video:flags.0?true call:InputGroupCall user_id:InputUser = Updates;
phone.declineConferenceCallInvite#3c479971 msg_id:int = Updates;
phone.getGroupCallChainBlocks#ee9f88a6 call:InputGroupCall sub_chain_id:int offset:int limit:int = Updates;
langpack.getLangPack#f2f2330a lang_pack:string lang_code:string = LangPackDifference; langpack.getLangPack#f2f2330a lang_pack:string lang_code:string = LangPackDifference;
langpack.getStrings#efea3803 lang_pack:string lang_code:string keys:Vector<string> = Vector<LangPackString>; langpack.getStrings#efea3803 lang_pack:string lang_code:string keys:Vector<string> = Vector<LangPackString>;
@ -2636,7 +2664,7 @@ chatlists.hideChatlistUpdates#66e486fb chatlist:InputChatlist = Bool;
chatlists.getLeaveChatlistSuggestions#fdbcd714 chatlist:InputChatlist = Vector<Peer>; chatlists.getLeaveChatlistSuggestions#fdbcd714 chatlist:InputChatlist = Vector<Peer>;
chatlists.leaveChatlist#74fae13a chatlist:InputChatlist peers:Vector<InputPeer> = Updates; chatlists.leaveChatlist#74fae13a chatlist:InputChatlist peers:Vector<InputPeer> = Updates;
stories.canSendStory#c7dfdfdd peer:InputPeer = Bool; stories.canSendStory#30eb63f0 peer:InputPeer = stories.CanSendStoryCount;
stories.sendStory#e4e6694b flags:# pinned:flags.2?true noforwards:flags.4?true fwd_modified:flags.7?true peer:InputPeer media:InputMedia media_areas:flags.5?Vector<MediaArea> caption:flags.0?string entities:flags.1?Vector<MessageEntity> privacy_rules:Vector<InputPrivacyRule> random_id:long period:flags.3?int fwd_from_id:flags.6?InputPeer fwd_from_story:flags.6?int = Updates; stories.sendStory#e4e6694b flags:# pinned:flags.2?true noforwards:flags.4?true fwd_modified:flags.7?true peer:InputPeer media:InputMedia media_areas:flags.5?Vector<MediaArea> caption:flags.0?string entities:flags.1?Vector<MessageEntity> privacy_rules:Vector<InputPrivacyRule> random_id:long period:flags.3?int fwd_from_id:flags.6?InputPeer fwd_from_story:flags.6?int = Updates;
stories.editStory#b583ba46 flags:# peer:InputPeer id:int media:flags.0?InputMedia media_areas:flags.3?Vector<MediaArea> caption:flags.1?string entities:flags.1?Vector<MessageEntity> privacy_rules:flags.2?Vector<InputPrivacyRule> = Updates; stories.editStory#b583ba46 flags:# peer:InputPeer id:int media:flags.0?InputMedia media_areas:flags.3?Vector<MediaArea> caption:flags.1?string entities:flags.1?Vector<MessageEntity> privacy_rules:flags.2?Vector<InputPrivacyRule> = Updates;
stories.deleteStories#ae59db5f peer:InputPeer id:Vector<int> = Vector<int>; stories.deleteStories#ae59db5f peer:InputPeer id:Vector<int> = Vector<int>;

View File

@ -94,202 +94,208 @@ $icons-map: (
"comments": "\f139", "comments": "\f139",
"copy-media": "\f13a", "copy-media": "\f13a",
"copy": "\f13b", "copy": "\f13b",
"crown-take-off": "\f13c", "crown-take-off-outline": "\f13c",
"crown-wear": "\f13d", "crown-take-off": "\f13d",
"darkmode": "\f13e", "crown-wear-outline": "\f13e",
"data": "\f13f", "crown-wear": "\f13f",
"delete-filled": "\f140", "darkmode": "\f140",
"delete-left": "\f141", "data": "\f141",
"delete-user": "\f142", "delete-filled": "\f142",
"delete": "\f143", "delete-left": "\f143",
"diamond": "\f144", "delete-user": "\f144",
"document": "\f145", "delete": "\f145",
"double-badge": "\f146", "diamond": "\f146",
"down": "\f147", "document": "\f147",
"download": "\f148", "double-badge": "\f148",
"eats": "\f149", "down": "\f149",
"edit": "\f14a", "download": "\f14a",
"email": "\f14b", "eats": "\f14b",
"enter": "\f14c", "edit": "\f14c",
"expand-modal": "\f14d", "email": "\f14d",
"expand": "\f14e", "enter": "\f14e",
"eye-crossed-outline": "\f14f", "expand-modal": "\f14f",
"eye-crossed": "\f150", "expand": "\f150",
"eye-outline": "\f151", "eye-crossed-outline": "\f151",
"eye": "\f152", "eye-crossed": "\f152",
"favorite-filled": "\f153", "eye-outline": "\f153",
"favorite": "\f154", "eye": "\f154",
"file-badge": "\f155", "favorite-filled": "\f155",
"flag": "\f156", "favorite": "\f156",
"folder-badge": "\f157", "file-badge": "\f157",
"folder": "\f158", "flag": "\f158",
"fontsize": "\f159", "folder-badge": "\f159",
"forums": "\f15a", "folder": "\f15a",
"forward": "\f15b", "fontsize": "\f15b",
"fragment": "\f15c", "forums": "\f15c",
"frozen-time": "\f15d", "forward": "\f15d",
"fullscreen": "\f15e", "fragment": "\f15e",
"gifs": "\f15f", "frozen-time": "\f15f",
"gift": "\f160", "fullscreen": "\f160",
"group-filled": "\f161", "gifs": "\f161",
"group": "\f162", "gift": "\f162",
"grouped-disable": "\f163", "group-filled": "\f163",
"grouped": "\f164", "group": "\f164",
"hand-stop": "\f165", "grouped-disable": "\f165",
"hashtag": "\f166", "grouped": "\f166",
"heart-outline": "\f167", "hand-stop": "\f167",
"heart": "\f168", "hashtag": "\f168",
"help": "\f169", "heart-outline": "\f169",
"info-filled": "\f16a", "heart": "\f16a",
"info": "\f16b", "help": "\f16b",
"install": "\f16c", "info-filled": "\f16c",
"italic": "\f16d", "info": "\f16d",
"key": "\f16e", "install": "\f16e",
"keyboard": "\f16f", "italic": "\f16f",
"lamp": "\f170", "key": "\f170",
"language": "\f171", "keyboard": "\f171",
"large-pause": "\f172", "lamp": "\f172",
"large-play": "\f173", "language": "\f173",
"link-badge": "\f174", "large-pause": "\f174",
"link-broken": "\f175", "large-play": "\f175",
"link": "\f176", "link-badge": "\f176",
"location": "\f177", "link-broken": "\f177",
"lock-badge": "\f178", "link": "\f178",
"lock": "\f179", "location": "\f179",
"logout": "\f17a", "lock-badge": "\f17a",
"loop": "\f17b", "lock": "\f17b",
"mention": "\f17c", "logout": "\f17c",
"message-failed": "\f17d", "loop": "\f17d",
"message-pending": "\f17e", "mention": "\f17e",
"message-read": "\f17f", "message-failed": "\f17f",
"message-succeeded": "\f180", "message-pending": "\f180",
"message": "\f181", "message-read": "\f181",
"microphone-alt": "\f182", "message-succeeded": "\f182",
"microphone": "\f183", "message": "\f183",
"monospace": "\f184", "microphone-alt": "\f184",
"more-circle": "\f185", "microphone": "\f185",
"more": "\f186", "monospace": "\f186",
"move-caption-down": "\f187", "more-circle": "\f187",
"move-caption-up": "\f188", "more": "\f188",
"mute": "\f189", "move-caption-down": "\f189",
"muted": "\f18a", "move-caption-up": "\f18a",
"my-notes": "\f18b", "mute": "\f18b",
"new-chat-filled": "\f18c", "muted": "\f18c",
"next": "\f18d", "my-notes": "\f18d",
"nochannel": "\f18e", "new-chat-filled": "\f18e",
"noise-suppression": "\f18f", "next": "\f18f",
"non-contacts": "\f190", "nochannel": "\f190",
"one-filled": "\f191", "noise-suppression": "\f191",
"open-in-new-tab": "\f192", "non-contacts": "\f192",
"password-off": "\f193", "one-filled": "\f193",
"pause": "\f194", "open-in-new-tab": "\f194",
"permissions": "\f195", "password-off": "\f195",
"phone-discard-outline": "\f196", "pause": "\f196",
"phone-discard": "\f197", "permissions": "\f197",
"phone": "\f198", "phone-discard-outline": "\f198",
"photo": "\f199", "phone-discard": "\f199",
"pin-badge": "\f19a", "phone": "\f19a",
"pin-list": "\f19b", "photo": "\f19b",
"pin": "\f19c", "pin-badge": "\f19c",
"pinned-chat": "\f19d", "pin-list": "\f19d",
"pinned-message": "\f19e", "pin": "\f19e",
"pip": "\f19f", "pinned-chat": "\f19f",
"play-story": "\f1a0", "pinned-message": "\f1a0",
"play": "\f1a1", "pip": "\f1a1",
"poll": "\f1a2", "play-story": "\f1a2",
"previous": "\f1a3", "play": "\f1a3",
"privacy-policy": "\f1a4", "poll": "\f1a4",
"proof-of-ownership": "\f1a5", "previous": "\f1a5",
"quote-text": "\f1a6", "privacy-policy": "\f1a6",
"quote": "\f1a7", "proof-of-ownership": "\f1a7",
"radial-badge": "\f1a8", "quote-text": "\f1a8",
"readchats": "\f1a9", "quote": "\f1a9",
"recent": "\f1aa", "radial-badge": "\f1aa",
"reload": "\f1ab", "readchats": "\f1ab",
"remove-quote": "\f1ac", "recent": "\f1ac",
"remove": "\f1ad", "reload": "\f1ad",
"reopen-topic": "\f1ae", "remove-quote": "\f1ae",
"replace": "\f1af", "remove": "\f1af",
"replies": "\f1b0", "reopen-topic": "\f1b0",
"reply-filled": "\f1b1", "replace": "\f1b1",
"reply": "\f1b2", "replies": "\f1b2",
"revenue-split": "\f1b3", "reply-filled": "\f1b3",
"revote": "\f1b4", "reply": "\f1b4",
"save-story": "\f1b5", "revenue-split": "\f1b5",
"saved-messages": "\f1b6", "revote": "\f1b6",
"schedule": "\f1b7", "save-story": "\f1b7",
"search": "\f1b8", "saved-messages": "\f1b8",
"select": "\f1b9", "schedule": "\f1b9",
"send-outline": "\f1ba", "search": "\f1ba",
"send": "\f1bb", "select": "\f1bb",
"settings-filled": "\f1bc", "sell-outline": "\f1bc",
"settings": "\f1bd", "sell": "\f1bd",
"share-filled": "\f1be", "send-outline": "\f1be",
"share-screen-outlined": "\f1bf", "send": "\f1bf",
"share-screen-stop": "\f1c0", "settings-filled": "\f1c0",
"share-screen": "\f1c1", "settings": "\f1c1",
"show-message": "\f1c2", "share-filled": "\f1c2",
"sidebar": "\f1c3", "share-screen-outlined": "\f1c3",
"skip-next": "\f1c4", "share-screen-stop": "\f1c4",
"skip-previous": "\f1c5", "share-screen": "\f1c5",
"smallscreen": "\f1c6", "show-message": "\f1c6",
"smile": "\f1c7", "sidebar": "\f1c7",
"sort": "\f1c8", "skip-next": "\f1c8",
"speaker-muted-story": "\f1c9", "skip-previous": "\f1c9",
"speaker-outline": "\f1ca", "smallscreen": "\f1ca",
"speaker-story": "\f1cb", "smile": "\f1cb",
"speaker": "\f1cc", "sort": "\f1cc",
"spoiler-disable": "\f1cd", "speaker-muted-story": "\f1cd",
"spoiler": "\f1ce", "speaker-outline": "\f1ce",
"sport": "\f1cf", "speaker-story": "\f1cf",
"star": "\f1d0", "speaker": "\f1d0",
"stars-lock": "\f1d1", "spoiler-disable": "\f1d1",
"stats": "\f1d2", "spoiler": "\f1d2",
"stealth-future": "\f1d3", "sport": "\f1d3",
"stealth-past": "\f1d4", "star": "\f1d4",
"stickers": "\f1d5", "stars-lock": "\f1d5",
"stop-raising-hand": "\f1d6", "stats": "\f1d6",
"stop": "\f1d7", "stealth-future": "\f1d7",
"story-caption": "\f1d8", "stealth-past": "\f1d8",
"story-expired": "\f1d9", "stickers": "\f1d9",
"story-priority": "\f1da", "stop-raising-hand": "\f1da",
"story-reply": "\f1db", "stop": "\f1db",
"strikethrough": "\f1dc", "story-caption": "\f1dc",
"tag-add": "\f1dd", "story-expired": "\f1dd",
"tag-crossed": "\f1de", "story-priority": "\f1de",
"tag-filter": "\f1df", "story-reply": "\f1df",
"tag-name": "\f1e0", "strikethrough": "\f1e0",
"tag": "\f1e1", "tag-add": "\f1e1",
"timer": "\f1e2", "tag-crossed": "\f1e2",
"toncoin": "\f1e3", "tag-filter": "\f1e3",
"trade": "\f1e4", "tag-name": "\f1e4",
"transcribe": "\f1e5", "tag": "\f1e5",
"truck": "\f1e6", "timer": "\f1e6",
"unarchive": "\f1e7", "toncoin": "\f1e7",
"underlined": "\f1e8", "trade": "\f1e8",
"unique-profile": "\f1e9", "transcribe": "\f1e9",
"unlock-badge": "\f1ea", "truck": "\f1ea",
"unlock": "\f1eb", "unarchive": "\f1eb",
"unmute": "\f1ec", "underlined": "\f1ec",
"unpin": "\f1ed", "unique-profile": "\f1ed",
"unread": "\f1ee", "unlist-outline": "\f1ee",
"up": "\f1ef", "unlist": "\f1ef",
"user-filled": "\f1f0", "unlock-badge": "\f1f0",
"user-online": "\f1f1", "unlock": "\f1f1",
"user": "\f1f2", "unmute": "\f1f2",
"video-outlined": "\f1f3", "unpin": "\f1f3",
"video-stop": "\f1f4", "unread": "\f1f4",
"video": "\f1f5", "up": "\f1f5",
"view-once": "\f1f6", "user-filled": "\f1f6",
"voice-chat": "\f1f7", "user-online": "\f1f7",
"volume-1": "\f1f8", "user": "\f1f8",
"volume-2": "\f1f9", "video-outlined": "\f1f9",
"volume-3": "\f1fa", "video-stop": "\f1fa",
"web": "\f1fb", "video": "\f1fb",
"webapp": "\f1fc", "view-once": "\f1fc",
"word-wrap": "\f1fd", "voice-chat": "\f1fd",
"zoom-in": "\f1fe", "volume-1": "\f1fe",
"zoom-out": "\f1ff", "volume-2": "\f1ff",
"volume-3": "\f200",
"web": "\f201",
"webapp": "\f202",
"word-wrap": "\f203",
"zoom-in": "\f204",
"zoom-out": "\f205",
); );
.icon-active-sessions::before { .icon-active-sessions::before {
@ -469,9 +475,15 @@ $icons-map: (
.icon-copy::before { .icon-copy::before {
content: map.get($icons-map, "copy"); content: map.get($icons-map, "copy");
} }
.icon-crown-take-off-outline::before {
content: map.get($icons-map, "crown-take-off-outline");
}
.icon-crown-take-off::before { .icon-crown-take-off::before {
content: map.get($icons-map, "crown-take-off"); content: map.get($icons-map, "crown-take-off");
} }
.icon-crown-wear-outline::before {
content: map.get($icons-map, "crown-wear-outline");
}
.icon-crown-wear::before { .icon-crown-wear::before {
content: map.get($icons-map, "crown-wear"); content: map.get($icons-map, "crown-wear");
} }
@ -847,6 +859,12 @@ $icons-map: (
.icon-select::before { .icon-select::before {
content: map.get($icons-map, "select"); content: map.get($icons-map, "select");
} }
.icon-sell-outline::before {
content: map.get($icons-map, "sell-outline");
}
.icon-sell::before {
content: map.get($icons-map, "sell");
}
.icon-send-outline::before { .icon-send-outline::before {
content: map.get($icons-map, "send-outline"); content: map.get($icons-map, "send-outline");
} }
@ -991,6 +1009,12 @@ $icons-map: (
.icon-unique-profile::before { .icon-unique-profile::before {
content: map.get($icons-map, "unique-profile"); content: map.get($icons-map, "unique-profile");
} }
.icon-unlist-outline::before {
content: map.get($icons-map, "unlist-outline");
}
.icon-unlist::before {
content: map.get($icons-map, "unlist");
}
.icon-unlock-badge::before { .icon-unlock-badge::before {
content: map.get($icons-map, "unlock-badge"); content: map.get($icons-map, "unlock-badge");
} }

Binary file not shown.

Binary file not shown.

View File

@ -58,7 +58,9 @@ export type FontIconName =
| 'comments' | 'comments'
| 'copy-media' | 'copy-media'
| 'copy' | 'copy'
| 'crown-take-off-outline'
| 'crown-take-off' | 'crown-take-off'
| 'crown-wear-outline'
| 'crown-wear' | 'crown-wear'
| 'darkmode' | 'darkmode'
| 'data' | 'data'
@ -184,6 +186,8 @@ export type FontIconName =
| 'schedule' | 'schedule'
| 'search' | 'search'
| 'select' | 'select'
| 'sell-outline'
| 'sell'
| 'send-outline' | 'send-outline'
| 'send' | 'send'
| 'settings-filled' | 'settings-filled'
@ -232,6 +236,8 @@ export type FontIconName =
| 'unarchive' | 'unarchive'
| 'underlined' | 'underlined'
| 'unique-profile' | 'unique-profile'
| 'unlist-outline'
| 'unlist'
| 'unlock-badge' | 'unlock-badge'
| 'unlock' | 'unlock'
| 'unmute' | 'unmute'

View File

@ -1235,6 +1235,7 @@ export interface LangPair {
'GiftInfoWear': undefined; 'GiftInfoWear': undefined;
'GiftInfoTakeOff': undefined; 'GiftInfoTakeOff': undefined;
'GiftInfoTransfer': undefined; 'GiftInfoTransfer': undefined;
'GiftInfoUnlist': undefined;
'GiftTransferTitle': undefined; 'GiftTransferTitle': undefined;
'GiftTransferTON': undefined; 'GiftTransferTON': undefined;
'GiftTransferConfirmButtonFree': undefined; 'GiftTransferConfirmButtonFree': undefined;
@ -1502,6 +1503,13 @@ export interface LangPair {
'ActionPaidMessageGroupPriceFree': undefined; 'ActionPaidMessageGroupPriceFree': undefined;
'NotificationTitleNotSupportedInFrozenAccount': undefined; 'NotificationTitleNotSupportedInFrozenAccount': undefined;
'NotificationMessageNotSupportedInFrozenAccount': undefined; 'NotificationMessageNotSupportedInFrozenAccount': undefined;
'GiftRibbonSale': undefined;
'StarsGiftBought': undefined;
'GiftSellTitle': undefined;
'Sell': undefined;
'InputPlaceholderGiftResalePrice': undefined;
'StarGiftSaleTransaction': undefined;
'StarGiftPurchaseTransaction': undefined;
'ContextMenuItemMention': undefined; 'ContextMenuItemMention': undefined;
} }
@ -2411,6 +2419,48 @@ export interface LangPairWithVariables<V extends unknown = LangVariable> {
'user': V; 'user': V;
'stars': V; 'stars': V;
}; };
'NotificationGiftIsSale': {
'gift': V;
};
'NotificationGiftIsUnlist': {
'gift': V;
};
'ButtonBuyGift': {
'stars': V;
};
'GiftInfoBuyGift': {
'user': V;
};
'ButtonSellGift': {
'stars': V;
};
'DescriptionComposerGiftResalePrice': {
'stars': V;
};
'DescriptionComposerGiftMinimumPrice': {
'stars': V;
};
'ApiMessageMessageActionResaleStarGiftUniqueOutgoing': {
'stars': V;
'gift': V;
};
'ApiMessageMessageActionResaleStarGiftUniqueIncoming': {
'stars': V;
'gift': V;
};
'ModalStarsBalanceBarDescription': {
'stars': V;
};
'NotificationGiftCanResellAt': {
'date': V;
};
'NotificationGiftCanTransferAt': {
'date': V;
};
'GiftBuyConfirmDescription': {
'gift': V;
'stars': V;
};
'ComposerTitleForwardFrom': { 'ComposerTitleForwardFrom': {
'users': V; 'users': V;
}; };

View File

@ -12,7 +12,7 @@ export function formatStarsAsText(lang: LangFn, amount: number) {
return lang('StarsAmountText', { amount }, { pluralValue: amount }); return lang('StarsAmountText', { amount }, { pluralValue: amount });
} }
export function formatStarsAsIcon(lang: LangFn, amount: number, options?: { export function formatStarsAsIcon(lang: LangFn, amount: number | string, options?: {
asFont?: boolean; className?: string; containerClassName?: string; }) { asFont?: boolean; className?: string; containerClassName?: string; }) {
const { asFont, className, containerClassName } = options || {}; const { asFont, className, containerClassName } = options || {};
const icon = asFont const icon = asFont