feat(client): sequential message sending
This commit is contained in:
parent
ce2d1b0a9a
commit
ee9e2e35c4
5 changed files with 68 additions and 47 deletions
|
@ -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'),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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?
|
||||
|
|
10
packages/client/src/methods/misc/chain-id.ts
Normal file
10
packages/client/src/methods/misc/chain-id.ts
Normal 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}`
|
||||
}
|
Loading…
Reference in a new issue