feat(client): get messages inside message groups
This commit is contained in:
parent
87a7df669a
commit
df84137391
3 changed files with 54 additions and 0 deletions
|
@ -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
|
||||
|
|
31
packages/client/src/methods/messages/get-message-group.ts
Normal file
31
packages/client/src/methods/messages/get-message-group.ts
Normal 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))
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue