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 { _findMessageInUpdate } from './methods/messages/find-in-update'
|
||||||
import { forwardMessages } from './methods/messages/forward-messages'
|
import { forwardMessages } from './methods/messages/forward-messages'
|
||||||
import { getHistory } from './methods/messages/get-history'
|
import { getHistory } from './methods/messages/get-history'
|
||||||
|
import { getMessageGroup } from './methods/messages/get-message-group'
|
||||||
import { getMessages } from './methods/messages/get-messages'
|
import { getMessages } from './methods/messages/get-messages'
|
||||||
import { iterHistory } from './methods/messages/iter-history'
|
import { iterHistory } from './methods/messages/iter-history'
|
||||||
import { _parseEntities } from './methods/messages/parse-entities'
|
import { _parseEntities } from './methods/messages/parse-entities'
|
||||||
|
@ -1496,6 +1497,13 @@ export interface TelegramClient extends BaseTelegramClient {
|
||||||
reverse?: boolean
|
reverse?: boolean
|
||||||
}
|
}
|
||||||
): Promise<Message[]>
|
): 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
|
* Get a single message in chat by its ID
|
||||||
*
|
*
|
||||||
|
@ -2555,6 +2563,7 @@ export class TelegramClient extends BaseTelegramClient {
|
||||||
protected _findMessageInUpdate = _findMessageInUpdate
|
protected _findMessageInUpdate = _findMessageInUpdate
|
||||||
forwardMessages = forwardMessages
|
forwardMessages = forwardMessages
|
||||||
getHistory = getHistory
|
getHistory = getHistory
|
||||||
|
getMessageGroup = getMessageGroup
|
||||||
getMessages = getMessages
|
getMessages = getMessages
|
||||||
iterHistory = iterHistory
|
iterHistory = iterHistory
|
||||||
protected _parseEntities = _parseEntities
|
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)
|
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