feat(client): sequential message sending

This commit is contained in:
alina 🌸 2023-12-11 01:55:58 +03:00
parent ce2d1b0a9a
commit ee9e2e35c4
Signed by: teidesu
SSH key fingerprint: SHA256:uNeCpw6aTSU4aIObXLvHfLkDa82HWH9EiOj9AXOIRpI
5 changed files with 68 additions and 47 deletions

View file

@ -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'),
}
}

View file

@ -49,7 +49,7 @@ export async function sendMediaGroup(
): Promise<Message[]> {
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)

View file

@ -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)

View file

@ -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?

View file

@ -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}`
}