feat(client): getMessageByLink method

This commit is contained in:
alina 🌸 2023-12-02 06:08:31 +03:00
parent 0b2ae3aac6
commit e9d6cfc39d
Signed by: teidesu
SSH key fingerprint: SHA256:uNeCpw6aTSU4aIObXLvHfLkDa82HWH9EiOj9AXOIRpI
2 changed files with 45 additions and 0 deletions

View file

@ -134,6 +134,7 @@ import { editMessage } from './methods/messages/edit-message.js'
import { ForwardMessageOptions, forwardMessages, forwardMessagesById } from './methods/messages/forward-messages.js' import { ForwardMessageOptions, forwardMessages, forwardMessagesById } from './methods/messages/forward-messages.js'
import { getDiscussionMessage } from './methods/messages/get-discussion-message.js' import { getDiscussionMessage } from './methods/messages/get-discussion-message.js'
import { getHistory, GetHistoryOffset } from './methods/messages/get-history.js' import { getHistory, GetHistoryOffset } from './methods/messages/get-history.js'
import { getMessageByLink } from './methods/messages/get-message-by-link.js'
import { getMessageGroup } from './methods/messages/get-message-group.js' import { getMessageGroup } from './methods/messages/get-message-group.js'
import { getMessageReactions, getMessageReactionsById } from './methods/messages/get-message-reactions.js' import { getMessageReactions, getMessageReactionsById } from './methods/messages/get-message-reactions.js'
import { getMessages } from './methods/messages/get-messages.js' import { getMessages } from './methods/messages/get-messages.js'
@ -3153,6 +3154,12 @@ export interface TelegramClient extends BaseTelegramClient {
reverse?: boolean reverse?: boolean
}, },
): Promise<ArrayPaginated<Message, GetHistoryOffset>> ): Promise<ArrayPaginated<Message, GetHistoryOffset>>
/**
* Given a message link (e.g. `t.me/durov/1`), fetch the relevant message.
* **Available**: both users and bots
*
*/
getMessageByLink(link: string): Promise<Message | null>
/** /**
* Get all messages inside of a message group * Get all messages inside of a message group
* *
@ -5276,6 +5283,7 @@ export class TelegramClient extends BaseTelegramClient {
forwardMessages = forwardMessages.bind(null, this) forwardMessages = forwardMessages.bind(null, this)
getDiscussionMessage = getDiscussionMessage.bind(null, this) getDiscussionMessage = getDiscussionMessage.bind(null, this)
getHistory = getHistory.bind(null, this) getHistory = getHistory.bind(null, this)
getMessageByLink = getMessageByLink.bind(null, this)
getMessageGroup = getMessageGroup.bind(null, this) getMessageGroup = getMessageGroup.bind(null, this)
getMessageReactionsById = getMessageReactionsById.bind(null, this) getMessageReactionsById = getMessageReactionsById.bind(null, this)
getMessageReactions = getMessageReactions.bind(null, this) getMessageReactions = getMessageReactions.bind(null, this)

View file

@ -0,0 +1,37 @@
import { BaseTelegramClient, MtArgumentError, toggleChannelIdMark } from '@mtcute/core'
import { links } from '@mtcute/core/utils.js'
import { Message } from '../../index.js'
import { resolvePeer } from '../users/resolve-peer.js'
import { _getDiscussionMessage } from './get-discussion-message.js'
import { getMessages } from './get-messages.js'
/**
* Given a message link (e.g. `t.me/durov/1`), fetch the relevant message.
*/
export async function getMessageByLink(client: BaseTelegramClient, link: string): Promise<Message | null> {
const parsed = links.message.parse(link)
if (!parsed) {
throw new MtArgumentError(`Invalid message link: ${link}`)
}
let peer
if ('username' in parsed) {
peer = await resolvePeer(client, parsed.username)
} else {
peer = await resolvePeer(client, toggleChannelIdMark(parsed.channelId))
}
let msgId = parsed.id
if (parsed.commentId) {
[peer] = await _getDiscussionMessage(client, peer, parsed.id)
msgId = parsed.commentId
}
const [msg] = await getMessages(client, peer, msgId)
return msg
}