@grammyjs/chat-members
Version:
Chat member plugin for grammY
64 lines (63 loc) • 2.86 kB
TypeScript
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 {};