feat(dispatcher): deleted messages update
This commit is contained in:
parent
6e86ca464a
commit
803daecdf3
5 changed files with 117 additions and 0 deletions
|
@ -3,6 +3,7 @@
|
|||
raw: RawUpdate = IGNORE
|
||||
new_message = Message
|
||||
edit_message = Message
|
||||
delete_message = DeleteMessageUpdate
|
||||
chat_member: ChatMemberUpdate = ChatMemberUpdate
|
||||
inline_query = InlineQuery
|
||||
chosen_inline_result = ChosenInlineResult
|
||||
|
|
|
@ -4,6 +4,7 @@ import {
|
|||
RawUpdateHandler,
|
||||
NewMessageHandler,
|
||||
EditMessageHandler,
|
||||
DeleteMessageHandler,
|
||||
ChatMemberUpdateHandler,
|
||||
InlineQueryHandler,
|
||||
ChosenInlineResultHandler,
|
||||
|
@ -22,6 +23,7 @@ import { PollUpdate } from './updates/poll-update'
|
|||
import { PollVoteUpdate } from './updates/poll-vote'
|
||||
import { UserStatusUpdate } from './updates/user-status-update'
|
||||
import { UserTypingUpdate } from './updates/user-typing-update'
|
||||
import { DeleteMessageUpdate } from './updates/delete-message-update'
|
||||
|
||||
function _create<T extends UpdateHandler>(
|
||||
type: T['type'],
|
||||
|
@ -123,6 +125,36 @@ export namespace handlers {
|
|||
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
|
||||
*
|
||||
|
|
|
@ -20,6 +20,7 @@ import {
|
|||
RawUpdateHandler,
|
||||
NewMessageHandler,
|
||||
EditMessageHandler,
|
||||
DeleteMessageHandler,
|
||||
ChatMemberUpdateHandler,
|
||||
InlineQueryHandler,
|
||||
ChosenInlineResultHandler,
|
||||
|
@ -38,6 +39,7 @@ import { PollUpdate } from './updates/poll-update'
|
|||
import { PollVoteUpdate } from './updates/poll-vote'
|
||||
import { UserStatusUpdate } from './updates/user-status-update'
|
||||
import { UserTypingUpdate } from './updates/user-typing-update'
|
||||
import { DeleteMessageUpdate } from './updates/delete-message-update'
|
||||
|
||||
const noop = () => {}
|
||||
|
||||
|
@ -77,6 +79,10 @@ const userTypingParser: UpdateParser = [
|
|||
'user_typing',
|
||||
(client, upd) => new UserTypingUpdate(client, upd as any),
|
||||
]
|
||||
const deleteMessageParser: UpdateParser = [
|
||||
'delete_message',
|
||||
(client, upd) => new DeleteMessageUpdate(client, upd as any)
|
||||
]
|
||||
|
||||
const PARSERS: Partial<
|
||||
Record<(tl.TypeUpdate | tl.TypeMessage)['_'], UpdateParser>
|
||||
|
@ -117,6 +123,8 @@ const PARSERS: Partial<
|
|||
updateChannelUserTyping: userTypingParser,
|
||||
updateChatUserTyping: userTypingParser,
|
||||
updateUserTyping: userTypingParser,
|
||||
updateDeleteChannelMessages: deleteMessageParser,
|
||||
updateDeleteMessages: deleteMessageParser,
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -503,6 +511,38 @@ export class Dispatcher {
|
|||
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
|
||||
*
|
||||
|
|
|
@ -15,6 +15,7 @@ import { PollUpdate } from './updates/poll-update'
|
|||
import { PollVoteUpdate } from './updates/poll-vote'
|
||||
import { UserStatusUpdate } from './updates/user-status-update'
|
||||
import { UserTypingUpdate } from './updates/user-typing-update'
|
||||
import { DeleteMessageUpdate } from './updates/delete-message-update'
|
||||
|
||||
interface BaseUpdateHandler<Type, Handler, Checker> {
|
||||
type: Type
|
||||
|
@ -57,6 +58,10 @@ export type EditMessageHandler<T = Message> = ParsedUpdateHandler<
|
|||
'edit_message',
|
||||
T
|
||||
>
|
||||
export type DeleteMessageHandler<T = DeleteMessageUpdate> = ParsedUpdateHandler<
|
||||
'delete_message',
|
||||
T
|
||||
>
|
||||
export type ChatMemberUpdateHandler<T = ChatMemberUpdate> = ParsedUpdateHandler<
|
||||
'chat_member',
|
||||
T
|
||||
|
@ -90,6 +95,7 @@ export type UpdateHandler =
|
|||
| RawUpdateHandler
|
||||
| NewMessageHandler
|
||||
| EditMessageHandler
|
||||
| DeleteMessageHandler
|
||||
| ChatMemberUpdateHandler
|
||||
| InlineQueryHandler
|
||||
| ChosenInlineResultHandler
|
||||
|
|
38
packages/dispatcher/src/updates/delete-message-update.ts
Normal file
38
packages/dispatcher/src/updates/delete-message-update.ts
Normal 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)
|
Loading…
Reference in a new issue