feat(client): sticker choosing typing event
also prettier fucked everything up, fixed that
This commit is contained in:
parent
252f94a594
commit
9543f64558
20 changed files with 211 additions and 157 deletions
|
@ -26,13 +26,15 @@ export async function _normalizeCommandScope(
|
|||
const user = normalizeToInputUser(await this.resolvePeer(scope.user))
|
||||
|
||||
if (!user)
|
||||
throw new MtInvalidPeerTypeError(scope.user, 'u"user"
|
||||
; return {
|
||||
_: 'b"botCommandScopePeerUser" peer: chat,
|
||||
throw new MtInvalidPeerTypeError(scope.user, 'user')
|
||||
|
||||
return {
|
||||
_: 'botCommandScopePeerUser',
|
||||
peer: chat,
|
||||
userId: user
|
||||
}
|
||||
; }
|
||||
}
|
||||
default:
|
||||
assertNever(scope)
|
||||
; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import {
|
|||
ChatEvent, PeersIndex,
|
||||
} from '../../types'
|
||||
import { tl } from '@mtcute/tl'
|
||||
import { assertNever, MaybeArray } from '@mtcute/core'
|
||||
import { assertNever, MaybeArray } from "@mtcute/core";
|
||||
import {
|
||||
normalizeToInputChannel,
|
||||
normalizeToInputUser,
|
||||
|
@ -182,14 +182,17 @@ export async function* getChatEventLog(
|
|||
case 'user_joined_invite':
|
||||
// not documented so idk, enable all
|
||||
serverFilter!.join = true
|
||||
; serverFilter!.invite = true
|
||||
; serverFilter!.invites = true
|
||||
; break
|
||||
; case 'i"invite_deleted" case 'i"invite_edited" case 'i"invite_revoked" serverFilter!.invites = true
|
||||
; break
|
||||
; default:
|
||||
serverFilter!.invite = true
|
||||
serverFilter!.invites = true
|
||||
break
|
||||
case 'invite_deleted':
|
||||
case 'invite_edited':
|
||||
case 'invite_revoked':
|
||||
serverFilter!.invites = true
|
||||
break
|
||||
default:
|
||||
assertNever(type)
|
||||
; }
|
||||
}
|
||||
})
|
||||
} else {
|
||||
serverFilter = params.filters
|
||||
|
|
|
@ -127,15 +127,18 @@ export async function getChatMembers(
|
|||
case 'bots':
|
||||
filter = { _: 'channelParticipantsBots' }
|
||||
break
|
||||
; case 'r"recent" filter = { _: 'c"channelParticipantsRecent"
|
||||
; break
|
||||
; case 'a"admins" filter = { _: 'c"channelParticipantsAdmins"
|
||||
; break
|
||||
; case 'c"contacts" filter = { _: 'c"channelParticipantsContacts"q }
|
||||
; break
|
||||
; default:
|
||||
case 'recent':
|
||||
filter = { _: 'channelParticipantsRecent' }
|
||||
break
|
||||
case 'admins':
|
||||
filter = { _: 'channelParticipantsAdmins' }
|
||||
break
|
||||
case 'contacts':
|
||||
filter = { _: 'channelParticipantsContacts', q }
|
||||
break
|
||||
default:
|
||||
assertNever(type)
|
||||
; }
|
||||
}
|
||||
|
||||
const res = await this.call({
|
||||
_: 'channels.getParticipants',
|
||||
|
|
|
@ -80,11 +80,17 @@ export async function uploadMedia(
|
|||
case 'inputMediaPhoto':
|
||||
case 'inputMediaPhotoExternal':
|
||||
assertTypeIs('uploadMedia', res, 'messageMediaPhoto')
|
||||
assertTypeIs('u"uploadMedia"res.photo!, 'p"photo"
|
||||
; return new Photo(this, res.photo)
|
||||
; case 'i"inputMediaUploadedDocument" case 'i"inputMediaDocument" case 'i"inputMediaDocumentExternal" assertTypeIs('u"uploadMedia"res, 'm"messageMediaDocument" ; assertTypeIs('u"uploadMedia"res.document!, 'd"document"
|
||||
; return parseDocument(this, res.document) as any
|
||||
; default:
|
||||
assertTypeIs('uploadMedia', res.photo!, 'photo')
|
||||
|
||||
return new Photo(this, res.photo)
|
||||
case 'inputMediaUploadedDocument':
|
||||
case 'inputMediaDocument':
|
||||
case 'inputMediaDocumentExternal':
|
||||
assertTypeIs('uploadMedia', res, 'messageMediaDocument')
|
||||
assertTypeIs('uploadMedia', res.document!, 'document')
|
||||
|
||||
return parseDocument(this, res.document) as any
|
||||
default:
|
||||
assertNever(normMedia)
|
||||
; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,15 +71,21 @@ export async function sendTyping(
|
|||
case 'record_round':
|
||||
status = { _: 'sendMessageRecordRoundAction' }
|
||||
break
|
||||
; case 'u"upload_round" status = { _: 's"sendMessageUploadRoundAction"progress }
|
||||
; break
|
||||
; case 's"speak_call" status = { _: 's"speakingInGroupCallAction"
|
||||
; break
|
||||
; case 'h"history_import" status = { _: 's"sendMessageHistoryImportAction"progress }
|
||||
; break
|
||||
; default:
|
||||
case 'upload_round':
|
||||
status = { _: 'sendMessageUploadRoundAction', progress }
|
||||
break
|
||||
case 'speak_call':
|
||||
status = { _: 'speakingInGroupCallAction' }
|
||||
break
|
||||
case 'history_import':
|
||||
status = { _: 'sendMessageHistoryImportAction', progress }
|
||||
break
|
||||
case 'sticker':
|
||||
status = { _: 'sendMessageChooseStickerAction' }
|
||||
break
|
||||
default:
|
||||
assertNever(status)
|
||||
; }
|
||||
}
|
||||
}
|
||||
|
||||
await this.call({
|
||||
|
|
|
@ -218,19 +218,19 @@ export async function _fetchUpdatesState(this: TelegramClient): Promise<void> {
|
|||
})
|
||||
|
||||
switch (diff._) {
|
||||
case"updates.differenceEmpty"':
|
||||
brea;k
|
||||
case"updates.differenceTooLong"': // shouldn't happen, but who knows?
|
||||
;(state as tl.Mutable<tl.updates.TypeState>).pts = diff.pt;s
|
||||
brea;k
|
||||
case"updates.differenceSlice"':
|
||||
state = diff.intermediateStat;e
|
||||
brea;k
|
||||
case"updates.difference"':
|
||||
state = diff.stat;e
|
||||
brea;k
|
||||
case 'updates.differenceEmpty':
|
||||
break
|
||||
case 'updates.differenceTooLong': // shouldn't happen, but who knows?
|
||||
;(state as tl.Mutable<tl.updates.TypeState>).pts = diff.pts
|
||||
break
|
||||
case 'updates.differenceSlice':
|
||||
state = diff.intermediateState
|
||||
break
|
||||
case 'updates.difference':
|
||||
state = diff.state
|
||||
break
|
||||
default:
|
||||
assertNever(diff;)
|
||||
assertNever(diff)
|
||||
}
|
||||
|
||||
this._qts = state.qts
|
||||
|
@ -1403,18 +1403,18 @@ export function _handleUpdate(
|
|||
})
|
||||
break
|
||||
case 'updates':
|
||||
case "updatesCombined":
|
||||
case 'updatesCombined':
|
||||
this._pendingUpdateContainers.add({
|
||||
upd: update,
|
||||
seqStart:
|
||||
update._ === "updatesCombined"
|
||||
update._ === 'updatesCombined'
|
||||
? update.seqStart
|
||||
: update.seq,
|
||||
seqEnd: update.seq
|
||||
});
|
||||
break;
|
||||
seqEnd: update.seq,
|
||||
})
|
||||
break
|
||||
default:
|
||||
assertNever(update);
|
||||
assertNever(update)
|
||||
}
|
||||
|
||||
this._updatesLoopCv.notify()
|
||||
|
@ -2259,17 +2259,17 @@ export async function _updatesLoop(this: TelegramClient): Promise<void> {
|
|||
// first process pending containers
|
||||
while (this._pendingUpdateContainers.length) {
|
||||
const { upd, seqStart, seqEnd } =
|
||||
this._pendingUpdateContainers.popFront()!;
|
||||
this._pendingUpdateContainers.popFront()!
|
||||
|
||||
switch (upd._) {
|
||||
case "updatesTooLong":
|
||||
case 'updatesTooLong':
|
||||
log.debug(
|
||||
"received updatesTooLong, fetching difference"
|
||||
);
|
||||
_fetchDifferenceLater.call(this, requestedDiff);
|
||||
break;
|
||||
case "updatesCombined":
|
||||
case "updates": {
|
||||
'received updatesTooLong, fetching difference'
|
||||
)
|
||||
_fetchDifferenceLater.call(this, requestedDiff)
|
||||
break
|
||||
case 'updatesCombined':
|
||||
case 'updates': {
|
||||
if (seqStart !== 0) {
|
||||
// https://t.me/tdlibchat/5843
|
||||
const nextLocalSeq = this._seq! + 1
|
||||
|
@ -2452,18 +2452,18 @@ export async function _updatesLoop(this: TelegramClient): Promise<void> {
|
|||
this._pendingPtsUpdates.add({
|
||||
update,
|
||||
ptsBefore: upd.pts - upd.ptsCount,
|
||||
pts: upd.pts
|
||||
pts: upd.pts,
|
||||
})
|
||||
|
||||
break;
|
||||
break
|
||||
}
|
||||
case "updateShortSentMessage": {
|
||||
case 'updateShortSentMessage': {
|
||||
// should not happen
|
||||
log.warn("received updateShortSentMessage");
|
||||
break;
|
||||
log.warn('received updateShortSentMessage')
|
||||
break
|
||||
}
|
||||
default:
|
||||
assertNever(upd);
|
||||
assertNever(upd)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -283,13 +283,17 @@ export namespace BotInlineMessage {
|
|||
_: 'inputBotInlineMessageGame',
|
||||
replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),
|
||||
}
|
||||
case 'c"contact" return {
|
||||
_: 'i"inputBotInlineMessageMediaContact" phoneNumber: obj.phone,
|
||||
case 'contact':
|
||||
return {
|
||||
_: 'inputBotInlineMessageMediaContact',
|
||||
phoneNumber: obj.phone,
|
||||
firstName: obj.firstName,
|
||||
lastName: obj.lastName ?? ''"" vcard: obj.vcard ?? ''"" replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),
|
||||
}
|
||||
; default:
|
||||
lastName: obj.lastName ?? '',
|
||||
vcard: obj.vcard ?? '',
|
||||
replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),
|
||||
}
|
||||
default:
|
||||
assertNever(obj)
|
||||
; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -396,14 +396,17 @@ export namespace BotKeyboard {
|
|||
}
|
||||
case 'force_reply':
|
||||
return {
|
||||
_: 'r"replyKeyboardForceReply" singleUse: obj.singleUse,
|
||||
_: 'replyKeyboardForceReply',
|
||||
singleUse: obj.singleUse,
|
||||
selective: obj.selective,
|
||||
}
|
||||
; case 'i"inline" return {
|
||||
_: 'r"replyInlineMarkup" rows: _2dToRows(obj.buttons),
|
||||
}
|
||||
; default:
|
||||
}
|
||||
case 'inline':
|
||||
return {
|
||||
_: 'replyInlineMarkup',
|
||||
rows: _2dToRows(obj.buttons),
|
||||
}
|
||||
default:
|
||||
assertNever(obj)
|
||||
; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,9 +15,17 @@ export function _callDiscardReasonFromTl(
|
|||
raw: tl.TypePhoneCallDiscardReason
|
||||
): CallDiscardReason {
|
||||
switch (raw._) {
|
||||
case 'p"phoneCallDiscardReasonMissed" return 'm"missed"; case 'p"phoneCallDiscardReasonDisconnect" return 'd"disconnect"; case 'p"phoneCallDiscardReasonHangup" return 'h"hangup"; case 'p"phoneCallDiscardReasonBusy" return 'b"busy"; default:
|
||||
case 'phoneCallDiscardReasonMissed':
|
||||
return 'missed'
|
||||
case 'phoneCallDiscardReasonDisconnect':
|
||||
return 'disconnect'
|
||||
case 'phoneCallDiscardReasonHangup':
|
||||
return 'hangup'
|
||||
case 'phoneCallDiscardReasonBusy':
|
||||
return 'busy'
|
||||
default:
|
||||
assertNever(raw)
|
||||
; }
|
||||
}
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
|
@ -25,15 +33,15 @@ export function _callDiscardReasonToTl(
|
|||
r: CallDiscardReason
|
||||
): tl.TypePhoneCallDiscardReason {
|
||||
switch (r) {
|
||||
case "missed":
|
||||
return { _: "phoneCallDiscardReasonMissed" };
|
||||
case "disconnect":
|
||||
return { _: "phoneCallDiscardReasonDisconnect" };
|
||||
case "hangup":
|
||||
return { _: "phoneCallDiscardReasonHangup" };
|
||||
case "busy":
|
||||
return { _: "phoneCallDiscardReasonBusy" };
|
||||
case 'missed':
|
||||
return { _: 'phoneCallDiscardReasonMissed' }
|
||||
case 'disconnect':
|
||||
return { _: 'phoneCallDiscardReasonDisconnect' }
|
||||
case 'hangup':
|
||||
return { _: 'phoneCallDiscardReasonHangup' }
|
||||
case 'busy':
|
||||
return { _: 'phoneCallDiscardReasonBusy' }
|
||||
default:
|
||||
assertNever(r);
|
||||
assertNever(r)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
import { User, Chat, InputPeerLike, PeersIndex } from '../peers'
|
||||
import { tl } from '@mtcute/tl'
|
||||
import { BotKeyboard, ReplyMarkup } from '../bots'
|
||||
import { assertNever, getMarkedPeerId, toggleChannelIdMark } from '@mtcute/core'
|
||||
import { MtArgumentError, MtTypeAssertionError } from '../errors'
|
||||
import { assertNever, getMarkedPeerId, toggleChannelIdMark } from "@mtcute/core";
|
||||
import {
|
||||
MtArgumentError,
|
||||
MtTypeAssertionError,
|
||||
} from '../errors'
|
||||
import { TelegramClient } from '../../client'
|
||||
import { MessageEntity } from './message-entity'
|
||||
import { makeInspectable } from '../utils'
|
||||
|
|
|
@ -9,7 +9,7 @@ import { ChatPermissions } from './chat-permissions'
|
|||
import { ChatLocation } from './chat-location'
|
||||
import { ChatInviteLink } from './chat-invite-link'
|
||||
import { PeersIndex } from './index'
|
||||
import { toggleChannelIdMark } from '@mtcute/core'
|
||||
import { toggleChannelIdMark } from "@mtcute/core"
|
||||
|
||||
|
||||
export namespace ChatEvent {
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
* - `upload_round`: User is uploading a round video message
|
||||
* - `speak_call`: *undocumented* User is speaking in a group call
|
||||
* - `history_import`: *undocumented* User is importing history
|
||||
* - `sticker`: User is choosing a sticker
|
||||
*/
|
||||
export type TypingStatus =
|
||||
| 'typing'
|
||||
|
@ -36,3 +37,4 @@ export type TypingStatus =
|
|||
| 'upload_round'
|
||||
| 'speak_call'
|
||||
| 'history_import'
|
||||
| 'sticker'
|
||||
|
|
|
@ -99,6 +99,8 @@ export class UserTypingUpdate {
|
|||
return 'speak_call'
|
||||
case 'sendMessageHistoryImportAction':
|
||||
return 'history_import'
|
||||
case 'sendMessageChooseStickerAction':
|
||||
return 'sticker'
|
||||
}
|
||||
|
||||
throw new MtUnsupportedError()
|
||||
|
|
|
@ -4,8 +4,8 @@ import {
|
|||
encodeUrlSafeBase64,
|
||||
parseUrlSafeBase64,
|
||||
TlBinaryReader,
|
||||
TlBinaryWriter,
|
||||
} from '@mtcute/core'
|
||||
TlBinaryWriter
|
||||
} from "@mtcute/core";
|
||||
|
||||
export function parseInlineMessageId(
|
||||
id: string
|
||||
|
@ -39,19 +39,19 @@ export function encodeInlineMessageId(
|
|||
case 'inputBotInlineMessageID':
|
||||
writer = TlBinaryWriter.manualAlloc(20)
|
||||
writer.int(id.dcId)
|
||||
; writer.long(id.id)
|
||||
; writer.long(id.accessHash)
|
||||
; break
|
||||
; case '"inputBotInlineMessageID64"
|
||||
writer.long(id.id)
|
||||
writer.long(id.accessHash)
|
||||
break
|
||||
case 'inputBotInlineMessageID64':
|
||||
writer = TlBinaryWriter.manualAlloc(24)
|
||||
; writer.int(id.dcId)
|
||||
; writer.long(id.ownerId)
|
||||
; writer.int(id.id)
|
||||
; writer.long(id.accessHash)
|
||||
; break
|
||||
; default:
|
||||
writer.int(id.dcId)
|
||||
writer.long(id.ownerId)
|
||||
writer.int(id.id)
|
||||
writer.long(id.accessHash)
|
||||
break
|
||||
default:
|
||||
assertNever(id)
|
||||
; }
|
||||
}
|
||||
|
||||
return encodeUrlSafeBase64(writer.result())
|
||||
}
|
||||
|
|
|
@ -35,15 +35,17 @@ export function normalizeToInputPeer(
|
|||
channelId: res.channelId,
|
||||
msgId: res.msgId,
|
||||
peer: res.peer,
|
||||
}
|
||||
case 'i"inputUserFromMessage" return {
|
||||
_: 'i"inputPeerUserFromMessage" userId: res.userId,
|
||||
}
|
||||
case 'inputUserFromMessage':
|
||||
return {
|
||||
_: 'inputPeerUserFromMessage',
|
||||
userId: res.userId,
|
||||
msgId: res.msgId,
|
||||
peer: res.peer,
|
||||
}
|
||||
; default:
|
||||
}
|
||||
default:
|
||||
assertNever(res)
|
||||
; }
|
||||
}
|
||||
}
|
||||
|
||||
export function normalizeToInputUser(
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { CallbackQuery, Message } from '@mtcute/client'
|
||||
import { assertNever, MaybeAsync } from '@mtcute/core'
|
||||
import { assertNever, MaybeAsync } from "@mtcute/core";
|
||||
|
||||
/**
|
||||
* Function that determines how the state key is derived.
|
||||
|
@ -29,10 +29,17 @@ export const defaultStateKeyDelegate: StateKeyDelegate = (
|
|||
): string | null => {
|
||||
if (upd.constructor === Message) {
|
||||
switch (upd.chat.type) {
|
||||
case 'p"private" case 'b"bot" case 'c"channel" return upd.chat.id + ''""; case 'g"group" case 's"supergroup" case 'g"gigagroup" return `${upd.chat.id}_${upd.sender.id}`
|
||||
; default:
|
||||
case 'private':
|
||||
case 'bot':
|
||||
case 'channel':
|
||||
return upd.chat.id + ''
|
||||
case 'group':
|
||||
case 'supergroup':
|
||||
case 'gigagroup':
|
||||
return `${upd.chat.id}_${upd.sender.id}`
|
||||
default:
|
||||
assertNever(upd.chat.type)
|
||||
; }
|
||||
}
|
||||
}
|
||||
|
||||
if (upd.constructor === CallbackQuery) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { tl } from '@mtcute/tl'
|
||||
import { tdFileId, tdFileId as td } from './types'
|
||||
import { parseFileId } from './parse'
|
||||
import { assertNever, getBasicPeerType, markedPeerIdToBare } from '@mtcute/core'
|
||||
import { assertNever, getBasicPeerType, markedPeerIdToBare } from "@mtcute/core";
|
||||
import FileType = tdFileId.FileType
|
||||
import Long from 'long'
|
||||
|
||||
|
@ -169,16 +169,19 @@ export function fileIdToInputFileLocation(
|
|||
volumeId: loc.source.volumeId,
|
||||
localId: loc.source.localId,
|
||||
}
|
||||
case 's"stickerSetThumbnailVersion" return {
|
||||
_: 'i"inputStickerSetThumb" stickerset: {
|
||||
_: 'i"inputStickerSetID" id: loc.source.id,
|
||||
case 'stickerSetThumbnailVersion':
|
||||
return {
|
||||
_: 'inputStickerSetThumb',
|
||||
stickerset: {
|
||||
_: 'inputStickerSetID',
|
||||
id: loc.source.id,
|
||||
accessHash: loc.source.accessHash,
|
||||
},
|
||||
},
|
||||
thumbVersion: loc.source.version
|
||||
}
|
||||
; default:
|
||||
default:
|
||||
assertNever(loc.source)
|
||||
; }
|
||||
}
|
||||
|
||||
throw new td.ConversionError('inputFileLocation')
|
||||
}
|
||||
|
@ -205,16 +208,16 @@ export function fileIdToInputFileLocation(
|
|||
}
|
||||
} else {
|
||||
return {
|
||||
_: "inputDocumentFileLocation",
|
||||
_: 'inputDocumentFileLocation',
|
||||
fileReference: fileId.fileReference,
|
||||
id: loc.id,
|
||||
accessHash: loc.accessHash,
|
||||
thumbSize: ""
|
||||
};
|
||||
thumbSize: '',
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
assertNever(loc);
|
||||
assertNever(loc)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { tdFileId, tdFileId as td } from './types'
|
||||
import { assertNever, encodeUrlSafeBase64 } from '@mtcute/core'
|
||||
import { assertNever, encodeUrlSafeBase64 } from "@mtcute/core";
|
||||
import { telegramRleEncode } from './utils'
|
||||
import FileType = tdFileId.FileType
|
||||
import { TlBinaryWriter } from '@mtcute/tl-runtime'
|
||||
|
@ -141,8 +141,7 @@ export function toUniqueFileId(
|
|||
break
|
||||
}
|
||||
case 'web':
|
||||
writer = TlBinaryWriter.alloc(
|
||||
{},
|
||||
writer = TlBinaryWriter.alloc({},
|
||||
Buffer.byteLength(inputLocation.url, 'utf-8') + 8
|
||||
)
|
||||
writer.int(type)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { tdFileId as td } from './types'
|
||||
import { assertNever, encodeUrlSafeBase64 } from '@mtcute/core'
|
||||
import { assertNever, encodeUrlSafeBase64 } from "@mtcute/core";
|
||||
import { telegramRleEncode } from './utils'
|
||||
import { TlBinaryWriter } from '@mtcute/tl-runtime'
|
||||
|
||||
|
@ -86,25 +86,27 @@ export function toFileId(
|
|||
writer.int(8)
|
||||
writer.long(loc.source.id)
|
||||
writer.long(loc.source.accessHash)
|
||||
; writer.long(loc.source.volumeId)
|
||||
; writer.int(loc.source.localId)
|
||||
; break
|
||||
; case 'st"stickerSetThumbnailVersion" writer.int(9)
|
||||
; writer.long(loc.source.id)
|
||||
; writer.long(loc.source.accessHash)
|
||||
; writer.int(loc.source.version)
|
||||
; break
|
||||
; default:
|
||||
writer.long(loc.source.volumeId)
|
||||
writer.int(loc.source.localId)
|
||||
break
|
||||
case 'stickerSetThumbnailVersion':
|
||||
writer.int(9)
|
||||
writer.long(loc.source.id)
|
||||
writer.long(loc.source.accessHash)
|
||||
writer.int(loc.source.version)
|
||||
break
|
||||
default:
|
||||
assertNever(loc.source)
|
||||
; }
|
||||
}
|
||||
|
||||
break
|
||||
; case 'co"common" writer.long(loc.id)
|
||||
; writer.long(loc.accessHash)
|
||||
; break
|
||||
; default:
|
||||
case 'common':
|
||||
writer.long(loc.id)
|
||||
writer.long(loc.accessHash)
|
||||
break
|
||||
default:
|
||||
assertNever(loc)
|
||||
; }
|
||||
}
|
||||
|
||||
return encodeUrlSafeBase64(
|
||||
Buffer.concat([telegramRleEncode(writer.result()), SUFFIX])
|
||||
|
|
|
@ -3,8 +3,8 @@ import {
|
|||
BaseTcpTransport,
|
||||
TransportState,
|
||||
tl,
|
||||
assertNever,
|
||||
} from '@mtcute/core'
|
||||
assertNever
|
||||
} from "@mtcute/core";
|
||||
import { connect } from 'net'
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
|
@ -439,18 +439,17 @@ export abstract class BaseSocksTcpTransport extends BaseTcpTransport {
|
|||
code in SOCKS5_ERRORS
|
||||
? SOCKS5_ERRORS[code]
|
||||
: `Unknown error code: 0x${code.toString(
|
||||
16
|
||||
)}`
|
||||
16
|
||||
)}`
|
||||
this._socket!.emit(
|
||||
'"error"
|
||||
'error',
|
||||
new SocksProxyConnectionError(this._proxy, msg)
|
||||
)
|
||||
; }
|
||||
}
|
||||
break
|
||||
; }
|
||||
default:
|
||||
assertNever(state)
|
||||
; }
|
||||
}
|
||||
default: assertNever(state)
|
||||
}
|
||||
}
|
||||
|
||||
this.log.debug(
|
||||
|
|
Loading…
Reference in a new issue