refactor: extract input reactions to InputReaction
This commit is contained in:
parent
95032d3b9a
commit
55c4f296fb
5 changed files with 39 additions and 75 deletions
|
@ -224,6 +224,7 @@ import {
|
|||
InputInlineResult,
|
||||
InputMediaLike,
|
||||
InputPeerLike,
|
||||
InputReaction,
|
||||
InputStickerSetItem,
|
||||
MaybeDynamic,
|
||||
Message,
|
||||
|
@ -1216,7 +1217,7 @@ export interface TelegramClient extends BaseTelegramClient {
|
|||
* Defaults to `''` (empty string)
|
||||
*
|
||||
* > **Note**: Only used for these values of `filter`:
|
||||
* > `all`, `banned`, `restricted`, `contacts`
|
||||
* > `all, banned, restricted, mention, contacts`
|
||||
*/
|
||||
query?: string
|
||||
|
||||
|
@ -2674,12 +2675,7 @@ export interface TelegramClient extends BaseTelegramClient {
|
|||
/**
|
||||
* Get only reactions with the specified emoji
|
||||
*/
|
||||
emoji?: string
|
||||
|
||||
/**
|
||||
* Get only reactions with the specified custom emoji
|
||||
*/
|
||||
customEmoji?: tl.Long
|
||||
emoji?: InputReaction
|
||||
|
||||
/**
|
||||
* Limit the number of events returned.
|
||||
|
@ -3186,16 +3182,11 @@ export interface TelegramClient extends BaseTelegramClient {
|
|||
*
|
||||
* @param chatId Chat ID with the message to react to
|
||||
* @param message Message ID to react to
|
||||
* @param emoji Reaction emoji (if `tl.Long` then this is a custom emoji) or `null` to remove
|
||||
* @param emoji Reaction emoji (or `null` to remove reaction)
|
||||
* @param big (default: `false`) Whether to use a big reaction
|
||||
* @returns Message to which the reaction was sent
|
||||
*/
|
||||
sendReaction(
|
||||
chatId: InputPeerLike,
|
||||
message: number,
|
||||
emoji: string | tl.Long | null,
|
||||
big?: boolean,
|
||||
): Promise<Message>
|
||||
sendReaction(chatId: InputPeerLike, message: number, emoji?: InputReaction | null, big?: boolean): Promise<Message>
|
||||
/**
|
||||
* Send s previously scheduled message.
|
||||
*
|
||||
|
|
|
@ -41,6 +41,7 @@ import {
|
|||
InputInlineResult,
|
||||
InputMediaLike,
|
||||
InputPeerLike,
|
||||
InputReaction,
|
||||
InputStickerSetItem,
|
||||
MaybeDynamic,
|
||||
Message,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { tl } from '@mtcute/core'
|
||||
|
||||
import { TelegramClient } from '../../client'
|
||||
import { InputPeerLike, PeerReaction, PeersIndex } from '../../types'
|
||||
import { InputPeerLike, InputReaction, normalizeInputReaction, PeerReaction, PeersIndex } from '../../types'
|
||||
|
||||
/**
|
||||
* Get users who have reacted to the message.
|
||||
|
@ -19,12 +19,7 @@ export async function* getReactionUsers(
|
|||
/**
|
||||
* Get only reactions with the specified emoji
|
||||
*/
|
||||
emoji?: string
|
||||
|
||||
/**
|
||||
* Get only reactions with the specified custom emoji
|
||||
*/
|
||||
customEmoji?: tl.Long
|
||||
emoji?: InputReaction
|
||||
|
||||
/**
|
||||
* Limit the number of events returned.
|
||||
|
@ -50,23 +45,7 @@ export async function* getReactionUsers(
|
|||
const total = params.limit || Infinity
|
||||
const chunkSize = Math.min(params.chunkSize ?? 100, total)
|
||||
|
||||
let reaction: tl.TypeReaction
|
||||
|
||||
if (params.customEmoji) {
|
||||
reaction = {
|
||||
_: 'reactionCustomEmoji',
|
||||
documentId: params.customEmoji,
|
||||
}
|
||||
} else if (params.emoji) {
|
||||
reaction = {
|
||||
_: 'reactionEmoji',
|
||||
emoticon: params.emoji,
|
||||
}
|
||||
} else {
|
||||
reaction = {
|
||||
_: 'reactionEmpty',
|
||||
}
|
||||
}
|
||||
const reaction = normalizeInputReaction(params.emoji)
|
||||
|
||||
for (;;) {
|
||||
const res: tl.RpcCallReturn['messages.getMessageReactionsList'] = await this.call({
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
import Long from 'long'
|
||||
|
||||
import { MtTypeAssertionError, tl } from '@mtcute/core'
|
||||
|
||||
import { TelegramClient } from '../../client'
|
||||
import { InputPeerLike, Message, PeersIndex } from '../../types'
|
||||
import { InputPeerLike, InputReaction, Message, normalizeInputReaction } from '../../types'
|
||||
import { assertIsUpdatesGroup } from '../../utils/updates-utils'
|
||||
|
||||
/**
|
||||
|
@ -11,7 +7,7 @@ import { assertIsUpdatesGroup } from '../../utils/updates-utils'
|
|||
*
|
||||
* @param chatId Chat ID with the message to react to
|
||||
* @param message Message ID to react to
|
||||
* @param emoji Reaction emoji (if `tl.Long` then this is a custom emoji) or `null` to remove
|
||||
* @param emoji Reaction emoji (or `null` to remove reaction)
|
||||
* @param big Whether to use a big reaction
|
||||
* @returns Message to which the reaction was sent
|
||||
* @internal
|
||||
|
@ -20,26 +16,10 @@ export async function sendReaction(
|
|||
this: TelegramClient,
|
||||
chatId: InputPeerLike,
|
||||
message: number,
|
||||
emoji: string | tl.Long | null,
|
||||
emoji?: InputReaction | null,
|
||||
big = false,
|
||||
): Promise<Message> {
|
||||
let reaction: tl.TypeReaction
|
||||
|
||||
if (Long.isLong(emoji)) {
|
||||
reaction = {
|
||||
_: 'reactionCustomEmoji',
|
||||
documentId: emoji,
|
||||
}
|
||||
} else if (emoji) {
|
||||
reaction = {
|
||||
_: 'reactionEmoji',
|
||||
emoticon: emoji,
|
||||
}
|
||||
} else {
|
||||
reaction = {
|
||||
_: 'reactionEmpty',
|
||||
}
|
||||
}
|
||||
const reaction = normalizeInputReaction(emoji)
|
||||
|
||||
const res = await this.call({
|
||||
_: 'messages.sendReaction',
|
||||
|
@ -57,17 +37,5 @@ export async function sendReaction(
|
|||
// idk why, they contain literally the same data
|
||||
// so we can just return the message from the first one
|
||||
|
||||
this._handleUpdate(res, true)
|
||||
|
||||
const upd = res.updates.find((it) => it._ === 'updateEditChannelMessage') as
|
||||
| tl.RawUpdateEditChannelMessage
|
||||
| undefined
|
||||
|
||||
if (!upd) {
|
||||
throw new MtTypeAssertionError('messages.sendReaction (@ .updates[*])', 'updateEditChannelMessage', 'undefined')
|
||||
}
|
||||
|
||||
const peers = PeersIndex.from(res)
|
||||
|
||||
return new Message(this, upd.message, peers)
|
||||
return this._findMessageInUpdate(res, true)
|
||||
}
|
||||
|
|
|
@ -5,6 +5,31 @@ import { TelegramClient } from '../../client'
|
|||
import { makeInspectable } from '../../utils'
|
||||
import { PeersIndex, User } from '../peers'
|
||||
|
||||
/**
|
||||
* Emoji describing a reaction.
|
||||
*
|
||||
* Either a `string` with a unicode emoji, or a `tl.Long` for a custom emoji
|
||||
*/
|
||||
export type InputReaction = string | tl.Long
|
||||
|
||||
export function normalizeInputReaction(reaction?: InputReaction | null): tl.TypeReaction {
|
||||
if (typeof reaction === 'string') {
|
||||
return {
|
||||
_: 'reactionEmoji',
|
||||
emoticon: reaction,
|
||||
}
|
||||
} else if (reaction) {
|
||||
return {
|
||||
_: 'reactionCustomEmoji',
|
||||
documentId: reaction,
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
_: 'reactionEmpty',
|
||||
}
|
||||
}
|
||||
|
||||
export class PeerReaction {
|
||||
constructor(
|
||||
readonly client: TelegramClient,
|
||||
|
|
Loading…
Reference in a new issue