feat(client): get messages inside message groups

This commit is contained in:
teidesu 2021-05-09 18:29:33 +03:00
parent 87a7df669a
commit df84137391
3 changed files with 54 additions and 0 deletions

View file

@ -67,6 +67,7 @@ import { editMessage } from './methods/messages/edit-message'
import { _findMessageInUpdate } from './methods/messages/find-in-update'
import { forwardMessages } from './methods/messages/forward-messages'
import { getHistory } from './methods/messages/get-history'
import { getMessageGroup } from './methods/messages/get-message-group'
import { getMessages } from './methods/messages/get-messages'
import { iterHistory } from './methods/messages/iter-history'
import { _parseEntities } from './methods/messages/parse-entities'
@ -1496,6 +1497,13 @@ export interface TelegramClient extends BaseTelegramClient {
reverse?: boolean
}
): Promise<Message[]>
/**
* Get all messages inside of a message group
*
* @param chatId Chat ID
* @param message ID of one of the messages in the group
*/
getMessageGroup(chatId: InputPeerLike, message: number): Promise<Message[]>
/**
* Get a single message in chat by its ID
*
@ -2555,6 +2563,7 @@ export class TelegramClient extends BaseTelegramClient {
protected _findMessageInUpdate = _findMessageInUpdate
forwardMessages = forwardMessages
getHistory = getHistory
getMessageGroup = getMessageGroup
getMessages = getMessages
iterHistory = iterHistory
protected _parseEntities = _parseEntities

View file

@ -0,0 +1,31 @@
import { TelegramClient } from '../../client'
import { InputPeerLike, MtCuteArgumentError, Message } from '../../types'
/**
* Get all messages inside of a message group
*
* @param chatId Chat ID
* @param message ID of one of the messages in the group
* @internal
*/
export async function getMessageGroup(
this: TelegramClient,
chatId: InputPeerLike,
message: number
): Promise<Message[]> {
// awesome hack stolen from pyrogram
// groups have no more than 10 items
const ids: number[] = []
for (let i = Math.max(message - 9, 0); i <= message + 9; i++) {
ids.push(i)
}
const messages = await this.getMessages(chatId, ids)
const groupedId = messages.find((it) => it.id === message)!.groupedId
if (!groupedId)
throw new MtCuteArgumentError('This message is not grouped')
return messages.filter((it) => it.groupedId?.eq(groupedId))
}

View file

@ -924,6 +924,20 @@ export class Message {
return this.client.sendText(toChatId, this.raw.message, params)
}
/**
* Get all messages inside a group that this
* message belongs to (see {@link groupedId}),
* including this message.
*
* In case this message is not inside of a group,
* will just return itself.
*/
async getGroup(): Promise<Message[]> {
if (!this.groupedId) return [this]
return this.client.getMessageGroup(this.chat.inputPeer, this.raw.id)
}
}