/** * MTKruto - Cross-runtime JavaScript library for building Telegram clients * Copyright (C) 2023-2026 Roj * * This file is part of MTKruto. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ import type { Api } from "../2_tl.js"; import type { CallbackQuery, ChatP, ChosenInlineResult, Message, MessageTypes, Update, UpdateMap } from "../3_types.js"; type AnyLevel1 = Update["type"]; type GetLevel1Type = UpdateMap[L1]; interface Level2Map { "message": keyof MessageTypes; "editedMessage": keyof MessageTypes; "scheduledMessage": keyof MessageTypes; "callbackQuery": "message" | "inlineMessageId" | "data" | "gameShortName"; "chosenInlineResult": "inlineMessageId"; } interface Level2TypeMap { "callbackQuery": CallbackQuery; "chosenInlineResult": ChosenInlineResult; } type GetAnyLevel2 = L1 extends keyof Level2Map ? Level2Map[L1] : never; type AnyLevel2 = L1 extends unknown ? `${L1 extends "message" | "editedMessage" | "scheduledMessage" ? L1 | "" : L1}:${GetAnyLevel2}` : never; type GetLevel2Type = L2 extends Message["type"] ? L1 extends "" ? ({ type: "message"; message: Extract; } | { type: "editedMessage"; editedMessage: Extract; } | { type: "scheduledMessage"; scheduledMessage: Extract; }) : L1 extends "message" | "editedMessage" | "scheduledMessage" ? { type: L1; } & { [P in L1]: Extract; } : never : L1 extends keyof Level2TypeMap ? L2 extends Level2Map[L1] ? { type: L1; } & { [P in L1]: Level2TypeMap[P] & { [P in L2]-?: P extends keyof Level2TypeMap[L1] ? NonNullable : never; }; } : never : false; type AnyLevelX = AnyLevel1 | AnyLevel2 | Api.Update["_"]; type FilterCore = Q extends AnyLevel1 ? GetLevel1Type : Q extends `${infer L1}:${infer L2}` ? GetLevel2Type : Q extends Api.Update["_"] ? { type: "update"; update: Extract; } : 1; interface Shortcuts { msg: T extends { type: "message"; } ? T["message"] : T extends { type: "editedMessage"; } ? T["editedMessage"] : T extends { type: "scheduledMessage"; } ? T["scheduledMessage"] : T extends { type: "callbackQuery"; } ? T["callbackQuery"]["message"] : T extends { type: "guestQuery"; } ? T["guestQuery"]["message"] : undefined; chat: T extends { type: "callbackQuery"; } ? NonNullable["chat"] | undefined : Shortcuts["msg"] extends object ? Shortcuts["msg"]["chat"] : T extends { type: "messageReactions"; } ? T["messageReactions"]["chat"] : T extends { type: "messageReactionCount"; } ? T["messageReactionCount"]["chat"] : T extends { type: "myChatMember"; } ? T["myChatMember"]["chat"] : T extends { type: "chatMember"; } ? T["chatMember"]["chat"] : T extends { type: "joinRequest"; } ? T["joinRequest"]["chat"] : undefined; chatId: Shortcuts["chat"] extends object ? number : T extends { type: "messageInteractions"; } ? number : T extends { type: "deletedChat"; } ? number : T extends { type: "botCommands"; } ? number : T extends { type: "chatAction"; } ? number : undefined; from: T extends { type: "callbackQuery"; } ? T["callbackQuery"]["from"] : T extends { type: "inlineQuery"; } ? T["inlineQuery"]["from"] : T extends { type: "chosenInlineResult"; } ? T["chosenInlineResult"]["from"] : T extends { type: "message"; } ? T["message"]["from"] : T extends { type: "editedMessage"; } ? T["editedMessage"]["from"] : T extends { type: "scheduledMessage"; } ? T["scheduledMessage"]["from"] : T extends { type: "preCheckoutQuery"; } ? T["preCheckoutQuery"]["from"] : T extends { type: "joinRequest"; } ? T["joinRequest"]["from"] : T extends { type: "pollAnswer"; } ? T["pollAnswer"]["from"] : undefined; message: T extends { type: "message"; } ? T["message"] : undefined; editedMessage: T extends { type: "editedMessage"; } ? T["editedMessage"] : undefined; guestQuery: T extends { type: "guestQuery"; } ? T["guestQuery"] : undefined; callbackQuery: T extends { type: "callbackQuery"; } ? T["callbackQuery"] : undefined; inlineQuery: T extends { type: "inlineQuery"; } ? T["inlineQuery"] : undefined; chosenInlineResult: T extends { type: "chosenInlineResult"; } ? T["chosenInlineResult"] : undefined; } type GetShortcuts = T["type"] extends "update" ? Record : Shortcuts; type Filter = { update: FilterCore; } & GetShortcuts>; export type FilterQuery = AnyLevelX; export type WithFilter = T & Filter; export declare function match(filter: Q, value: T): boolean; type ChatType = { chat: { type: T; }; }; export type WithChatType = C & ChatType & { msg?: ChatType; message?: ChatType; editedMessage?: ChatType; callbackQuery?: { message?: ChatType; }; update: { callbackQuery?: { message?: ChatType; }; message?: ChatType; editedMessage?: ChatType; scheduledMessage?: ChatType; messageReactions?: ChatType; messageReactionCount?: ChatType; myChatMember?: ChatType; chatMember?: ChatType; joinRequest?: ChatType; }; }; export {}; //# sourceMappingURL=3_filters.d.ts.map