From ee9e2e35c40ef9fe7224833e863f571e598d7a04 Mon Sep 17 00:00:00 2001 From: Alina Sireneva Date: Mon, 11 Dec 2023 01:55:58 +0300 Subject: [PATCH] feat(client): sequential message sending --- .../src/methods/messages/send-common.ts | 2 + .../src/methods/messages/send-media-group.ts | 29 ++++++++------- .../client/src/methods/messages/send-media.ts | 37 ++++++++++--------- .../client/src/methods/messages/send-text.ts | 37 ++++++++++--------- packages/client/src/methods/misc/chain-id.ts | 10 +++++ 5 files changed, 68 insertions(+), 47 deletions(-) create mode 100644 packages/client/src/methods/misc/chain-id.ts diff --git a/packages/client/src/methods/messages/send-common.ts b/packages/client/src/methods/messages/send-common.ts index bd75a513..f779d62e 100644 --- a/packages/client/src/methods/messages/send-common.ts +++ b/packages/client/src/methods/messages/send-common.ts @@ -5,6 +5,7 @@ import { Message } from '../../types/messages/message.js' import { TextWithEntities } from '../../types/misc/entities.js' import { InputPeerLike } from '../../types/peers/index.js' import { normalizeDate, normalizeMessageId, toInputUser } from '../../utils/index.js' +import { _getPeerChainId } from '../misc/chain-id.js' import { _normalizeInputText } from '../misc/normalize-text.js' import { resolvePeer } from '../users/resolve-peer.js' import { _getDiscussionMessage } from './get-discussion-message.js' @@ -168,5 +169,6 @@ export async function _processCommonSendParameters( peer, replyTo: tlReplyTo, scheduleDate, + chainId: _getPeerChainId(client, peer, 'send'), } } diff --git a/packages/client/src/methods/messages/send-media-group.ts b/packages/client/src/methods/messages/send-media-group.ts index db8be9a7..18b748ff 100644 --- a/packages/client/src/methods/messages/send-media-group.ts +++ b/packages/client/src/methods/messages/send-media-group.ts @@ -49,7 +49,7 @@ export async function sendMediaGroup( ): Promise { if (!params) params = {} - const { peer, replyTo, scheduleDate } = await _processCommonSendParameters(client, chatId, params) + const { peer, replyTo, scheduleDate, chainId } = await _processCommonSendParameters(client, chatId, params) const multiMedia: tl.RawInputSingleMedia[] = [] @@ -92,18 +92,21 @@ export async function sendMediaGroup( }) } - const res = await client.call({ - _: 'messages.sendMultiMedia', - peer, - multiMedia, - silent: params.silent, - replyTo, - scheduleDate, - clearDraft: params.clearDraft, - noforwards: params.forbidForwards, - sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined, - invertMedia: params.invertMedia, - }) + const res = await client.call( + { + _: 'messages.sendMultiMedia', + peer, + multiMedia, + silent: params.silent, + replyTo, + scheduleDate, + clearDraft: params.clearDraft, + noforwards: params.forbidForwards, + sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined, + invertMedia: params.invertMedia, + }, + { chainId }, + ) assertIsUpdatesGroup('sendMediaGroup', res) client.network.handleUpdate(res, true) diff --git a/packages/client/src/methods/messages/send-media.ts b/packages/client/src/methods/messages/send-media.ts index a7ed8c1b..b954117a 100644 --- a/packages/client/src/methods/messages/send-media.ts +++ b/packages/client/src/methods/messages/send-media.ts @@ -81,24 +81,27 @@ export async function sendMedia( ) const replyMarkup = BotKeyboard._convertToTl(params.replyMarkup) - const { peer, replyTo, scheduleDate } = await _processCommonSendParameters(client, chatId, params) + const { peer, replyTo, scheduleDate, chainId } = await _processCommonSendParameters(client, chatId, params) - const res = await client.call({ - _: 'messages.sendMedia', - peer, - media: inputMedia, - silent: params.silent, - replyTo, - randomId: randomLong(), - scheduleDate, - replyMarkup, - message, - entities, - clearDraft: params.clearDraft, - noforwards: params.forbidForwards, - sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined, - invertMedia: params.invert, - }) + const res = await client.call( + { + _: 'messages.sendMedia', + peer, + media: inputMedia, + silent: params.silent, + replyTo, + randomId: randomLong(), + scheduleDate, + replyMarkup, + message, + entities, + clearDraft: params.clearDraft, + noforwards: params.forbidForwards, + sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined, + invertMedia: params.invert, + }, + { chainId }, + ) const msg = _findMessageInUpdate(client, res, false, !params.shouldDispatch) diff --git a/packages/client/src/methods/messages/send-text.ts b/packages/client/src/methods/messages/send-text.ts index 8e593085..6e698a05 100644 --- a/packages/client/src/methods/messages/send-text.ts +++ b/packages/client/src/methods/messages/send-text.ts @@ -52,24 +52,27 @@ export async function sendText( const [message, entities] = await _normalizeInputText(client, text) const replyMarkup = BotKeyboard._convertToTl(params.replyMarkup) - const { peer, replyTo, scheduleDate } = await _processCommonSendParameters(client, chatId, params) + const { peer, replyTo, scheduleDate, chainId } = await _processCommonSendParameters(client, chatId, params) - const res = await client.call({ - _: 'messages.sendMessage', - peer, - noWebpage: params.disableWebPreview, - silent: params.silent, - replyTo, - randomId: randomLong(), - scheduleDate, - replyMarkup, - message, - entities, - clearDraft: params.clearDraft, - noforwards: params.forbidForwards, - sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined, - invertMedia: params.invertMedia, - }) + const res = await client.call( + { + _: 'messages.sendMessage', + peer, + noWebpage: params.disableWebPreview, + silent: params.silent, + replyTo, + randomId: randomLong(), + scheduleDate, + replyMarkup, + message, + entities, + clearDraft: params.clearDraft, + noforwards: params.forbidForwards, + sendAs: params.sendAs ? await resolvePeer(client, params.sendAs) : undefined, + invertMedia: params.invertMedia, + }, + { chainId }, + ) if (res._ === 'updateShortSentMessage') { // todo extract this to updates manager? diff --git a/packages/client/src/methods/misc/chain-id.ts b/packages/client/src/methods/misc/chain-id.ts new file mode 100644 index 00000000..c46d0aeb --- /dev/null +++ b/packages/client/src/methods/misc/chain-id.ts @@ -0,0 +1,10 @@ +import { BaseTelegramClient, getMarkedPeerId, tl } from '@mtcute/core' + +import { getAuthState } from '../auth/_state.js' + +/** @internal */ +export function _getPeerChainId(client: BaseTelegramClient, peer: tl.TypeInputPeer, prefix = 'peer') { + const id = peer._ === 'inputPeerSelf' ? getAuthState(client).userId! : getMarkedPeerId(peer) + + return `${prefix}:${id}` +}