From 97ba7652ff06e5876f5a72deae53e812f770821b Mon Sep 17 00:00:00 2001 From: teidesu Date: Sat, 15 May 2021 21:17:49 +0300 Subject: [PATCH] refactor: use constructor check instead of instanceof where possible this might just have introduced a bunch of errors, but ill test later --- packages/client/src/types/messages/message.ts | 30 +++--------- packages/core/src/base-client.ts | 14 +++--- packages/core/src/network/mtproto-session.ts | 8 ++-- .../src/network/transports/ws-obfuscated.ts | 4 +- packages/dispatcher/src/filters.ts | 46 +++++++++---------- 5 files changed, 42 insertions(+), 60 deletions(-) diff --git a/packages/client/src/types/messages/message.ts b/packages/client/src/types/messages/message.ts index 49360f5b..2f65f14e 100644 --- a/packages/client/src/types/messages/message.ts +++ b/packages/client/src/types/messages/message.ts @@ -10,29 +10,7 @@ import { import { TelegramClient } from '../../client' import { MessageEntity } from './message-entity' import { makeInspectable } from '../utils' -import { - Audio, - Contact, - Document, - Photo, - Dice, - Video, - Location, - LiveLocation, - Sticker, - Voice, - InputMediaLike, - Venue, - Poll, - Invoice, - Game, - WebPage, -} from '../media' -import { parseDocument } from '../media/document-utils' -import { - _callDiscardReasonFromTl, - CallDiscardReason, -} from '../calls/discard-reason' +import { InputMediaLike, WebPage } from '../media' import { _messageActionFromTl, MessageAction } from './message-action' import { _messageMediaFromTl, MessageMedia } from './message-media' @@ -694,7 +672,11 @@ export class Message { * @param clearMentions Whether to also clear mentions */ async read(clearMentions = false): Promise { - return this.client.readHistory(this.chat.inputPeer, this.raw.id, clearMentions) + return this.client.readHistory( + this.chat.inputPeer, + this.raw.id, + clearMentions + ) } } diff --git a/packages/core/src/base-client.ts b/packages/core/src/base-client.ts index 89e10113..bc67fb3c 100644 --- a/packages/core/src/base-client.ts +++ b/packages/core/src/base-client.ts @@ -511,11 +511,11 @@ export class BaseTelegramClient { } if ( - e instanceof FloodWaitError || - e instanceof SlowmodeWaitError || - e instanceof FloodTestPhoneWaitError + e.constructor === FloodWaitError || + e.constructor === SlowmodeWaitError || + e.constructor === FloodTestPhoneWaitError ) { - if (!(e instanceof SlowmodeWaitError)) { + if (e.constructor !== SlowmodeWaitError) { // SLOW_MODE_WAIT is chat-specific, not request-specific this._floodWaitedRequests[message._] = Date.now() + e.seconds * 1000 @@ -538,9 +538,9 @@ export class BaseTelegramClient { } if ( connection === this.primaryConnection && - (e instanceof PhoneMigrateError || - e instanceof UserMigrateError || - e instanceof NetworkMigrateError) + (e.constructor === PhoneMigrateError || + e.constructor === UserMigrateError || + e.constructor === NetworkMigrateError) ) { debug('Migrate error, new dc = %d', e.newDc) await this.changeDc(e.newDc) diff --git a/packages/core/src/network/mtproto-session.ts b/packages/core/src/network/mtproto-session.ts index 05e04d8e..3fe89e6e 100644 --- a/packages/core/src/network/mtproto-session.ts +++ b/packages/core/src/network/mtproto-session.ts @@ -70,9 +70,9 @@ export class MtprotoSession { if (!this._authKey) throw new Error('Keys are not set up!') const length = - message instanceof Buffer + message.constructor === Buffer ? message.length - : SerializationCounter.countNeededBytes(message) + : SerializationCounter.countNeededBytes(message as tl.TlObject) let padding = (32 /* header size */ + length + 12) /* min padding */ % 16 padding = 12 + (padding ? 16 - padding : 0) @@ -83,8 +83,8 @@ export class MtprotoSession { encryptedWriter.long(messageId) encryptedWriter.int32(seqNo) encryptedWriter.uint32(length) - if (message instanceof Buffer) encryptedWriter.raw(message) - else encryptedWriter.object(message) + if (message.constructor === Buffer) encryptedWriter.raw(message) + else encryptedWriter.object(message as tl.TlObject) encryptedWriter.raw(randomBytes(padding)) const innerData = encryptedWriter.result() diff --git a/packages/core/src/network/transports/ws-obfuscated.ts b/packages/core/src/network/transports/ws-obfuscated.ts index f6d72835..b8996471 100644 --- a/packages/core/src/network/transports/ws-obfuscated.ts +++ b/packages/core/src/network/transports/ws-obfuscated.ts @@ -77,8 +77,8 @@ export class ObfuscatedPacketCodec extends EventEmitter implements PacketCodec { feed(data: Buffer): void { const dec = this._decryptor!.decrypt(data) - if (dec instanceof Buffer) this._inner.feed(dec) - else dec.then((dec) => this._inner.feed(dec)) + if (dec.constructor === Buffer) this._inner.feed(dec) + else (dec as Promise).then((dec) => this._inner.feed(dec)) } reset(): void { diff --git a/packages/dispatcher/src/filters.ts b/packages/dispatcher/src/filters.ts index c7ea8e48..bb73461f 100644 --- a/packages/dispatcher/src/filters.ts +++ b/packages/dispatcher/src/filters.ts @@ -287,13 +287,13 @@ export namespace filters { * Filter messages generated by yourself (including Saved Messages) */ export const me: UpdateFilter = (msg) => - (msg.sender instanceof User && msg.sender.isSelf) || msg.isOutgoing + (msg.sender.constructor === User && msg.sender.isSelf) || msg.isOutgoing /** * Filter messages sent by bots */ export const bot: UpdateFilter = (msg) => - msg.sender instanceof User && msg.sender.isBot + msg.sender.constructor === User && msg.sender.isBot /** * Filter messages by chat type @@ -365,19 +365,19 @@ export namespace filters { * Filter messages containing a photo */ export const photo: UpdateFilter = (msg) => - msg.media instanceof Photo + msg.media?.constructor === Photo /** * Filter messages containing a dice */ export const dice: UpdateFilter = (msg) => - msg.media instanceof Dice + msg.media?.constructor === Dice /** * Filter messages containing a contact */ export const contact: UpdateFilter = (msg) => - msg.media instanceof Contact + msg.media?.constructor === Contact /** * Filter messages containing a document @@ -395,25 +395,25 @@ export namespace filters { * This will not match media like audio, video, voice */ export const document: UpdateFilter = (msg) => - msg.media instanceof Document + msg.media?.constructor === Document /** * Filter messages containing an audio file */ export const audio: UpdateFilter = (msg) => - msg.media instanceof Audio + msg.media?.constructor === Audio /** * Filter messages containing a voice note */ export const voice: UpdateFilter = (msg) => - msg.media instanceof Voice + msg.media?.constructor === Voice /** * Filter messages containing a sticker */ export const sticker: UpdateFilter = (msg) => - msg.media instanceof Sticker + msg.media?.constructor === Sticker /** * Filter messages containing a video. @@ -421,7 +421,7 @@ export namespace filters { * This includes videos, round messages and animations */ export const rawVideo: UpdateFilter = (msg) => - msg.media instanceof Video + msg.media?.constructor === Video /** * Filter messages containing a simple video. @@ -440,7 +440,7 @@ export namespace filters { > } > = (msg) => - msg.media instanceof Video && + msg.media?.constructor === Video && !msg.media.isAnimation && !msg.media.isRound @@ -462,7 +462,7 @@ export namespace filters { > } > = (msg) => - msg.media instanceof Video && + msg.media?.constructor === Video && msg.media.isAnimation && !msg.media.isRound @@ -481,7 +481,7 @@ export namespace filters { > } > = (msg) => - msg.media instanceof Video && + msg.media?.constructor === Video && !msg.media.isAnimation && msg.media.isRound @@ -499,37 +499,37 @@ export namespace filters { export const liveLocation: UpdateFilter< Message, { media: LiveLocation } - > = (msg) => msg.media instanceof LiveLocation + > = (msg) => msg.media?.constructor === LiveLocation /** * Filter messages containing a game. */ export const game: UpdateFilter = (msg) => - msg.media instanceof Game + msg.media?.constructor === Game /** * Filter messages containing a webpage preview. */ export const webpage: UpdateFilter = (msg) => - msg.media instanceof WebPage + msg.media?.constructor === WebPage /** * Filter messages containing a venue. */ export const venue: UpdateFilter = (msg) => - msg.media instanceof Venue + msg.media?.constructor === Venue /** * Filter messages containing a poll. */ export const poll: UpdateFilter = (msg) => - msg.media instanceof Poll + msg.media?.constructor === Poll /** * Filter messages containing an invoice. */ export const invoice: UpdateFilter = (msg) => - msg.media instanceof Invoice + msg.media?.constructor === Invoice /** * Filter objects that match a given regular expression @@ -550,13 +550,13 @@ export namespace filters { { match: RegExpMatchArray } > => (obj) => { let m: RegExpMatchArray | null = null - if (obj instanceof Message) { + if (obj?.constructor === Message) { m = obj.text.match(regex) - } else if (obj instanceof InlineQuery) { + } else if (obj?.constructor === InlineQuery) { m = obj.query.match(regex) - } else if (obj instanceof ChosenInlineResult) { + } else if (obj?.constructor === ChosenInlineResult) { m = obj.id.match(regex) - } else if (obj instanceof CallbackQuery) { + } else if (obj?.constructor === CallbackQuery) { if (obj.raw.data) m = obj.dataStr!.match(regex) }