feat(client): getMessageByLink method
This commit is contained in:
parent
0b2ae3aac6
commit
e9d6cfc39d
2 changed files with 45 additions and 0 deletions
|
@ -134,6 +134,7 @@ import { editMessage } from './methods/messages/edit-message.js'
|
|||
import { ForwardMessageOptions, forwardMessages, forwardMessagesById } from './methods/messages/forward-messages.js'
|
||||
import { getDiscussionMessage } from './methods/messages/get-discussion-message.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 { getMessageReactions, getMessageReactionsById } from './methods/messages/get-message-reactions.js'
|
||||
import { getMessages } from './methods/messages/get-messages.js'
|
||||
|
@ -3153,6 +3154,12 @@ export interface TelegramClient extends BaseTelegramClient {
|
|||
reverse?: boolean
|
||||
},
|
||||
): 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
|
||||
*
|
||||
|
@ -5276,6 +5283,7 @@ export class TelegramClient extends BaseTelegramClient {
|
|||
forwardMessages = forwardMessages.bind(null, this)
|
||||
getDiscussionMessage = getDiscussionMessage.bind(null, this)
|
||||
getHistory = getHistory.bind(null, this)
|
||||
getMessageByLink = getMessageByLink.bind(null, this)
|
||||
getMessageGroup = getMessageGroup.bind(null, this)
|
||||
getMessageReactionsById = getMessageReactionsById.bind(null, this)
|
||||
getMessageReactions = getMessageReactions.bind(null, this)
|
||||
|
|
37
packages/client/src/methods/messages/get-message-by-link.ts
Normal file
37
packages/client/src/methods/messages/get-message-by-link.ts
Normal 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
|
||||
}
|
Loading…
Reference in a new issue