Browse Source

Respect restriction_reason

master
Eduard Kuzmenko 3 years ago
parent
commit
602e242114
  1. 19
      src/components/chat/bubbles.ts
  2. 6
      src/components/chat/chat.ts
  3. 54
      src/components/peerProfile.ts
  4. 25
      src/helpers/restrictions.ts
  5. 3
      src/layer.d.ts
  6. 8
      src/lib/appManagers/appChatsManager.ts
  7. 3
      src/lib/appManagers/appDialogsManager.ts
  8. 61
      src/lib/appManagers/appMessagesManager.ts
  9. 21
      src/lib/appManagers/appPeersManager.ts
  10. 4
      src/lib/appManagers/appProfileManager.ts
  11. 8
      src/lib/appManagers/appUsersManager.ts
  12. 4
      src/lib/mtproto/mtprotoworker.ts
  13. 5
      src/scripts/in/schema_additional_params.json

19
src/components/chat/bubbles.ts

@ -2222,7 +2222,7 @@ export default class ChatBubbles {
const chatType = this.chat.type; const chatType = this.chat.type;
if(chatType === 'scheduled') { if(chatType === 'scheduled' || this.chat.isRestricted) {
lastMsgId = 0; lastMsgId = 0;
} }
@ -2296,7 +2296,7 @@ export default class ChatBubbles {
} }
// add last message, bc in getHistory will load < max_id // add last message, bc in getHistory will load < max_id
const additionMsgId = isJump || chatType === 'scheduled' ? 0 : topMessage; const additionMsgId = isJump || chatType === 'scheduled' || this.chat.isRestricted ? 0 : topMessage;
/* this.setPeerPromise = null; /* this.setPeerPromise = null;
this.preloader.detach(); this.preloader.detach();
@ -4103,7 +4103,7 @@ export default class ChatBubbles {
return promise; return promise;
} }
private renderEmptyPlaceholder(type: 'group' | 'saved' | 'noMessages' | 'noScheduledMessages' | 'greeting', bubble: HTMLElement, message: any, elements: (Node | string)[]) { private renderEmptyPlaceholder(type: 'group' | 'saved' | 'noMessages' | 'noScheduledMessages' | 'greeting' | 'restricted', bubble: HTMLElement, message: any, elements: (Node | string)[]) {
const BASE_CLASS = 'empty-bubble-placeholder'; const BASE_CLASS = 'empty-bubble-placeholder';
bubble.classList.add(BASE_CLASS, BASE_CLASS + '-' + type); bubble.classList.add(BASE_CLASS, BASE_CLASS + '-' + type);
@ -4112,6 +4112,10 @@ export default class ChatBubbles {
else if(type === 'saved') title = i18n('ChatYourSelfTitle'); else if(type === 'saved') title = i18n('ChatYourSelfTitle');
else if(type === 'noMessages' || type === 'greeting') title = i18n('NoMessages'); else if(type === 'noMessages' || type === 'greeting') title = i18n('NoMessages');
else if(type === 'noScheduledMessages') title = i18n('NoScheduledMessages'); else if(type === 'noScheduledMessages') title = i18n('NoScheduledMessages');
else if(type === 'restricted') {
title = document.createElement('span');
title.innerText = this.appPeersManager.getRestrictionReasonText(this.peerId);
}
title.classList.add('center', BASE_CLASS + '-title'); title.classList.add('center', BASE_CLASS + '-title');
elements.push(title); elements.push(title);
@ -4219,7 +4223,9 @@ export default class ChatBubbles {
const elements: (Node | string)[] = []; const elements: (Node | string)[] = [];
const isBot = this.appPeersManager.isBot(this.peerId); const isBot = this.appPeersManager.isBot(this.peerId);
if(isSponsored) { if(this.chat.isRestricted) {
this.renderEmptyPlaceholder('restricted', bubble, message, elements);
} else if(isSponsored) {
let text: LangPackKey, mid: number, startParam: string, callback: () => void; let text: LangPackKey, mid: number, startParam: string, callback: () => void;
bubble.classList.add('avoid-selection'); bubble.classList.add('avoid-selection');
@ -4368,7 +4374,7 @@ export default class ChatBubbles {
return; return;
} */ } */
if(side === 'bottom' && this.appPeersManager.isBroadcast(this.peerId)/* && false */) { if(side === 'bottom' && this.appPeersManager.isBroadcast(this.peerId) && !this.chat.isRestricted/* && false */) {
const {mid} = this.generateLocalMessageId(SPONSORED_MESSAGE_ID_OFFSET); const {mid} = this.generateLocalMessageId(SPONSORED_MESSAGE_ID_OFFSET);
if(value) { if(value) {
const middleware = this.getMiddleware(() => { const middleware = this.getMiddleware(() => {
@ -4420,7 +4426,7 @@ export default class ChatBubbles {
} }
} }
if(side === 'top' && value && this.appPeersManager.isBot(this.peerId)) { if(side === 'top' && value && this.appPeersManager.isBot(this.peerId) && !this.chat.isRestricted) {
this.log('inject bot description'); this.log('inject bot description');
const middleware = this.getMiddleware(); const middleware = this.getMiddleware();
@ -4450,6 +4456,7 @@ export default class ChatBubbles {
this.scrollable.loadedAll.bottom && this.scrollable.loadedAll.bottom &&
this.emptyPlaceholderMid === undefined && this.emptyPlaceholderMid === undefined &&
( (
this.chat.isRestricted ||
!this.appMessagesManager.getHistoryStorage(this.peerId).count || !this.appMessagesManager.getHistoryStorage(this.peerId).count ||
( (
Object.keys(this.bubbles).length && Object.keys(this.bubbles).length &&

6
src/components/chat/chat.ts

@ -75,7 +75,10 @@ export default class Chat extends EventListenerBase<{
public inited: boolean; public inited: boolean;
constructor(public appImManager: AppImManager, public isRestricted: boolean;
constructor(
public appImManager: AppImManager,
public appChatsManager: AppChatsManager, public appChatsManager: AppChatsManager,
public appDocsManager: AppDocsManager, public appDocsManager: AppDocsManager,
public appInlineBotsManager: AppInlineBotsManager, public appInlineBotsManager: AppInlineBotsManager,
@ -306,6 +309,7 @@ export default class Chat extends EventListenerBase<{
} }
this.noForwards = this.appPeersManager.noForwards(peerId); this.noForwards = this.appPeersManager.noForwards(peerId);
this.isRestricted = this.appPeersManager.isRestricted(peerId);
this.container.classList.toggle('no-forwards', this.noForwards); this.container.classList.toggle('no-forwards', this.noForwards);
appSidebarRight.sharedMediaTab.setPeer(peerId, this.threadId); appSidebarRight.sharedMediaTab.setPeer(peerId, this.threadId);

54
src/components/peerProfile.ts

@ -8,7 +8,7 @@ import IS_PARALLAX_SUPPORTED from "../environment/parallaxSupport";
import { copyTextToClipboard } from "../helpers/clipboard"; import { copyTextToClipboard } from "../helpers/clipboard";
import replaceContent from "../helpers/dom/replaceContent"; import replaceContent from "../helpers/dom/replaceContent";
import { fastRaf } from "../helpers/schedulers"; import { fastRaf } from "../helpers/schedulers";
import { User } from "../layer"; import { ChatFull, User } from "../layer";
import { Channel } from "../lib/appManagers/appChatsManager"; import { Channel } from "../lib/appManagers/appChatsManager";
import appImManager from "../lib/appManagers/appImManager"; import appImManager from "../lib/appManagers/appImManager";
import appMessagesManager from "../lib/appManagers/appMessagesManager"; import appMessagesManager from "../lib/appManagers/appMessagesManager";
@ -318,52 +318,28 @@ export default class PeerProfile {
const peerId = this.peerId; const peerId = this.peerId;
const threadId = this.threadId; const threadId = this.threadId;
if(!peerId) { if(!peerId || appPeersManager.isRestricted(peerId)) {
return; return;
} }
let promise: Promise<boolean>; Promise.resolve(appProfileManager.getProfileByPeerId(peerId, override)).then((peerFull) => {
if(peerId.isUser()) { if(this.peerId !== peerId || this.threadId !== threadId || appPeersManager.isRestricted(peerId)) {
promise = Promise.resolve(appProfileManager.getProfile(peerId, override)).then(userFull => { //this.log.warn('peer changed');
if(this.peerId !== peerId || this.threadId !== threadId) { return;
//this.log.warn('peer changed'); }
return false;
}
if(userFull.rAbout && peerId !== rootScope.myId) {
setText(userFull.rAbout, this.bio);
}
//this.log('userFull', userFull);
return true;
});
} else {
promise = Promise.resolve(appProfileManager.getChatFull(peerId.toChatId(), override)).then((chatFull) => {
if(this.peerId !== peerId || this.threadId !== threadId) {
//this.log.warn('peer changed');
return false;
}
//this.log('chatInfo res 2:', chatFull); //this.log('chatInfo res 2:', chatFull);
if(chatFull.about) { if(peerFull.about) {
setText(RichTextProcessor.wrapRichText(chatFull.about), this.bio); setText(RichTextProcessor.wrapRichText(peerFull.about), this.bio);
} }
if((peerFull as ChatFull.channelFull)?.location?._ == 'channelLocation') {
// @ts-ignore // @ts-ignore
if(chatFull?.location?._ == 'channelLocation') { setText(chatFull.location.address, this.location);
// @ts-ignore
setText(chatFull.location.address, this.location);
}
return true;
});
}
promise.then((canSetNext) => {
if(canSetNext) {
this.setMoreDetailsTimeout = window.setTimeout(() => this.setMoreDetails(true), 60e3);
} }
this.setMoreDetailsTimeout = window.setTimeout(() => this.setMoreDetails(true), 60e3);
}); });
} }

25
src/helpers/restrictions.ts

@ -0,0 +1,25 @@
import { RestrictionReason } from "../layer";
const platforms = new Set([
'all',
'web',
'webk'
]);
const ignore = new Set();
export function getRestrictionReason(reasons: RestrictionReason[]) {
// return reasons[0];
return reasons.find(reason => platforms.has(reason.platform) && !ignore.has(reason.reason));
}
export function isRestricted(reasons: RestrictionReason[]) {
return !!getRestrictionReason(reasons);
}
export function ignoreRestrictionReasons(reasons: string[]) {
ignore.clear();
reasons.forEach(reason => {
ignore.add(reason);
});
}

3
src/layer.d.ts vendored

@ -1655,8 +1655,7 @@ export namespace UserFull {
folder_id?: number, folder_id?: number,
ttl_period?: number, ttl_period?: number,
theme_emoticon?: string, theme_emoticon?: string,
private_forward_name?: string, private_forward_name?: string
rAbout?: string
}; };
} }

8
src/lib/appManagers/appChatsManager.ts

@ -11,6 +11,7 @@
import { MOUNT_CLASS_TO } from "../../config/debug"; import { MOUNT_CLASS_TO } from "../../config/debug";
import { isObject, safeReplaceObject, copy, deepEqual } from "../../helpers/object"; import { isObject, safeReplaceObject, copy, deepEqual } from "../../helpers/object";
import { isRestricted } from "../../helpers/restrictions";
import { ChannelParticipant, Chat, ChatAdminRights, ChatBannedRights, ChatParticipant, ChatPhoto, InputChannel, InputChatPhoto, InputFile, InputPeer, Update, Updates, ChannelsCreateChannel } from "../../layer"; import { ChannelParticipant, Chat, ChatAdminRights, ChatBannedRights, ChatParticipant, ChatPhoto, InputChannel, InputChatPhoto, InputFile, InputPeer, Update, Updates, ChannelsCreateChannel } from "../../layer";
import apiManagerProxy from "../mtproto/mtprotoworker"; import apiManagerProxy from "../mtproto/mtprotoworker";
import apiManager from '../mtproto/mtprotoworker'; import apiManager from '../mtproto/mtprotoworker';
@ -779,6 +780,13 @@ export class AppChatsManager {
apiUpdatesManager.processUpdateMessage(updates); apiUpdatesManager.processUpdateMessage(updates);
}); });
} }
public isRestricted(chatId: ChatId) {
const chat: Chat.channel = this.getChat(chatId);
const restrictionReasons = chat.restriction_reason;
return !!(chat.pFlags.restricted && restrictionReasons && isRestricted(restrictionReasons));
}
} }
const appChatsManager = new AppChatsManager(); const appChatsManager = new AppChatsManager();

3
src/lib/appManagers/appDialogsManager.ts

@ -1448,6 +1448,7 @@ export class AppDialogsManager {
} }
const peerId = dialog.peerId; const peerId = dialog.peerId;
const isRestricted = lastMessage && appMessagesManager.isRestricted(lastMessage);
//let peerId = appMessagesManager.getMessagePeer(lastMessage); //let peerId = appMessagesManager.getMessagePeer(lastMessage);
//console.log('setting last message:', lastMessage); //console.log('setting last message:', lastMessage);
@ -1455,7 +1456,7 @@ export class AppDialogsManager {
/* if(!dom.lastMessageSpan.classList.contains('user-typing')) */ { /* if(!dom.lastMessageSpan.classList.contains('user-typing')) */ {
let mediaContainer: HTMLElement; let mediaContainer: HTMLElement;
if(!lastMessage.deleted && !draftMessage) { if(!lastMessage.deleted && !draftMessage && !isRestricted) {
const media: MyDocument | MyPhoto = appMessagesManager.getMediaFromMessage(lastMessage); const media: MyDocument | MyPhoto = appMessagesManager.getMediaFromMessage(lastMessage);
if(media && (media._ === 'photo' || (['video', 'gif'] as MyDocument['type'][]).includes(media.type))) { if(media && (media._ === 'photo' || (['video', 'gif'] as MyDocument['type'][]).includes(media.type))) {
const size = appPhotosManager.choosePhotoSize(media, 20, 20); const size = appPhotosManager.choosePhotoSize(media, 20, 20);

61
src/lib/appManagers/appMessagesManager.ts

@ -17,7 +17,7 @@ import { createPosterForVideo } from "../../helpers/files";
import { copy, deepEqual, getObjectKeysAndSort } from "../../helpers/object"; import { copy, deepEqual, getObjectKeysAndSort } from "../../helpers/object";
import { randomLong } from "../../helpers/random"; import { randomLong } from "../../helpers/random";
import { splitStringByLength, limitSymbols, escapeRegExp } from "../../helpers/string"; import { splitStringByLength, limitSymbols, escapeRegExp } from "../../helpers/string";
import { Chat, ChatFull, Dialog as MTDialog, DialogPeer, DocumentAttribute, InputMedia, InputMessage, InputPeerNotifySettings, InputSingleMedia, Message, MessageAction, MessageEntity, MessageFwdHeader, MessageMedia, MessageReplies, MessageReplyHeader, MessagesDialogs, MessagesFilter, MessagesMessages, MethodDeclMap, NotifyPeer, PeerNotifySettings, PhotoSize, SendMessageAction, Update, Photo, Updates, ReplyMarkup, InputPeer, InputPhoto, InputDocument, InputGeoPoint, WebPage, GeoPoint, ReportReason, MessagesGetDialogs, InputChannel, InputDialogPeer, ReactionCount, MessagePeerReaction } from "../../layer"; import { Chat, ChatFull, Dialog as MTDialog, DialogPeer, DocumentAttribute, InputMedia, InputMessage, InputPeerNotifySettings, InputSingleMedia, Message, MessageAction, MessageEntity, MessageFwdHeader, MessageMedia, MessageReplies, MessageReplyHeader, MessagesDialogs, MessagesFilter, MessagesMessages, MethodDeclMap, NotifyPeer, PeerNotifySettings, PhotoSize, SendMessageAction, Update, Photo, Updates, ReplyMarkup, InputPeer, InputPhoto, InputDocument, InputGeoPoint, WebPage, GeoPoint, ReportReason, MessagesGetDialogs, InputChannel, InputDialogPeer, ReactionCount, MessagePeerReaction, MessagesSearchCounter } from "../../layer";
import { InvokeApiOptions } from "../../types"; import { InvokeApiOptions } from "../../types";
import I18n, { FormatterArguments, i18n, join, langPack, LangPackKey, UNSUPPORTED_LANG_PACK_KEY, _i18n } from "../langPack"; import I18n, { FormatterArguments, i18n, join, langPack, LangPackKey, UNSUPPORTED_LANG_PACK_KEY, _i18n } from "../langPack";
import { logger, LogTypes } from "../logger"; import { logger, LogTypes } from "../logger";
@ -64,6 +64,7 @@ import VIDEO_MIME_TYPES_SUPPORTED from "../../environment/videoMimeTypesSupport"
import './appGroupCallsManager'; import './appGroupCallsManager';
import appGroupCallsManager from "./appGroupCallsManager"; import appGroupCallsManager from "./appGroupCallsManager";
import appReactionsManager from "./appReactionsManager"; import appReactionsManager from "./appReactionsManager";
import { getRestrictionReason, isRestricted } from "../../helpers/restrictions";
//console.trace('include'); //console.trace('include');
// TODO: если удалить диалог находясь в папке, то он не удалится из папки и будет виден в настройках // TODO: если удалить диалог находясь в папке, то он не удалится из папки и будет виден в настройках
@ -2831,8 +2832,10 @@ export class AppMessagesManager {
} }
}; };
const isRestricted = this.isRestricted(message as any);
let entities = (message as Message.message).totalEntities; let entities = (message as Message.message).totalEntities;
if((message as Message.message).media) { if((message as Message.message).media && !isRestricted) {
assumeType<Message.message>(message); assumeType<Message.message>(message);
let usingFullAlbum = true; let usingFullAlbum = true;
if(message.grouped_id) { if(message.grouped_id) {
@ -2953,6 +2956,11 @@ export class AppMessagesManager {
} }
} }
if(isRestricted) {
text = getRestrictionReason((message as Message.message).restriction_reason).text;
entities = [];
}
if(text) { if(text) {
text = limitSymbols(text, 100); text = limitSymbols(text, 100);
@ -3616,7 +3624,18 @@ export class AppMessagesManager {
return this.searchesStorage[peerId][inputFilter]; return this.searchesStorage[peerId][inputFilter];
} }
public getSearchCounters(peerId: PeerId, filters: MessagesFilter[], canCache = true) { public getSearchCounters(peerId: PeerId, filters: MessagesFilter[], canCache = true): Promise<MessagesSearchCounter[]> {
if(appPeersManager.isRestricted(peerId)) {
return Promise.resolve(filters.map((filter) => {
return {
_: 'messages.searchCounter',
pFlags: {},
filter: filter,
count: 0
};
}));
}
const func = (canCache ? apiManager.invokeApiCacheable : apiManager.invokeApi).bind(apiManager); const func = (canCache ? apiManager.invokeApiCacheable : apiManager.invokeApi).bind(apiManager);
return func('messages.getSearchCounters', { return func('messages.getSearchCounters', {
peer: appPeersManager.getInputPeerById(peerId), peer: appPeersManager.getInputPeerById(peerId),
@ -3778,6 +3797,15 @@ export class AppMessagesManager {
offset_id_offset: number, offset_id_offset: number,
history: MyMessage[] history: MyMessage[]
}> { }> {
if(appPeersManager.isRestricted(peerId)) {
return Promise.resolve({
count: 0,
offset_id_offset: 0,
next_rate: undefined,
history: []
});
}
if(!query) query = ''; if(!query) query = '';
if(!inputFilter) inputFilter = {_: 'inputMessagesFilterEmpty'}; if(!inputFilter) inputFilter = {_: 'inputMessagesFilterEmpty'};
if(limit === undefined) limit = 20; if(limit === undefined) limit = 20;
@ -5260,6 +5288,10 @@ export class AppMessagesManager {
} }
public canSendToPeer(peerId: PeerId, threadId?: number, action: ChatRights = 'send_messages') { public canSendToPeer(peerId: PeerId, threadId?: number, action: ChatRights = 'send_messages') {
if(appPeersManager.isRestricted(peerId)) {
return false;
}
if(peerId.isAnyChat()) { if(peerId.isAnyChat()) {
//const isChannel = appPeersManager.isChannel(peerId); //const isChannel = appPeersManager.isChannel(peerId);
const chat: Chat.chat = appChatsManager.getChat(peerId.toChatId()); const chat: Chat.chat = appChatsManager.getChat(peerId.toChatId());
@ -5482,6 +5514,11 @@ export class AppMessagesManager {
peerTypeNotifySettings: PeerNotifySettings peerTypeNotifySettings: PeerNotifySettings
}> = {}) { }> = {}) {
const peerId = this.getMessagePeer(message); const peerId = this.getMessagePeer(message);
if(appPeersManager.isRestricted(peerId)) {
return;
}
const isAnyChat = peerId.isAnyChat(); const isAnyChat = peerId.isAnyChat();
const notification: NotifyOptions = {}; const notification: NotifyOptions = {};
const peerString = appPeersManager.getPeerString(peerId); const peerString = appPeersManager.getPeerString(peerId);
@ -5608,6 +5645,10 @@ export class AppMessagesManager {
return peerId.isAnyChat() && !appChatsManager.isInChat(peerId.toChatId()); return peerId.isAnyChat() && !appChatsManager.isInChat(peerId.toChatId());
} }
public isRestricted(message: Message.message) {
return !!(message.restriction_reason && isRestricted(message.restriction_reason));
}
public async getNewHistory(peerId: PeerId, threadId?: number) { public async getNewHistory(peerId: PeerId, threadId?: number) {
if(!this.isFetchIntervalNeeded(peerId)) { if(!this.isFetchIntervalNeeded(peerId)) {
return; return;
@ -5641,6 +5682,20 @@ export class AppMessagesManager {
public getHistory(peerId: PeerId, maxId = 0, limit: number, backLimit?: number, threadId?: number): Promise<HistoryResult> | HistoryResult { public getHistory(peerId: PeerId, maxId = 0, limit: number, backLimit?: number, threadId?: number): Promise<HistoryResult> | HistoryResult {
const historyStorage = this.getHistoryStorage(peerId, threadId); const historyStorage = this.getHistoryStorage(peerId, threadId);
if(appPeersManager.isRestricted(peerId)) {
const first = historyStorage.history.first;
first.setEnd(SliceEnd.Both);
const slice = first.slice(0, 0);
slice.setEnd(SliceEnd.Both);
return {
count: 0,
history: slice,
offsetIdOffset: 0
};
}
let offset = 0; let offset = 0;
/* /*
let offsetFound = true; let offsetFound = true;

21
src/lib/appManagers/appPeersManager.ts

@ -19,6 +19,7 @@ import appChatsManager from "./appChatsManager";
import appUsersManager from "./appUsersManager"; import appUsersManager from "./appUsersManager";
import I18n from '../langPack'; import I18n from '../langPack';
import { NULL_PEER_ID } from "../mtproto/mtproto_config"; import { NULL_PEER_ID } from "../mtproto/mtproto_config";
import { getRestrictionReason } from "../../helpers/restrictions";
// https://github.com/eelcohn/Telegram-API/wiki/Calculating-color-for-a-Telegram-user-on-IRC // https://github.com/eelcohn/Telegram-API/wiki/Calculating-color-for-a-Telegram-user-on-IRC
/* /*
@ -48,11 +49,15 @@ export class AppPeersManager {
} }
public getPeerPhoto(peerId: PeerId): UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto { public getPeerPhoto(peerId: PeerId): UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto {
if(this.isRestricted(peerId)) {
return;
}
const photo = peerId.isUser() const photo = peerId.isUser()
? appUsersManager.getUserPhoto(peerId.toUserId()) ? appUsersManager.getUserPhoto(peerId.toUserId())
: appChatsManager.getChatPhoto(peerId.toChatId()); : appChatsManager.getChatPhoto(peerId.toChatId());
return photo._ !== 'chatPhotoEmpty' && photo._ !== 'userProfilePhotoEmpty' ? photo : null; return photo._ !== 'chatPhotoEmpty' && photo._ !== 'userProfilePhotoEmpty' ? photo : undefined;
} }
public getPeerMigratedTo(peerId: PeerId) { public getPeerMigratedTo(peerId: PeerId) {
@ -187,6 +192,20 @@ export class AppPeersManager {
return !this.isUser(peerId); return !this.isUser(peerId);
} }
public isRestricted(peerId: PeerId) {
return peerId.isUser() ? appUsersManager.isRestricted(peerId.toUserId()) : appChatsManager.isRestricted(peerId.toChatId());
}
public getRestrictionReasonText(peerId: PeerId) {
const peer: Chat.channel | User.user = this.getPeer(peerId);
const reason = peer.restriction_reason ? getRestrictionReason(peer.restriction_reason) : undefined;
if(reason) {
return reason.text;
} else {
return peerId.isUser() ? 'This user is restricted' : 'This chat is restricted';
}
}
/* public getInputPeer(peerString: string): InputPeer { /* public getInputPeer(peerString: string): InputPeer {
var firstChar = peerString.charAt(0); var firstChar = peerString.charAt(0);
var peerParams = peerString.substr(1).split('_'); var peerParams = peerString.substr(1).split('_');

4
src/lib/appManagers/appProfileManager.ts

@ -178,10 +178,6 @@ export class AppProfileManager {
userFull.profile_photo = appPhotosManager.savePhoto(userFull.profile_photo, {type: 'profilePhoto', peerId}); userFull.profile_photo = appPhotosManager.savePhoto(userFull.profile_photo, {type: 'profilePhoto', peerId});
} }
if(userFull.about !== undefined) {
userFull.rAbout = RichTextProcessor.wrapRichText(userFull.about, {noLinebreaks: true});
}
appNotificationsManager.savePeerSettings({ appNotificationsManager.savePeerSettings({
peerId, peerId,
settings: userFull.notify_settings settings: userFull.notify_settings

8
src/lib/appManagers/appUsersManager.ts

@ -17,6 +17,7 @@ import cleanUsername from "../../helpers/cleanUsername";
import { formatFullSentTimeRaw, tsNow } from "../../helpers/date"; import { formatFullSentTimeRaw, tsNow } from "../../helpers/date";
import { formatPhoneNumber } from "../../helpers/formatPhoneNumber"; import { formatPhoneNumber } from "../../helpers/formatPhoneNumber";
import { safeReplaceObject, isObject } from "../../helpers/object"; import { safeReplaceObject, isObject } from "../../helpers/object";
import { isRestricted } from "../../helpers/restrictions";
import { Chat, InputContact, InputMedia, InputPeer, InputUser, User as MTUser, UserProfilePhoto, UserStatus, InputGeoPoint } from "../../layer"; import { Chat, InputContact, InputMedia, InputPeer, InputUser, User as MTUser, UserProfilePhoto, UserStatus, InputGeoPoint } from "../../layer";
import I18n, { i18n, LangPackKey } from "../langPack"; import I18n, { i18n, LangPackKey } from "../langPack";
//import apiManager from '../mtproto/apiManager'; //import apiManager from '../mtproto/apiManager';
@ -1016,6 +1017,13 @@ export class AppUsersManager {
}); });
}); });
} }
public isRestricted(userId: UserId) {
const user: MTUser.user = this.getUser(userId);
const restrictionReasons = user.restriction_reason;
return !!(user.pFlags.restricted && restrictionReasons && isRestricted(restrictionReasons));
}
} }
const appUsersManager = new AppUsersManager(); const appUsersManager = new AppUsersManager();

4
src/lib/mtproto/mtprotoworker.ts

@ -33,6 +33,7 @@ import { pause } from '../../helpers/schedulers/pause';
import IS_WEBP_SUPPORTED from '../../environment/webpSupport'; import IS_WEBP_SUPPORTED from '../../environment/webpSupport';
import type { ApiError } from './apiManager'; import type { ApiError } from './apiManager';
import { MTAppConfig } from './appConfig'; import { MTAppConfig } from './appConfig';
import { ignoreRestrictionReasons } from '../../helpers/restrictions';
type Task = { type Task = {
taskId: number, taskId: number,
@ -699,12 +700,13 @@ export class ApiManagerProxy extends CryptoWorkerMethods {
public getAppConfig(overwrite?: boolean) { public getAppConfig(overwrite?: boolean) {
if(rootScope.appConfig && !overwrite) return rootScope.appConfig; if(rootScope.appConfig && !overwrite) return rootScope.appConfig;
if(this.getAppConfigPromise && !overwrite) return this.getAppConfigPromise; if(this.getAppConfigPromise && !overwrite) return this.getAppConfigPromise;
const promise: Promise<MTAppConfig> = this.getAppConfigPromise = this.invokeApi('help.getAppConfig').then(config => { const promise: Promise<MTAppConfig> = this.getAppConfigPromise = this.invokeApi('help.getAppConfig').then((config: MTAppConfig) => {
if(this.getAppConfigPromise !== promise) { if(this.getAppConfigPromise !== promise) {
return this.getAppConfigPromise; return this.getAppConfigPromise;
} }
rootScope.appConfig = config; rootScope.appConfig = config;
ignoreRestrictionReasons(config.ignore_restriction_reasons ?? []);
return config; return config;
}); });

5
src/scripts/in/schema_additional_params.json

@ -112,11 +112,6 @@
{"name": "mid", "type": "number"}, {"name": "mid", "type": "number"},
{"name": "pFlags", "type": "{}"} {"name": "pFlags", "type": "{}"}
] ]
}, {
"predicate": "userFull",
"params": [
{"name": "rAbout", "type": "string"}
]
}, { }, {
"predicate": "messageEntityEmoji", "predicate": "messageEntityEmoji",
"params": [ "params": [

Loading…
Cancel
Save