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
|
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
|
||||||
|
|
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
|
@ -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
|
||||||
|
|
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