filters
the codegen'd hasX presence filters (bot api 10.0). all are re-exported from the top-level filters namespace and carry kinds metadata for the dispatcher fast-path. for usage, combinators (.and() / .or() / .not()), handcrafted filters and defineFilter, see dispatch & filters
import { filters } from 'puregram'
tg.onMessage(filters.hasText, (message) => {
// message.text is narrowed to string
return message.send(message.text)
})presence filters
message-family in the kinds column means every message-shaped update kind (message, edited_message, channel_post, … and the service events that derive from a Message payload)
| filter | narrows | kinds |
|---|---|---|
filters.hasActorChat | actorChat: Chat | message_reaction |
filters.hasAnimation | animation: Animation | message-family |
filters.hasAudio | audio: Audio | message-family |
filters.hasAuthorSignature | authorSignature: string | message-family |
filters.hasBio | bio: string | chat_join_request |
filters.hasBoostAdded | boostAdded: ChatBoostAdded | message-family |
filters.hasBusinessConnectionId | businessConnectionId: string | message-family |
filters.hasCaption | caption: string | message-family |
filters.hasCaptionEntities | captionEntities: MessageEntity[] | message-family |
filters.hasChannelChatCreated | channelChatCreated: true | message-family |
filters.hasChatBackgroundSet | chatBackgroundSet: ChatBackground | message-family |
filters.hasChatOwnerChanged | chatOwnerChanged: ChatOwnerChanged | message-family |
filters.hasChatOwnerLeft | chatOwnerLeft: ChatOwnerLeft | message-family |
filters.hasChatShared | chatShared: ChatShared | message-family |
filters.hasChatType | chatType: sender | private | group | supergroup | channel | inline_query |
filters.hasChecklist | checklist: Checklist | message-family |
filters.hasChecklistTasksAdded | checklistTasksAdded: ChecklistTasksAdded | message-family |
filters.hasChecklistTasksDone | checklistTasksDone: ChecklistTasksDone | message-family |
filters.hasCloseDate | closeDate: integer | poll |
filters.hasConnectedWebsite | connectedWebsite: string | message-family |
filters.hasContact | contact: Contact | message-family |
filters.hasCorrectOptionIds | correctOptionIds: integer[] | poll |
filters.hasCountryCodes | countryCodes: string[] | poll |
filters.hasData | data: string | callback_query |
filters.hasDeleteChatPhoto | deleteChatPhoto: true | message-family |
filters.hasDescription | description: string | poll |
filters.hasDescriptionEntities | descriptionEntities: MessageEntity[] | poll |
filters.hasDice | dice: Dice | message-family |
filters.hasDirectMessagePriceChanged | directMessagePriceChanged: DirectMessagePriceChanged | message-family |
filters.hasDirectMessagesTopic | directMessagesTopic: DirectMessagesTopic | message-family |
filters.hasDocument | document: Document | message-family |
filters.hasEditDate | editDate: integer | message-family |
filters.hasEffectId | effectId: string | message-family |
filters.hasEntities | entities: MessageEntity[] | message-family |
filters.hasExplanation | explanation: string | poll |
filters.hasExplanationEntities | explanationEntities: MessageEntity[] | poll |
filters.hasExplanationMedia | explanationMedia: PollMedia | poll |
filters.hasExternalReply | externalReply: ExternalReplyInfo | message-family |
filters.hasForumTopicClosed | forumTopicClosed: ForumTopicClosed | message-family |
filters.hasForumTopicCreated | forumTopicCreated: ForumTopicCreated | message-family |
filters.hasForumTopicEdited | forumTopicEdited: ForumTopicEdited | message-family |
filters.hasForumTopicReopened | forumTopicReopened: ForumTopicReopened | message-family |
filters.hasForwardOrigin | forwardOrigin: MessageOrigin | message-family |
filters.hasFrom | from: User | message-family |
filters.hasGame | game: Game | message-family |
filters.hasGameShortName | gameShortName: string | callback_query |
filters.hasGeneralForumTopicHidden | generalForumTopicHidden: GeneralForumTopicHidden | message-family |
filters.hasGeneralForumTopicUnhidden | generalForumTopicUnhidden: GeneralForumTopicUnhidden | message-family |
filters.hasGift | gift: GiftInfo | message-family |
filters.hasGiftUpgradeSent | giftUpgradeSent: GiftInfo | message-family |
filters.hasGiveaway | giveaway: Giveaway | message-family |
filters.hasGiveawayCompleted | giveawayCompleted: GiveawayCompleted | message-family |
filters.hasGiveawayCreated | giveawayCreated: GiveawayCreated | message-family |
filters.hasGiveawayWinners | giveawayWinners: GiveawayWinners | message-family |
filters.hasGroupChatCreated | groupChatCreated: true | message-family |
filters.hasGuestBotCallerChat | guestBotCallerChat: Chat | message-family |
filters.hasGuestBotCallerUser | guestBotCallerUser: User | message-family |
filters.hasGuestQueryId | guestQueryId: string | message-family |
filters.hasInlineMessageId | inlineMessageId: string | chosen_inline_result, callback_query |
filters.hasInviteLink | inviteLink: ChatInviteLink | my_chat_member, chat_member, chat_join_request |
filters.hasInvoice | invoice: Invoice | message-family |
filters.hasLeftChatMember | leftChatMember: User | message-family |
filters.hasLinkPreviewOptions | linkPreviewOptions: LinkPreviewOptions | message-family |
filters.hasLivePhoto | livePhoto: LivePhoto | message-family |
filters.hasLocation | location: Location | message, edited_message, channel_post, edited_channel_post, business_message, edited_business_message, guest_message, inline_query, chosen_inline_result, new_chat_members, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, pinned_message, invoice, successful_payment, users_shared, chat_shared, web_app_data, video_chat_scheduled, video_chat_started, video_chat_ended, video_chat_participants_invited, forum_topic_created, forum_topic_edited, forum_topic_closed, forum_topic_reopened, general_forum_topic_hidden, general_forum_topic_unhidden, giveaway_created, giveaway_completed, giveaway_winners, boost_added, message_auto_delete_timer_changed, migrate_to_chat_id, migrate_from_chat_id, passport_data, proximity_alert_triggered, write_access_allowed |
filters.hasManagedBotCreated | managedBotCreated: ManagedBotCreated | message-family |
filters.hasMedia | media: PollMedia | poll |
filters.hasMediaGroupId | mediaGroupId: string | message-family |
filters.hasMessage | message: MaybeInaccessibleMessage | callback_query |
filters.hasMessageAutoDeleteTimerChanged | messageAutoDeleteTimerChanged: MessageAutoDeleteTimerChanged | message-family |
filters.hasMessageThreadId | messageThreadId: integer | message-family |
filters.hasMigrateFromChatId | migrateFromChatId: integer | message-family |
filters.hasMigrateToChatId | migrateToChatId: integer | message-family |
filters.hasNewChatMembers | newChatMembers: User[] | message-family |
filters.hasNewChatPhoto | newChatPhoto: PhotoSize[] | message-family |
filters.hasNewChatTitle | newChatTitle: string | message-family |
filters.hasOpenPeriod | openPeriod: integer | poll |
filters.hasOrderInfo | orderInfo: OrderInfo | pre_checkout_query |
filters.hasPaidMedia | paidMedia: PaidMediaInfo | message-family |
filters.hasPaidMessagePriceChanged | paidMessagePriceChanged: PaidMessagePriceChanged | message-family |
filters.hasPaidStarCount | paidStarCount: integer | message-family |
filters.hasPassportData | passportData: PassportData | message-family |
filters.hasPhoto | photo: PhotoSize[] | message-family |
filters.hasPinnedMessage | pinnedMessage: MaybeInaccessibleMessage | message-family |
filters.hasPoll | poll: Poll | message-family |
filters.hasPollOptionAdded | pollOptionAdded: PollOptionAdded | message-family |
filters.hasPollOptionDeleted | pollOptionDeleted: PollOptionDeleted | message-family |
filters.hasProximityAlertTriggered | proximityAlertTriggered: ProximityAlertTriggered | message-family |
filters.hasQuestionEntities | questionEntities: MessageEntity[] | poll |
filters.hasQuote | quote: TextQuote | message-family |
filters.hasRefundedPayment | refundedPayment: RefundedPayment | message-family |
filters.hasReplyMarkup | replyMarkup: InlineKeyboardMarkup | message-family |
filters.hasReplyToChecklistTaskId | replyToChecklistTaskId: integer | message-family |
filters.hasReplyToPollOptionId | replyToPollOptionId: string | message-family |
filters.hasReplyToStory | replyToStory: Story | message-family |
filters.hasRights | rights: BusinessBotRights | business_connection |
filters.hasSenderBoostCount | senderBoostCount: integer | message-family |
filters.hasSenderBusinessBot | senderBusinessBot: User | message-family |
filters.hasSenderChat | senderChat: Chat | message-family |
filters.hasSenderTag | senderTag: string | message-family |
filters.hasShippingOptionId | shippingOptionId: string | pre_checkout_query |
filters.hasShowCaptionAboveMedia | showCaptionAboveMedia: true | message-family |
filters.hasSticker | sticker: Sticker | message-family |
filters.hasStory | story: Story | message-family |
filters.hasSuccessfulPayment | successfulPayment: SuccessfulPayment | message-family |
filters.hasSuggestedPostApprovalFailed | suggestedPostApprovalFailed: SuggestedPostApprovalFailed | message-family |
filters.hasSuggestedPostApproved | suggestedPostApproved: SuggestedPostApproved | message-family |
filters.hasSuggestedPostDeclined | suggestedPostDeclined: SuggestedPostDeclined | message-family |
filters.hasSuggestedPostInfo | suggestedPostInfo: SuggestedPostInfo | message-family |
filters.hasSuggestedPostPaid | suggestedPostPaid: SuggestedPostPaid | message-family |
filters.hasSuggestedPostRefunded | suggestedPostRefunded: SuggestedPostRefunded | message-family |
filters.hasSupergroupChatCreated | supergroupChatCreated: true | message-family |
filters.hasText | text: string | message-family |
filters.hasUniqueGift | uniqueGift: UniqueGiftInfo | message-family |
filters.hasUser | user: User | message_reaction, poll_answer |
filters.hasUsersShared | usersShared: UsersShared | message-family |
filters.hasVenue | venue: Venue | message-family |
filters.hasViaBot | viaBot: User | message-family |
filters.hasViaChatFolderInviteLink | viaChatFolderInviteLink: boolean | my_chat_member, chat_member |
filters.hasViaJoinRequest | viaJoinRequest: boolean | my_chat_member, chat_member |
filters.hasVideo | video: Video | message-family |
filters.hasVideoChatEnded | videoChatEnded: VideoChatEnded | message-family |
filters.hasVideoChatParticipantsInvited | videoChatParticipantsInvited: VideoChatParticipantsInvited | message-family |
filters.hasVideoChatScheduled | videoChatScheduled: VideoChatScheduled | message-family |
filters.hasVideoChatStarted | videoChatStarted: VideoChatStarted | message-family |
filters.hasVideoNote | videoNote: VideoNote | message-family |
filters.hasVoice | voice: Voice | message-family |
filters.hasVoterChat | voterChat: Chat | poll_answer |
filters.hasWebAppData | webAppData: WebAppData | message-family |
filters.hasWriteAccessAllowed | writeAccessAllowed: WriteAccessAllowed | message-family |
kind filters
match a specific update kind. callable filters.kind(k) or a shorthand property like filters.kind.message / filters.kind.editedMessage. filters.action is the same restricted to service-event kinds. the per-kind <Kind>Filter types (one for every kind on the updates page) are the pre-bound shape these produce