feat(client): sendMediaGroup method
This commit is contained in:
parent
a67c4ae85e
commit
9303d0841a
2 changed files with 188 additions and 0 deletions
|
@ -71,6 +71,7 @@ import { searchGlobal } from './methods/messages/search-global'
|
||||||
import { searchMessages } from './methods/messages/search-messages'
|
import { searchMessages } from './methods/messages/search-messages'
|
||||||
import { sendDice } from './methods/messages/send-dice'
|
import { sendDice } from './methods/messages/send-dice'
|
||||||
import { sendLocation } from './methods/messages/send-location'
|
import { sendLocation } from './methods/messages/send-location'
|
||||||
|
import { sendMediaGroup } from './methods/messages/send-media-group'
|
||||||
import { sendMedia } from './methods/messages/send-media'
|
import { sendMedia } from './methods/messages/send-media'
|
||||||
import { sendText } from './methods/messages/send-text'
|
import { sendText } from './methods/messages/send-text'
|
||||||
import { unpinMessage } from './methods/messages/unpin-message'
|
import { unpinMessage } from './methods/messages/unpin-message'
|
||||||
|
@ -1600,6 +1601,71 @@ export interface TelegramClient extends BaseTelegramClient {
|
||||||
replyMarkup?: ReplyMarkup
|
replyMarkup?: ReplyMarkup
|
||||||
}
|
}
|
||||||
): Promise<Message>
|
): Promise<Message>
|
||||||
|
/**
|
||||||
|
* Send a group of media.
|
||||||
|
*
|
||||||
|
* @param chatId ID of the chat, its username, phone or `"me"` or `"self"`
|
||||||
|
* @param medias Medias contained in the message.
|
||||||
|
* @param params Additional sending parameters
|
||||||
|
* @see InputMedia
|
||||||
|
*/
|
||||||
|
sendMediaGroup(
|
||||||
|
chatId: InputPeerLike,
|
||||||
|
medias: InputMediaLike[],
|
||||||
|
params?: {
|
||||||
|
/**
|
||||||
|
* Message to reply to. Either a message object or message ID.
|
||||||
|
*/
|
||||||
|
replyTo?: number | Message
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse mode to use to parse entities before sending
|
||||||
|
* the message. Defaults to current default parse mode (if any).
|
||||||
|
*
|
||||||
|
* Passing `null` will explicitly disable formatting.
|
||||||
|
*/
|
||||||
|
parseMode?: string | null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to send this message silently.
|
||||||
|
*/
|
||||||
|
silent?: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If set, the message will be scheduled to this date.
|
||||||
|
* When passing a number, a UNIX time in ms is expected.
|
||||||
|
*/
|
||||||
|
schedule?: Date | number
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For bots: inline or reply markup or an instruction
|
||||||
|
* to hide a reply keyboard or to force a reply.
|
||||||
|
*/
|
||||||
|
replyMarkup?: ReplyMarkup
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function that will be called after some part has been uploaded.
|
||||||
|
* Only used when a file that requires uploading is passed,
|
||||||
|
* and not used when uploading a thumbnail.
|
||||||
|
*
|
||||||
|
* @param index Index of the media in the original array
|
||||||
|
* @param uploaded Number of bytes already uploaded
|
||||||
|
* @param total Total file size
|
||||||
|
*/
|
||||||
|
progressCallback?: (
|
||||||
|
index: number,
|
||||||
|
uploaded: number,
|
||||||
|
total: number
|
||||||
|
) => void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to clear draft after sending this message.
|
||||||
|
*
|
||||||
|
* Defaults to `false`
|
||||||
|
*/
|
||||||
|
clearDraft?: boolean
|
||||||
|
}
|
||||||
|
): Promise<Message>
|
||||||
/**
|
/**
|
||||||
* Send a single media (a photo or a document-based media)
|
* Send a single media (a photo or a document-based media)
|
||||||
*
|
*
|
||||||
|
@ -1964,6 +2030,7 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
searchMessages = searchMessages
|
searchMessages = searchMessages
|
||||||
sendDice = sendDice
|
sendDice = sendDice
|
||||||
sendLocation = sendLocation
|
sendLocation = sendLocation
|
||||||
|
sendMediaGroup = sendMediaGroup
|
||||||
sendMedia = sendMedia
|
sendMedia = sendMedia
|
||||||
sendText = sendText
|
sendText = sendText
|
||||||
unpinMessage = unpinMessage
|
unpinMessage = unpinMessage
|
||||||
|
|
121
packages/client/src/methods/messages/send-media-group.ts
Normal file
121
packages/client/src/methods/messages/send-media-group.ts
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
import { TelegramClient } from '../../client'
|
||||||
|
import {
|
||||||
|
BotKeyboard,
|
||||||
|
InputMediaLike,
|
||||||
|
InputPeerLike,
|
||||||
|
Message,
|
||||||
|
ReplyMarkup,
|
||||||
|
} from '../../types'
|
||||||
|
import { normalizeToInputPeer } from '../../utils/peer-utils'
|
||||||
|
import { normalizeDate, randomUlong } from '../../utils/misc-utils'
|
||||||
|
import { tl } from '@mtcute/tl'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a group of media.
|
||||||
|
*
|
||||||
|
* @param chatId ID of the chat, its username, phone or `"me"` or `"self"`
|
||||||
|
* @param medias Medias contained in the message.
|
||||||
|
* @param params Additional sending parameters
|
||||||
|
* @see InputMedia
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
export async function sendMediaGroup(
|
||||||
|
this: TelegramClient,
|
||||||
|
chatId: InputPeerLike,
|
||||||
|
medias: InputMediaLike[],
|
||||||
|
params?: {
|
||||||
|
/**
|
||||||
|
* Message to reply to. Either a message object or message ID.
|
||||||
|
*/
|
||||||
|
replyTo?: number | Message
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse mode to use to parse entities before sending
|
||||||
|
* the message. Defaults to current default parse mode (if any).
|
||||||
|
*
|
||||||
|
* Passing `null` will explicitly disable formatting.
|
||||||
|
*/
|
||||||
|
parseMode?: string | null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to send this message silently.
|
||||||
|
*/
|
||||||
|
silent?: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If set, the message will be scheduled to this date.
|
||||||
|
* When passing a number, a UNIX time in ms is expected.
|
||||||
|
*/
|
||||||
|
schedule?: Date | number
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For bots: inline or reply markup or an instruction
|
||||||
|
* to hide a reply keyboard or to force a reply.
|
||||||
|
*/
|
||||||
|
replyMarkup?: ReplyMarkup
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function that will be called after some part has been uploaded.
|
||||||
|
* Only used when a file that requires uploading is passed,
|
||||||
|
* and not used when uploading a thumbnail.
|
||||||
|
*
|
||||||
|
* @param index Index of the media in the original array
|
||||||
|
* @param uploaded Number of bytes already uploaded
|
||||||
|
* @param total Total file size
|
||||||
|
*/
|
||||||
|
progressCallback?: (index: number, uploaded: number, total: number) => void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to clear draft after sending this message.
|
||||||
|
*
|
||||||
|
* Defaults to `false`
|
||||||
|
*/
|
||||||
|
clearDraft?: boolean
|
||||||
|
}
|
||||||
|
): Promise<Message> {
|
||||||
|
if (!params) params = {}
|
||||||
|
|
||||||
|
const peer = normalizeToInputPeer(await this.resolvePeer(chatId))
|
||||||
|
const replyMarkup = BotKeyboard._convertToTl(params.replyMarkup)
|
||||||
|
|
||||||
|
const multiMedia: tl.RawInputSingleMedia[] = []
|
||||||
|
|
||||||
|
for (let i = 0; i < medias.length; i++) {
|
||||||
|
const media = medias[i]
|
||||||
|
const inputMedia = await this._normalizeInputMedia(media, {
|
||||||
|
progressCallback: params.progressCallback?.bind(null, i)
|
||||||
|
})
|
||||||
|
|
||||||
|
const [message, entities] = await this._parseEntities(
|
||||||
|
media.caption,
|
||||||
|
params.parseMode,
|
||||||
|
media.entities
|
||||||
|
)
|
||||||
|
|
||||||
|
multiMedia.push({
|
||||||
|
_: 'inputSingleMedia',
|
||||||
|
randomId: randomUlong(),
|
||||||
|
media: inputMedia,
|
||||||
|
message,
|
||||||
|
entities
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = await this.call({
|
||||||
|
_: 'messages.sendMultiMedia',
|
||||||
|
peer,
|
||||||
|
multiMedia,
|
||||||
|
silent: params.silent,
|
||||||
|
replyToMsgId: params.replyTo
|
||||||
|
? typeof params.replyTo === 'number'
|
||||||
|
? params.replyTo
|
||||||
|
: params.replyTo.id
|
||||||
|
: undefined,
|
||||||
|
randomId: randomUlong(),
|
||||||
|
scheduleDate: normalizeDate(params.schedule),
|
||||||
|
replyMarkup,
|
||||||
|
clearDraft: params.clearDraft,
|
||||||
|
})
|
||||||
|
|
||||||
|
return this._findMessageInUpdate(res)
|
||||||
|
}
|
Loading…
Reference in a new issue