import { Chat, ChatMember, ChatMemberUpdated, Context, Filter, User } from "./deps.js";
export type MaybePromise<T> = T | Promise<T>;
export type Predicate<C extends Context> = (ctx: C) => MaybePromise<boolean>;
type UserType = {
    from: User;
};
export type UserContext<C extends Context = Context> = C & UserType;
type SenderChatType = {
    senderChat: Chat;
};
export type SenderChatContext<C extends Context = Context> = C & SenderChatType;
type MyChatMemberType<T extends ChatMember["status"]> = {
    myChatMember: ChatMemberUpdated & {
        new_chat_member: {
            status: T;
        };
    };
};
export type MyChatMemberContext<C extends Context = Context, T extends ChatMember["status"] = ChatMember["status"]> = C & MyChatMemberType<T>;
type ChatMemberType<T extends ChatMember["status"]> = {
    chatMember: ChatMemberUpdated & {
        new_chat_member: {
            status: T;
        };
    };
};
export type ChatMemberContext<C extends Context = Context, T extends ChatMember["status"] = ChatMember["status"]> = C & ChatMemberType<T>;
export type UserSharedContext<C extends Context = Context> = Filter<C, ":user_shared">;
export type ChatSharedContext<C extends Context = Context> = Filter<C, ":chat_shared">;
export {};
