grammy
Version:
The Telegram Bot Framework.
1,076 lines (1,075 loc) • 44.4 kB
TypeScript
import { type Context } from "./context.js";
import { type Update } from "./types.js";
type FilterFunction<C extends Context, D extends C> = (ctx: C) => ctx is D;
/**
* > This is an advanced function of grammY.
*
* Takes a filter query and turns it into a predicate function that can check in
* constant time whether a given context object satisfies the query. The created
* predicate can be passed to `bot.filter` and will narrow down the context
* accordingly.
*
* This function is used internally by `bot.on` but exposed for advanced usage
* like the following.
* ```ts
* // Listens for updates except forwards of messages or channel posts
* bot.drop(matchFilter(':forward_origin'), ctx => { ... })
* ```
*
* Check out the
* [documentation](https://grammy.dev/ref/core/composer#on)
* of `bot.on` for examples. In addition, the
* [website](https://grammy.dev/guide/filter-queries) contains more
* information about how filter queries work in grammY.
*
* @param filter A filter query or an array of filter queries
*/
export declare function matchFilter<C extends Context, Q extends FilterQuery>(filter: Q | Q[]): FilterFunction<C, Filter<C, Q>>;
export declare function parse(filter: FilterQuery | FilterQuery[]): string[][];
export declare function preprocess(filter: string[]): string[][];
declare const UPDATE_KEYS: {
readonly message: {
readonly direct_messages_topic: {};
readonly new_chat_members: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
readonly left_chat_member: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
readonly group_chat_created: {};
readonly supergroup_chat_created: {};
readonly migrate_to_chat_id: {};
readonly migrate_from_chat_id: {};
readonly successful_payment: {};
readonly refunded_payment: {};
readonly users_shared: {};
readonly chat_shared: {};
readonly connected_website: {};
readonly write_access_allowed: {};
readonly passport_data: {};
readonly boost_added: {};
readonly forum_topic_created: {};
readonly forum_topic_edited: {
readonly name: {};
readonly icon_custom_emoji_id: {};
};
readonly forum_topic_closed: {};
readonly forum_topic_reopened: {};
readonly general_forum_topic_hidden: {};
readonly general_forum_topic_unhidden: {};
readonly checklist: {
readonly others_can_add_tasks: {};
readonly others_can_mark_tasks_as_done: {};
};
readonly checklist_tasks_done: {};
readonly checklist_tasks_added: {};
readonly suggested_post_info: {};
readonly suggested_post_approved: {};
readonly suggested_post_approval_failed: {};
readonly suggested_post_declined: {};
readonly suggested_post_paid: {};
readonly suggested_post_refunded: {};
readonly sender_boost_count: {};
readonly forward_origin: {
readonly user: {};
readonly hidden_user: {};
readonly chat: {};
readonly channel: {};
};
readonly is_topic_message: {};
readonly is_automatic_forward: {};
readonly business_connection_id: {};
readonly text: {};
readonly animation: {};
readonly audio: {};
readonly document: {};
readonly paid_media: {};
readonly photo: {};
readonly sticker: {
readonly is_video: {};
readonly is_animated: {};
readonly premium_animation: {};
};
readonly story: {};
readonly video: {};
readonly video_note: {};
readonly voice: {};
readonly contact: {};
readonly dice: {};
readonly game: {};
readonly poll: {};
readonly venue: {};
readonly location: {};
readonly entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption_entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption: {};
readonly link_preview_options: {
readonly url: {};
readonly prefer_small_media: {};
readonly prefer_large_media: {};
readonly show_above_text: {};
};
readonly effect_id: {};
readonly paid_star_count: {};
readonly has_media_spoiler: {};
readonly new_chat_title: {};
readonly new_chat_photo: {};
readonly delete_chat_photo: {};
readonly message_auto_delete_timer_changed: {};
readonly pinned_message: {};
readonly invoice: {};
readonly proximity_alert_triggered: {};
readonly chat_background_set: {};
readonly giveaway_created: {};
readonly giveaway: {
readonly only_new_members: {};
readonly has_public_winners: {};
};
readonly giveaway_winners: {
readonly only_new_members: {};
readonly was_refunded: {};
};
readonly giveaway_completed: {};
readonly gift: {};
readonly unique_gift: {};
readonly paid_message_price_changed: {};
readonly video_chat_scheduled: {};
readonly video_chat_started: {};
readonly video_chat_ended: {};
readonly video_chat_participants_invited: {};
readonly web_app_data: {};
};
readonly edited_message: {
readonly direct_messages_topic: {};
readonly new_chat_members: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
readonly left_chat_member: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
readonly group_chat_created: {};
readonly supergroup_chat_created: {};
readonly migrate_to_chat_id: {};
readonly migrate_from_chat_id: {};
readonly successful_payment: {};
readonly refunded_payment: {};
readonly users_shared: {};
readonly chat_shared: {};
readonly connected_website: {};
readonly write_access_allowed: {};
readonly passport_data: {};
readonly boost_added: {};
readonly forum_topic_created: {};
readonly forum_topic_edited: {
readonly name: {};
readonly icon_custom_emoji_id: {};
};
readonly forum_topic_closed: {};
readonly forum_topic_reopened: {};
readonly general_forum_topic_hidden: {};
readonly general_forum_topic_unhidden: {};
readonly checklist: {
readonly others_can_add_tasks: {};
readonly others_can_mark_tasks_as_done: {};
};
readonly checklist_tasks_done: {};
readonly checklist_tasks_added: {};
readonly suggested_post_info: {};
readonly suggested_post_approved: {};
readonly suggested_post_approval_failed: {};
readonly suggested_post_declined: {};
readonly suggested_post_paid: {};
readonly suggested_post_refunded: {};
readonly sender_boost_count: {};
readonly forward_origin: {
readonly user: {};
readonly hidden_user: {};
readonly chat: {};
readonly channel: {};
};
readonly is_topic_message: {};
readonly is_automatic_forward: {};
readonly business_connection_id: {};
readonly text: {};
readonly animation: {};
readonly audio: {};
readonly document: {};
readonly paid_media: {};
readonly photo: {};
readonly sticker: {
readonly is_video: {};
readonly is_animated: {};
readonly premium_animation: {};
};
readonly story: {};
readonly video: {};
readonly video_note: {};
readonly voice: {};
readonly contact: {};
readonly dice: {};
readonly game: {};
readonly poll: {};
readonly venue: {};
readonly location: {};
readonly entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption_entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption: {};
readonly link_preview_options: {
readonly url: {};
readonly prefer_small_media: {};
readonly prefer_large_media: {};
readonly show_above_text: {};
};
readonly effect_id: {};
readonly paid_star_count: {};
readonly has_media_spoiler: {};
readonly new_chat_title: {};
readonly new_chat_photo: {};
readonly delete_chat_photo: {};
readonly message_auto_delete_timer_changed: {};
readonly pinned_message: {};
readonly invoice: {};
readonly proximity_alert_triggered: {};
readonly chat_background_set: {};
readonly giveaway_created: {};
readonly giveaway: {
readonly only_new_members: {};
readonly has_public_winners: {};
};
readonly giveaway_winners: {
readonly only_new_members: {};
readonly was_refunded: {};
};
readonly giveaway_completed: {};
readonly gift: {};
readonly unique_gift: {};
readonly paid_message_price_changed: {};
readonly video_chat_scheduled: {};
readonly video_chat_started: {};
readonly video_chat_ended: {};
readonly video_chat_participants_invited: {};
readonly web_app_data: {};
};
readonly channel_post: {
readonly channel_chat_created: {};
readonly direct_message_price_changed: {};
readonly is_paid_post: {};
readonly forward_origin: {
readonly user: {};
readonly hidden_user: {};
readonly chat: {};
readonly channel: {};
};
readonly is_topic_message: {};
readonly is_automatic_forward: {};
readonly business_connection_id: {};
readonly text: {};
readonly animation: {};
readonly audio: {};
readonly document: {};
readonly paid_media: {};
readonly photo: {};
readonly sticker: {
readonly is_video: {};
readonly is_animated: {};
readonly premium_animation: {};
};
readonly story: {};
readonly video: {};
readonly video_note: {};
readonly voice: {};
readonly contact: {};
readonly dice: {};
readonly game: {};
readonly poll: {};
readonly venue: {};
readonly location: {};
readonly entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption_entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption: {};
readonly link_preview_options: {
readonly url: {};
readonly prefer_small_media: {};
readonly prefer_large_media: {};
readonly show_above_text: {};
};
readonly effect_id: {};
readonly paid_star_count: {};
readonly has_media_spoiler: {};
readonly new_chat_title: {};
readonly new_chat_photo: {};
readonly delete_chat_photo: {};
readonly message_auto_delete_timer_changed: {};
readonly pinned_message: {};
readonly invoice: {};
readonly proximity_alert_triggered: {};
readonly chat_background_set: {};
readonly giveaway_created: {};
readonly giveaway: {
readonly only_new_members: {};
readonly has_public_winners: {};
};
readonly giveaway_winners: {
readonly only_new_members: {};
readonly was_refunded: {};
};
readonly giveaway_completed: {};
readonly gift: {};
readonly unique_gift: {};
readonly paid_message_price_changed: {};
readonly video_chat_scheduled: {};
readonly video_chat_started: {};
readonly video_chat_ended: {};
readonly video_chat_participants_invited: {};
readonly web_app_data: {};
};
readonly edited_channel_post: {
readonly channel_chat_created: {};
readonly direct_message_price_changed: {};
readonly is_paid_post: {};
readonly forward_origin: {
readonly user: {};
readonly hidden_user: {};
readonly chat: {};
readonly channel: {};
};
readonly is_topic_message: {};
readonly is_automatic_forward: {};
readonly business_connection_id: {};
readonly text: {};
readonly animation: {};
readonly audio: {};
readonly document: {};
readonly paid_media: {};
readonly photo: {};
readonly sticker: {
readonly is_video: {};
readonly is_animated: {};
readonly premium_animation: {};
};
readonly story: {};
readonly video: {};
readonly video_note: {};
readonly voice: {};
readonly contact: {};
readonly dice: {};
readonly game: {};
readonly poll: {};
readonly venue: {};
readonly location: {};
readonly entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption_entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption: {};
readonly link_preview_options: {
readonly url: {};
readonly prefer_small_media: {};
readonly prefer_large_media: {};
readonly show_above_text: {};
};
readonly effect_id: {};
readonly paid_star_count: {};
readonly has_media_spoiler: {};
readonly new_chat_title: {};
readonly new_chat_photo: {};
readonly delete_chat_photo: {};
readonly message_auto_delete_timer_changed: {};
readonly pinned_message: {};
readonly invoice: {};
readonly proximity_alert_triggered: {};
readonly chat_background_set: {};
readonly giveaway_created: {};
readonly giveaway: {
readonly only_new_members: {};
readonly has_public_winners: {};
};
readonly giveaway_winners: {
readonly only_new_members: {};
readonly was_refunded: {};
};
readonly giveaway_completed: {};
readonly gift: {};
readonly unique_gift: {};
readonly paid_message_price_changed: {};
readonly video_chat_scheduled: {};
readonly video_chat_started: {};
readonly video_chat_ended: {};
readonly video_chat_participants_invited: {};
readonly web_app_data: {};
};
readonly business_connection: {
readonly can_reply: {};
readonly is_enabled: {};
};
readonly business_message: {
readonly direct_messages_topic: {};
readonly new_chat_members: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
readonly left_chat_member: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
readonly group_chat_created: {};
readonly supergroup_chat_created: {};
readonly migrate_to_chat_id: {};
readonly migrate_from_chat_id: {};
readonly successful_payment: {};
readonly refunded_payment: {};
readonly users_shared: {};
readonly chat_shared: {};
readonly connected_website: {};
readonly write_access_allowed: {};
readonly passport_data: {};
readonly boost_added: {};
readonly forum_topic_created: {};
readonly forum_topic_edited: {
readonly name: {};
readonly icon_custom_emoji_id: {};
};
readonly forum_topic_closed: {};
readonly forum_topic_reopened: {};
readonly general_forum_topic_hidden: {};
readonly general_forum_topic_unhidden: {};
readonly checklist: {
readonly others_can_add_tasks: {};
readonly others_can_mark_tasks_as_done: {};
};
readonly checklist_tasks_done: {};
readonly checklist_tasks_added: {};
readonly suggested_post_info: {};
readonly suggested_post_approved: {};
readonly suggested_post_approval_failed: {};
readonly suggested_post_declined: {};
readonly suggested_post_paid: {};
readonly suggested_post_refunded: {};
readonly sender_boost_count: {};
readonly forward_origin: {
readonly user: {};
readonly hidden_user: {};
readonly chat: {};
readonly channel: {};
};
readonly is_topic_message: {};
readonly is_automatic_forward: {};
readonly business_connection_id: {};
readonly text: {};
readonly animation: {};
readonly audio: {};
readonly document: {};
readonly paid_media: {};
readonly photo: {};
readonly sticker: {
readonly is_video: {};
readonly is_animated: {};
readonly premium_animation: {};
};
readonly story: {};
readonly video: {};
readonly video_note: {};
readonly voice: {};
readonly contact: {};
readonly dice: {};
readonly game: {};
readonly poll: {};
readonly venue: {};
readonly location: {};
readonly entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption_entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption: {};
readonly link_preview_options: {
readonly url: {};
readonly prefer_small_media: {};
readonly prefer_large_media: {};
readonly show_above_text: {};
};
readonly effect_id: {};
readonly paid_star_count: {};
readonly has_media_spoiler: {};
readonly new_chat_title: {};
readonly new_chat_photo: {};
readonly delete_chat_photo: {};
readonly message_auto_delete_timer_changed: {};
readonly pinned_message: {};
readonly invoice: {};
readonly proximity_alert_triggered: {};
readonly chat_background_set: {};
readonly giveaway_created: {};
readonly giveaway: {
readonly only_new_members: {};
readonly has_public_winners: {};
};
readonly giveaway_winners: {
readonly only_new_members: {};
readonly was_refunded: {};
};
readonly giveaway_completed: {};
readonly gift: {};
readonly unique_gift: {};
readonly paid_message_price_changed: {};
readonly video_chat_scheduled: {};
readonly video_chat_started: {};
readonly video_chat_ended: {};
readonly video_chat_participants_invited: {};
readonly web_app_data: {};
};
readonly edited_business_message: {
readonly direct_messages_topic: {};
readonly new_chat_members: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
readonly left_chat_member: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
readonly group_chat_created: {};
readonly supergroup_chat_created: {};
readonly migrate_to_chat_id: {};
readonly migrate_from_chat_id: {};
readonly successful_payment: {};
readonly refunded_payment: {};
readonly users_shared: {};
readonly chat_shared: {};
readonly connected_website: {};
readonly write_access_allowed: {};
readonly passport_data: {};
readonly boost_added: {};
readonly forum_topic_created: {};
readonly forum_topic_edited: {
readonly name: {};
readonly icon_custom_emoji_id: {};
};
readonly forum_topic_closed: {};
readonly forum_topic_reopened: {};
readonly general_forum_topic_hidden: {};
readonly general_forum_topic_unhidden: {};
readonly checklist: {
readonly others_can_add_tasks: {};
readonly others_can_mark_tasks_as_done: {};
};
readonly checklist_tasks_done: {};
readonly checklist_tasks_added: {};
readonly suggested_post_info: {};
readonly suggested_post_approved: {};
readonly suggested_post_approval_failed: {};
readonly suggested_post_declined: {};
readonly suggested_post_paid: {};
readonly suggested_post_refunded: {};
readonly sender_boost_count: {};
readonly forward_origin: {
readonly user: {};
readonly hidden_user: {};
readonly chat: {};
readonly channel: {};
};
readonly is_topic_message: {};
readonly is_automatic_forward: {};
readonly business_connection_id: {};
readonly text: {};
readonly animation: {};
readonly audio: {};
readonly document: {};
readonly paid_media: {};
readonly photo: {};
readonly sticker: {
readonly is_video: {};
readonly is_animated: {};
readonly premium_animation: {};
};
readonly story: {};
readonly video: {};
readonly video_note: {};
readonly voice: {};
readonly contact: {};
readonly dice: {};
readonly game: {};
readonly poll: {};
readonly venue: {};
readonly location: {};
readonly entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption_entities: {
readonly mention: {};
readonly hashtag: {};
readonly cashtag: {};
readonly bot_command: {};
readonly url: {};
readonly email: {};
readonly phone_number: {};
readonly bold: {};
readonly italic: {};
readonly underline: {};
readonly strikethrough: {};
readonly spoiler: {};
readonly blockquote: {};
readonly expandable_blockquote: {};
readonly code: {};
readonly pre: {};
readonly text_link: {};
readonly text_mention: {};
readonly custom_emoji: {};
};
readonly caption: {};
readonly link_preview_options: {
readonly url: {};
readonly prefer_small_media: {};
readonly prefer_large_media: {};
readonly show_above_text: {};
};
readonly effect_id: {};
readonly paid_star_count: {};
readonly has_media_spoiler: {};
readonly new_chat_title: {};
readonly new_chat_photo: {};
readonly delete_chat_photo: {};
readonly message_auto_delete_timer_changed: {};
readonly pinned_message: {};
readonly invoice: {};
readonly proximity_alert_triggered: {};
readonly chat_background_set: {};
readonly giveaway_created: {};
readonly giveaway: {
readonly only_new_members: {};
readonly has_public_winners: {};
};
readonly giveaway_winners: {
readonly only_new_members: {};
readonly was_refunded: {};
};
readonly giveaway_completed: {};
readonly gift: {};
readonly unique_gift: {};
readonly paid_message_price_changed: {};
readonly video_chat_scheduled: {};
readonly video_chat_started: {};
readonly video_chat_ended: {};
readonly video_chat_participants_invited: {};
readonly web_app_data: {};
};
readonly deleted_business_messages: {};
readonly inline_query: {};
readonly chosen_inline_result: {};
readonly callback_query: {
readonly data: {};
readonly game_short_name: {};
};
readonly shipping_query: {};
readonly pre_checkout_query: {};
readonly poll: {};
readonly poll_answer: {};
readonly my_chat_member: {
readonly from: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
};
readonly chat_member: {
readonly from: {
readonly me: {};
readonly is_bot: {};
readonly is_premium: {};
readonly added_to_attachment_menu: {};
};
};
readonly chat_join_request: {};
readonly message_reaction: {
readonly old_reaction: {
readonly emoji: {};
readonly custom_emoji: {};
readonly paid: {};
};
readonly new_reaction: {
readonly emoji: {};
readonly custom_emoji: {};
readonly paid: {};
};
};
readonly message_reaction_count: {
readonly reactions: {
readonly emoji: {};
readonly custom_emoji: {};
readonly paid: {};
};
};
readonly chat_boost: {};
readonly removed_chat_boost: {};
readonly purchased_paid_media: {};
};
type KeyOf<T> = string & keyof T;
type S = typeof UPDATE_KEYS;
type L1S = KeyOf<S>;
type L2S<L1 extends L1S = L1S> = L1 extends unknown ? `${L1}:${KeyOf<S[L1]>}` : never;
type L3S<L1 extends L1S = L1S> = L1 extends unknown ? L3S_<L1> : never;
type L3S_<L1 extends L1S, L2 extends KeyOf<S[L1]> = KeyOf<S[L1]>> = L2 extends unknown ? `${L1}:${L2}:${KeyOf<S[L1][L2]>}` : never;
type L123 = L1S | L2S | L3S;
type InjectShortcuts<Q extends L123 = L123> = Q extends `${infer L1}:${infer L2}:${infer L3}` ? `${CollapseL1<L1, L1Shortcuts>}:${CollapseL2<L2, L2Shortcuts>}:${L3}` : Q extends `${infer L1}:${infer L2}` ? `${CollapseL1<L1, L1Shortcuts>}:${CollapseL2<L2>}` : CollapseL1<Q>;
type CollapseL1<Q extends string, L extends L1Shortcuts = Exclude<L1Shortcuts, "">> = Q | (L extends string ? Q extends typeof L1_SHORTCUTS[L][number] ? L : never : never);
type CollapseL2<Q extends string, L extends L2Shortcuts = Exclude<L2Shortcuts, "">> = Q | (L extends string ? Q extends typeof L2_SHORTCUTS[L][number] ? L : never : never);
type ComputeFilterQueryList = InjectShortcuts;
/**
* Represents a filter query that can be passed to `bot.on`. There are three
* different kinds of filter queries: Level 1, Level 2, and Level 3. Check out
* the [website](https://grammy.dev/guide/filter-queries) to read about how
* filter queries work in grammY, and how to use them.
*
* Here are three brief examples:
* ```ts
* // Listen for messages of any type (Level 1)
* bot.on('message', ctx => { ... })
* // Listen for audio messages only (Level 2)
* bot.on('message:audio', ctx => { ... })
* // Listen for text messages that have a URL entity (Level 3)
* bot.on('message:entities:url', ctx => { ... })
* ```
*/
export type FilterQuery = ComputeFilterQueryList;
/**
* Any kind of value that appears in the Telegram Bot API. When intersected with
* an optional field, it effectively removes `| undefined`.
*/
type NotUndefined = {};
/**
* Given a FilterQuery, returns an object that, when intersected with an Update,
* marks those properties as required that are guaranteed to exist.
*/
type RunQuery<Q extends string> = L1Discriminator<Q, L1Parts<Q>>;
type L1Parts<Q extends string> = Q extends `${infer L1}:${string}` ? L1 : Q;
type L2Parts<Q extends string, L1 extends string> = Q extends `${L1}:${infer L2}:${string}` ? L2 : Q extends `${L1}:${infer L2}` ? L2 : never;
type L1Discriminator<Q extends string, L1 extends string> = Combine<L1Fragment<Q, L1>, L1>;
type L1Fragment<Q extends string, L1 extends string> = L1 extends unknown ? Record<L1, L2Discriminator<L1, L2Parts<Q, L1>>> : never;
type L2Discriminator<L1 extends string, L2 extends string> = [L2] extends [
never
] ? L2ShallowFragment<L1> : Combine<L2Fragment<L1, L2>, L2>;
type L2Fragment<L1 extends string, L2 extends string> = L2 extends unknown ? Record<L2 | AddTwins<L1, L2>, NotUndefined> : never;
type L2ShallowFragment<L1 extends string> = Record<AddTwins<L1, never>, NotUndefined>;
type Combine<U, K extends string> = U extends unknown ? U & Partial<Record<Exclude<K, keyof U>, undefined>> : never;
/**
* This type infers which properties will be present on the given context object
* provided it matches the given filter query. If the filter query is a union
* type, the produced context object will be a union of possible combinations,
* hence allowing you to narrow down manually which of the properties are
* present.
*
* In some sense, this type computes `matchFilter` on the type level.
*/
export type Filter<C extends Context, Q extends FilterQuery> = PerformQuery<C, RunQuery<ExpandShortcuts<Q>>>;
export type FilterCore<Q extends FilterQuery> = PerformQueryCore<RunQuery<ExpandShortcuts<Q>>>;
type PerformQuery<C extends Context, U extends object> = U extends unknown ? FilteredContext<C, Update & U> : never;
type PerformQueryCore<U extends object> = U extends unknown ? FilteredContextCore<Update & U> : never;
type FilteredContext<C extends Context, U extends Update> = C & FilteredContextCore<U>;
type FilteredContextCore<U extends Update> = Record<"update", U> & Shortcuts<U>;
interface Shortcuts<U extends Update> {
message: [U["message"]] extends [object] ? U["message"] : undefined;
editedMessage: [U["edited_message"]] extends [object] ? U["edited_message"] : undefined;
channelPost: [U["channel_post"]] extends [object] ? U["channel_post"] : undefined;
editedChannelPost: [U["edited_channel_post"]] extends [object] ? U["edited_channel_post"] : undefined;
businessConnection: [U["business_connection"]] extends [object] ? U["business_connection"] : undefined;
businessMessage: [U["business_message"]] extends [object] ? U["business_message"] : undefined;
editedBusinessMessage: [U["edited_business_message"]] extends [object] ? U["edited_business_message"] : undefined;
deletedBusinessMessages: [U["deleted_business_messages"]] extends [object] ? U["deleted_business_messages"] : undefined;
messageReaction: [U["message_reaction"]] extends [object] ? U["message_reaction"] : undefined;
messageReactionCount: [U["message_reaction_count"]] extends [object] ? U["message_reaction_count"] : undefined;
inlineQuery: [U["inline_query"]] extends [object] ? U["inline_query"] : undefined;
chosenInlineResult: [U["chosen_inline_result"]] extends [object] ? U["chosen_inline_result"] : undefined;
callbackQuery: [U["callback_query"]] extends [object] ? U["callback_query"] : undefined;
shippingQuery: [U["shipping_query"]] extends [object] ? U["shipping_query"] : undefined;
preCheckoutQuery: [U["pre_checkout_query"]] extends [object] ? U["pre_checkout_query"] : undefined;
poll: [U["poll"]] extends [object] ? U["poll"] : undefined;
pollAnswer: [U["poll_answer"]] extends [object] ? U["poll_answer"] : undefined;
myChatMember: [U["my_chat_member"]] extends [object] ? U["my_chat_member"] : undefined;
chatMember: [U["chat_member"]] extends [object] ? U["chat_member"] : undefined;
chatJoinRequest: [U["chat_join_request"]] extends [object] ? U["chat_join_request"] : undefined;
chatBoost: [U["chat_boost"]] extends [object] ? U["chat_boost"] : undefined;
removedChatBoost: [U["removed_chat_boost"]] extends [object] ? U["removed_chat_boost"] : undefined;
purchasedPaidMedia: [U["purchased_paid_media"]] extends [object] ? U["purchased_paid_media"] : undefined;
msg: [U["message"]] extends [object] ? U["message"] : [U["edited_message"]] extends [object] ? U["edited_message"] : [U["channel_post"]] extends [object] ? U["channel_post"] : [U["edited_channel_post"]] extends [object] ? U["edited_channel_post"] : [U["business_message"]] extends [object] ? U["business_message"] : [U["edited_business_message"]] extends [object] ? U["edited_business_message"] : [U["callback_query"]] extends [object] ? U["callback_query"]["message"] : undefined;
chat: [U["callback_query"]] extends [object] ? NonNullable<U["callback_query"]["message"]>["chat"] | undefined : [Shortcuts<U>["msg"]] extends [object] ? Shortcuts<U>["msg"]["chat"] : [U["deleted_business_messages"]] extends [object] ? U["deleted_business_messages"]["chat"] : [U["message_reaction"]] extends [object] ? U["message_reaction"]["chat"] : [U["message_reaction_count"]] extends [object] ? U["message_reaction_count"]["chat"] : [U["my_chat_member"]] extends [object] ? U["my_chat_member"]["chat"] : [U["chat_member"]] extends [object] ? U["chat_member"]["chat"] : [U["chat_join_request"]] extends [object] ? U["chat_join_request"]["chat"] : [U["chat_boost"]] extends [object] ? U["chat_boost"]["chat"] : [U["removed_chat_boost"]] extends [object] ? U["removed_chat_boost"]["chat"] : undefined;
senderChat: [Shortcuts<U>["msg"]] extends [object] ? Shortcuts<U>["msg"]["sender_chat"] : undefined;
from: [U["business_connection"]] extends [object] ? U["business_connection"]["user"] : [U["message_reaction"]] extends [object] ? U["message_reaction"]["user"] : [U["chat_boost"]] extends [object] ? U["chat_boost"]["boost"]["source"]["user"] : [U["removed_chat_boost"]] extends [object] ? U["removed_chat_boost"]["source"]["user"] : [U["callback_query"]] extends [object] ? U["callback_query"]["from"] : [Shortcuts<U>["msg"]] extends [object] ? Shortcuts<U>["msg"]["from"] : [U["inline_query"]] extends [object] ? U["inline_query"]["from"] : [U["chosen_inline_result"]] extends [object] ? U["chosen_inline_result"]["from"] : [U["shipping_query"]] extends [object] ? U["shipping_query"]["from"] : [U["pre_checkout_query"]] extends [object] ? U["pre_checkout_query"]["from"] : [U["my_chat_member"]] extends [object] ? U["my_chat_member"]["from"] : [U["chat_member"]] extends [object] ? U["chat_member"]["from"] : [U["chat_join_request"]] extends [object] ? U["chat_join_request"]["from"] : undefined;
msgId: [U["callback_query"]] extends [object] ? number | undefined : [Shortcuts<U>["msg"]] extends [object] ? number : [U["message_reaction"]] extends [object] ? number : [U["message_reaction_count"]] extends [object] ? number : undefined;
chatId: [U["callback_query"]] extends [object] ? number | undefined : [Shortcuts<U>["chat"]] extends [object] ? number : [U["business_connection"]] extends [object] ? number : undefined;
businessConnectionId: [U["callback_query"]] extends [object] ? string | undefined : [Shortcuts<U>["msg"]] extends [object] ? string | undefined : [U["business_connection"]] extends [object] ? string : [U["deleted_business_messages"]] extends [object] ? string : undefined;
}
declare const L1_SHORTCUTS: {
readonly "": readonly ["message", "channel_post"];
readonly msg: readonly ["message", "channel_post"];
readonly edit: readonly ["edited_message", "edited_channel_post"];
};
declare const L2_SHORTCUTS: {
readonly "": readonly ["entities", "caption_entities"];
readonly media: readonly ["photo", "video"];
readonly file: readonly ["photo", "animation", "audio", "document", "video", "video_note", "voice", "sticker"];
};
type L1Shortcuts = KeyOf<typeof L1_SHORTCUTS>;
type L2Shortcuts = KeyOf<typeof L2_SHORTCUTS>;
type ExpandShortcuts<Q extends string> = Q extends `${infer L1}:${infer L2}:${infer L3}` ? `${ExpandL1<L1>}:${ExpandL2<L2>}:${L3}` : Q extends `${infer L1}:${infer L2}` ? `${ExpandL1<L1>}:${ExpandL2<L2>}` : ExpandL1<Q>;
type ExpandL1<S extends string> = S extends L1Shortcuts ? typeof L1_SHORTCUTS[S][number] : S;
type ExpandL2<S extends string> = S extends L2Shortcuts ? typeof L2_SHORTCUTS[S][number] : S;
type AddTwins<L1 extends string, L2 extends string> = TwinsFromL1<L1, L2> | TwinsFromL2<L1, L2>;
type TwinsFromL1<L1 extends string, L2 extends string> = L1 extends KeyOf<L1Equivalents> ? L1Equivalents[L1] : L2;
type L1Equivalents = {
message: "from";
edited_message: "from" | "edit_date";
channel_post: "sender_chat";
edited_channel_post: "sender_chat" | "edit_date";
business_message: "from";
edited_business_message: "from" | "edit_date";
};
type TwinsFromL2<L1 extends string, L2 extends string> = L1 extends KeyOf<L2Equivalents> ? L2 extends KeyOf<L2Equivalents[L1]> ? L2Equivalents[L1][L2] : L2 : L2;
type L2Equivalents = {
message: MessageEquivalents;
edited_message: MessageEquivalents;
channel_post: MessageEquivalents;
edited_channel_post: MessageEquivalents;
business_message: MessageEquivalents;
edited_business_message: MessageEquivalents;
};
type MessageEquivalents = {
animation: "document";
entities: "text";
caption_entities: "caption";
is_topic_message: "message_thread_id";
};
export {};