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