feat(dispatcher): deleted messages update

This commit is contained in:
teidesu 2021-05-16 13:06:26 +03:00
parent 6e86ca464a
commit 803daecdf3
5 changed files with 117 additions and 0 deletions

View file

@ -3,6 +3,7 @@
raw: RawUpdate = IGNORE raw: RawUpdate = IGNORE
new_message = Message new_message = Message
edit_message = Message edit_message = Message
delete_message = DeleteMessageUpdate
chat_member: ChatMemberUpdate = ChatMemberUpdate chat_member: ChatMemberUpdate = ChatMemberUpdate
inline_query = InlineQuery inline_query = InlineQuery
chosen_inline_result = ChosenInlineResult chosen_inline_result = ChosenInlineResult

View file

@ -4,6 +4,7 @@ import {
RawUpdateHandler, RawUpdateHandler,
NewMessageHandler, NewMessageHandler,
EditMessageHandler, EditMessageHandler,
DeleteMessageHandler,
ChatMemberUpdateHandler, ChatMemberUpdateHandler,
InlineQueryHandler, InlineQueryHandler,
ChosenInlineResultHandler, ChosenInlineResultHandler,
@ -22,6 +23,7 @@ import { PollUpdate } from './updates/poll-update'
import { PollVoteUpdate } from './updates/poll-vote' import { PollVoteUpdate } from './updates/poll-vote'
import { UserStatusUpdate } from './updates/user-status-update' import { UserStatusUpdate } from './updates/user-status-update'
import { UserTypingUpdate } from './updates/user-typing-update' import { UserTypingUpdate } from './updates/user-typing-update'
import { DeleteMessageUpdate } from './updates/delete-message-update'
function _create<T extends UpdateHandler>( function _create<T extends UpdateHandler>(
type: T['type'], type: T['type'],
@ -123,6 +125,36 @@ export namespace handlers {
return _create('edit_message', filter, handler) return _create('edit_message', filter, handler)
} }
/**
* Create a delete message handler
*
* @param handler Delete message handler
*/
export function deleteMessage(
handler: DeleteMessageHandler['callback']
): DeleteMessageHandler
/**
* Create a delete message handler with a filter
*
* @param filter Update filter
* @param handler Delete message handler
*/
export function deleteMessage<Mod>(
filter: UpdateFilter<DeleteMessageUpdate, Mod>,
handler: DeleteMessageHandler<
filters.Modify<DeleteMessageUpdate, Mod>
>['callback']
): DeleteMessageHandler
/** @internal */
export function deleteMessage(
filter: any,
handler?: any
): DeleteMessageHandler {
return _create('delete_message', filter, handler)
}
/** /**
* Create a chat member update handler * Create a chat member update handler
* *

View file

@ -20,6 +20,7 @@ import {
RawUpdateHandler, RawUpdateHandler,
NewMessageHandler, NewMessageHandler,
EditMessageHandler, EditMessageHandler,
DeleteMessageHandler,
ChatMemberUpdateHandler, ChatMemberUpdateHandler,
InlineQueryHandler, InlineQueryHandler,
ChosenInlineResultHandler, ChosenInlineResultHandler,
@ -38,6 +39,7 @@ import { PollUpdate } from './updates/poll-update'
import { PollVoteUpdate } from './updates/poll-vote' import { PollVoteUpdate } from './updates/poll-vote'
import { UserStatusUpdate } from './updates/user-status-update' import { UserStatusUpdate } from './updates/user-status-update'
import { UserTypingUpdate } from './updates/user-typing-update' import { UserTypingUpdate } from './updates/user-typing-update'
import { DeleteMessageUpdate } from './updates/delete-message-update'
const noop = () => {} const noop = () => {}
@ -77,6 +79,10 @@ const userTypingParser: UpdateParser = [
'user_typing', 'user_typing',
(client, upd) => new UserTypingUpdate(client, upd as any), (client, upd) => new UserTypingUpdate(client, upd as any),
] ]
const deleteMessageParser: UpdateParser = [
'delete_message',
(client, upd) => new DeleteMessageUpdate(client, upd as any)
]
const PARSERS: Partial< const PARSERS: Partial<
Record<(tl.TypeUpdate | tl.TypeMessage)['_'], UpdateParser> Record<(tl.TypeUpdate | tl.TypeMessage)['_'], UpdateParser>
@ -117,6 +123,8 @@ const PARSERS: Partial<
updateChannelUserTyping: userTypingParser, updateChannelUserTyping: userTypingParser,
updateChatUserTyping: userTypingParser, updateChatUserTyping: userTypingParser,
updateUserTyping: userTypingParser, updateUserTyping: userTypingParser,
updateDeleteChannelMessages: deleteMessageParser,
updateDeleteMessages: deleteMessageParser,
} }
/** /**
@ -503,6 +511,38 @@ export class Dispatcher {
this._addKnownHandler('editMessage', filter, handler, group) this._addKnownHandler('editMessage', filter, handler, group)
} }
/**
* Register a delete message handler without any filters
*
* @param handler Delete message handler
* @param group Handler group index
* @internal
*/
onDeleteMessage(
handler: DeleteMessageHandler['callback'],
group?: number
): void
/**
* Register a delete message handler with a filter
*
* @param filter Update filter
* @param handler Delete message handler
* @param group Handler group index
*/
onDeleteMessage<Mod>(
filter: UpdateFilter<DeleteMessageUpdate, Mod>,
handler: DeleteMessageHandler<
filters.Modify<DeleteMessageUpdate, Mod>
>['callback'],
group?: number
): void
/** @internal */
onDeleteMessage(filter: any, handler?: any, group?: number): void {
this._addKnownHandler('deleteMessage', filter, handler, group)
}
/** /**
* Register a chat member update handler without any filters * Register a chat member update handler without any filters
* *

View file

@ -15,6 +15,7 @@ import { PollUpdate } from './updates/poll-update'
import { PollVoteUpdate } from './updates/poll-vote' import { PollVoteUpdate } from './updates/poll-vote'
import { UserStatusUpdate } from './updates/user-status-update' import { UserStatusUpdate } from './updates/user-status-update'
import { UserTypingUpdate } from './updates/user-typing-update' import { UserTypingUpdate } from './updates/user-typing-update'
import { DeleteMessageUpdate } from './updates/delete-message-update'
interface BaseUpdateHandler<Type, Handler, Checker> { interface BaseUpdateHandler<Type, Handler, Checker> {
type: Type type: Type
@ -57,6 +58,10 @@ export type EditMessageHandler<T = Message> = ParsedUpdateHandler<
'edit_message', 'edit_message',
T T
> >
export type DeleteMessageHandler<T = DeleteMessageUpdate> = ParsedUpdateHandler<
'delete_message',
T
>
export type ChatMemberUpdateHandler<T = ChatMemberUpdate> = ParsedUpdateHandler< export type ChatMemberUpdateHandler<T = ChatMemberUpdate> = ParsedUpdateHandler<
'chat_member', 'chat_member',
T T
@ -90,6 +95,7 @@ export type UpdateHandler =
| RawUpdateHandler | RawUpdateHandler
| NewMessageHandler | NewMessageHandler
| EditMessageHandler | EditMessageHandler
| DeleteMessageHandler
| ChatMemberUpdateHandler | ChatMemberUpdateHandler
| InlineQueryHandler | InlineQueryHandler
| ChosenInlineResultHandler | ChosenInlineResultHandler

View file

@ -0,0 +1,38 @@
import { tl } from '@mtcute/tl'
import { makeInspectable } from '@mtcute/client/src/types/utils'
import { MAX_CHANNEL_ID } from '@mtcute/core'
import { TelegramClient } from '@mtcute/client'
/**
* One or more messages were deleted
*/
export class DeleteMessageUpdate {
readonly client: TelegramClient
readonly raw: tl.RawUpdateDeleteMessages | tl.RawUpdateDeleteChannelMessages
constructor(
client: TelegramClient,
raw: tl.RawUpdateDeleteMessages | tl.RawUpdateDeleteChannelMessages
) {
this.client = client
this.raw = raw
}
/**
* IDs of the messages which were deleted
*/
get messageIds(): number[] {
return this.raw.messages
}
/**
* Marked ID of the channel where the messages were deleted
*/
get channelId(): number | null {
return this.raw._ === 'updateDeleteChannelMessages'
? MAX_CHANNEL_ID - this.raw.channelId
: null
}
}
makeInspectable(DeleteMessageUpdate)