UNPKG

@grammyjs/chat-members

Version:
64 lines (63 loc) 2.86 kB
import { type Api, type ChatMember, Context, type RawApi, type Transformer } from "./deps.node.js"; import type { ChatMemberQuery, FilteredChatMember } from "./filters.js"; type MaybeArray<T> = T | T[]; type HydratedChatMember<C extends ChatMember> = C & { /** * Utility function to query the status of the chat member. * * Pass one of 'admin', 'free', 'in', 'out', 'regular', 'restricted_in', * 'restricted_out', or one of the default Telegram statuses ('administrator', * 'creator', 'kicked', 'left', 'member', 'restricted'), or an array of them. * * Returns true if the chat member matches the query. */ is: <Q extends ChatMemberQuery>(query: MaybeArray<Q>) => this is FilteredChatMember<HydratedChatMember<C>, Q>; }; /** * Hydrates the return type of a function */ type HydrateReturnType<F extends (...args: any[]) => Promise<MaybeArray<ChatMember>>> = (...args: Parameters<F>) => Promise<Awaited<ReturnType<F>> extends infer C ? [C] extends [Array<ChatMember>] ? HydratedChatMember<C[number]>[] : [C] extends [ChatMember] ? HydratedChatMember<C> : never : never>; /** * Hydrate Context, Api, or RawApi. */ type AddHydrate<M extends (keyof Context | RawApi) & string, T extends Record<M, (...args: any[]) => Promise<MaybeArray<ChatMember>>>> = { [K in M]: HydrateReturnType<T[K]>; }; type RawApiHydrate<R extends RawApi> = AddHydrate<"getChatMember" | "getChatAdministrators", R>; type ApiHydrate<A extends Api> = AddHydrate<"getChatMember" | "getChatAdministrators", A> & { raw: RawApiHydrate<A["raw"]>; }; type ContextHydrate<C extends Context> = AddHydrate<"getChatMember" | "getChatAdministrators" | "getAuthor", C> & { api: ApiHydrate<C["api"]>; }; /** * Context flavor that adds a convenient `is` method to the results of * `getChatMember`, `getChatAdministrators`, and `getAuthor`. * Must be used together with the `hydrateChatMember` api transformer. */ export type HydrateChatMemberFlavor<C extends Context> = ContextHydrate<C> & C; /** * Api flavor that adds a convenient `is` method to the results of * `getChatMember` and `getChatAdministrators`. * Must be used together with the `hydrateChatMember` api transformer. */ export type HydrateChatMemberApiFlavor<A extends Api> = ApiHydrate<A> & A; /** * Api transformer that adds a convenient `is` method to the objects returned by * `getChatMember`, `getChatAdministrators`, and `getAuthor`. * * Example: * ```typescript * const bot = new Bot<HydrateChatMemberFlavor<Context>>(""); * bot.api.config.use(hydrateChatMember()); * * bot.on("message", async (ctx) => { * const author = await ctx.getAuthor(); * if (author.is("admin")) { * author.status; // "creator" | "administrator" * } * }); * ``` */ export declare function hydrateChatMember<R extends RawApi = RawApi>(): Transformer<R>; export {};