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 { 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)
|
||||||
|
|
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