feat(client): getDiscussionMessage method

This commit is contained in:
teidesu 2021-07-25 14:00:51 +03:00
parent b03e2f4f0b
commit cc8c974e23
3 changed files with 77 additions and 3 deletions

View file

@ -98,7 +98,10 @@ import { editInlineMessage } from './methods/messages/edit-inline-message'
import { editMessage } from './methods/messages/edit-message'
import { _findMessageInUpdate } from './methods/messages/find-in-update'
import { forwardMessages } from './methods/messages/forward-messages'
import { _getDiscussionMessage } from './methods/messages/get-discussion-message'
import {
_getDiscussionMessage,
getDiscussionMessage,
} from './methods/messages/get-discussion-message'
import { getHistory } from './methods/messages/get-history'
import { getMessageGroup } from './methods/messages/get-message-group'
import { getMessagesUnsafe } from './methods/messages/get-messages-unsafe'
@ -680,7 +683,7 @@ export interface TelegramClient extends BaseTelegramClient {
* Whether the results should be displayed as a gallery instead
* of a vertical list. Only applicable to some media types.
*
* Defaults to `false`
* Defaults to `true`
*/
gallery?: boolean
@ -2201,6 +2204,25 @@ export interface TelegramClient extends BaseTelegramClient {
clearDraft?: boolean
}
): Promise<MaybeArray<Message>>
// public version of the same method because why not
/**
* Get discussion message for some channel post.
*
* Returns `null` if the post does not have a discussion
* message.
*
* This method might throw `FLOOD_WAIT_X` error in case
* the discussion message was not *yet* created. Error
* is usually handled by the client, but if you disabled that,
* you'll need to handle it manually.
*
* @param peer Channel where the post was found
* @param message ID of the channel post
*/
getDiscussionMessage(
peer: InputPeerLike,
message: number
): Promise<Message | null>
/**
* Retrieve a chunk of the chat history.
*
@ -3588,6 +3610,7 @@ export class TelegramClient extends BaseTelegramClient {
protected _findMessageInUpdate = _findMessageInUpdate
forwardMessages = forwardMessages
protected _getDiscussionMessage = _getDiscussionMessage
getDiscussionMessage = getDiscussionMessage
getHistory = getHistory
getMessageGroup = getMessageGroup
getMessagesUnsafe = getMessagesUnsafe

View file

@ -1,6 +1,7 @@
import { TelegramClient } from '../../client'
import { InputPeerLike } from '../../types'
import { InputPeerLike, Message } from '../../types'
import { tl } from '@mtcute/tl'
import { createUsersChatsIndex } from '../../utils/peer-utils'
/** @internal */
export async function _getDiscussionMessage(
@ -34,3 +35,43 @@ export async function _getDiscussionMessage(
msg.id,
]
}
// public version of the same method because why not
/**
* Get discussion message for some channel post.
*
* Returns `null` if the post does not have a discussion
* message.
*
* This method might throw `FLOOD_WAIT_X` error in case
* the discussion message was not *yet* created. Error
* is usually handled by the client, but if you disabled that,
* you'll need to handle it manually.
*
* @param peer Channel where the post was found
* @param message ID of the channel post
* @internal
*/
export async function getDiscussionMessage(
this: TelegramClient,
peer: InputPeerLike,
message: number
): Promise<Message | null> {
const inputPeer = await this.resolvePeer(peer)
const res = await this.call({
_: 'messages.getDiscussionMessage',
peer: inputPeer,
msgId: message,
})
if (!res.messages.length || res.messages[0]._ === 'messageEmpty')
// no discussion message (i guess?), return the same msg
return null
const msg = res.messages[0]
const { users, chats } = createUsersChatsIndex(res)
return new Message(this, msg, users, chats)
}

View file

@ -870,6 +870,16 @@ export class Message {
return this.client.getMessageGroup(this.chat.inputPeer, this.raw.id)
}
/**
* Get discussion message for some channel post.
*
* Returns `null` if the post does not have a discussion
* message.
*/
async getDiscussionMessage(): Promise<Message | null> {
return this.client.getDiscussionMessage(this.chat.inputPeer, this.raw.id)
}
/**
* Read history in the chat up until this message
*