UNPKG

13.3 kBTypeScriptView Raw
1/** @format */
2import * as tg from './core/types/typegram';
3import * as tt from './telegram-types';
4import { Middleware, MiddlewareFn, MiddlewareObj } from './middleware';
5import Context, { FilteredContext, NarrowedContext } from './context';
6import { MaybeArray, NonemptyReadonlyArray, MaybePromise, Guard } from './core/helpers/util';
7import { type CallbackQuery } from './core/types/typegram';
8import { Digit, Reaction } from './reactions';
9type ReactionAddedOrRemoved = Reaction | `-${tg.TelegramEmoji}` | `-${Digit}${string}`;
10export type Triggers<C> = MaybeArray<string | RegExp | TriggerFn<C>>;
11type TriggerFn<C> = (value: string, ctx: C) => RegExpExecArray | null;
12export type Predicate<T> = (t: T) => boolean;
13export type AsyncPredicate<T> = (t: T) => Promise<boolean>;
14export type MatchedMiddleware<C extends Context, T extends tt.UpdateType | tt.MessageSubType = 'message' | 'channel_post'> = NonemptyReadonlyArray<Middleware<NarrowedContext<C, tt.MountMap[T]> & {
15 match: RegExpExecArray;
16}, tt.MountMap[T]>>;
17interface StartContextExtn extends tt.CommandContextExtn {
18 /**
19 * @deprecated Use ctx.payload instead
20 */
21 startPayload: string;
22}
23export declare class Composer<C extends Context> implements MiddlewareObj<C> {
24 private handler;
25 constructor(...fns: ReadonlyArray<Middleware<C>>);
26 /**
27 * Registers a middleware.
28 */
29 use(...fns: ReadonlyArray<Middleware<C>>): this;
30 /**
31 * Registers middleware for handling updates
32 * matching given type guard function.
33 * @deprecated use `Composer::on`
34 */
35 guard<U extends tg.Update>(guardFn: (update: tg.Update) => update is U, ...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, U>, U>>): this;
36 /**
37 * Registers middleware for handling updates narrowed by update types or filter queries.
38 */
39 on<Filter extends tt.UpdateType | Guard<C['update']>>(filters: MaybeArray<Filter>, ...fns: NonemptyReadonlyArray<Middleware<FilteredContext<C, Filter>>>): this;
40 /**
41 * Registers middleware for handling updates narrowed by update types or message subtypes.
42 * @deprecated Use filter utils instead. Support for Message subtype in `Composer::on` will be removed in Telegraf v5.
43 */
44 on<Filter extends tt.UpdateType | tt.MessageSubType>(filters: MaybeArray<Filter>, ...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tt.MountMap[Filter]>, tt.MountMap[Filter]>>): this;
45 /**
46 * Registers middleware for handling matching text messages.
47 */
48 hears(triggers: Triggers<NarrowedContext<C, tt.MountMap['text']>>, ...fns: MatchedMiddleware<C, 'text'>): this;
49 /**
50 * Registers middleware for handling specified commands.
51 */
52 command(command: Triggers<NarrowedContext<C, tt.MountMap['text']>>, ...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tt.MountMap['text']> & tt.CommandContextExtn>>): this;
53 /**
54 * Registers middleware for handling matching callback queries.
55 */
56 action(triggers: Triggers<NarrowedContext<C, tt.MountMap['callback_query']>>, ...fns: MatchedMiddleware<C, 'callback_query'>): this;
57 /**
58 * Registers middleware for handling matching inline queries.
59 */
60 inlineQuery(triggers: Triggers<NarrowedContext<C, tt.MountMap['inline_query']>>, ...fns: MatchedMiddleware<C, 'inline_query'>): this;
61 /**
62 * Registers middleware for handling game queries
63 */
64 gameQuery(...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tg.Update.CallbackQueryUpdate<CallbackQuery.GameQuery>>>>): this;
65 reaction(reaction: MaybeArray<ReactionAddedOrRemoved>, ...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tg.Update.MessageReactionUpdate> & {
66 match: ReactionAddedOrRemoved;
67 }, tg.Update.MessageReactionUpdate>>): this;
68 /**
69 * Registers middleware for dropping matching updates.
70 */
71 drop(predicate: Predicate<C>): this;
72 /** @deprecated use `Composer::drop` */
73 filter(predicate: Predicate<C>): this;
74 private entity;
75 email(email: Triggers<C>, ...fns: MatchedMiddleware<C>): this;
76 url(url: Triggers<C>, ...fns: MatchedMiddleware<C>): this;
77 textLink(link: Triggers<C>, ...fns: MatchedMiddleware<C>): this;
78 textMention(mention: Triggers<C>, ...fns: MatchedMiddleware<C>): this;
79 mention(mention: MaybeArray<string>, ...fns: MatchedMiddleware<C>): this;
80 phone(number: Triggers<C>, ...fns: MatchedMiddleware<C>): this;
81 hashtag(hashtag: MaybeArray<string>, ...fns: MatchedMiddleware<C>): this;
82 cashtag(cashtag: MaybeArray<string>, ...fns: MatchedMiddleware<C>): this;
83 spoiler(text: Triggers<C>, ...fns: MatchedMiddleware<C>): this;
84 /**
85 * Registers a middleware for handling /start
86 */
87 start(...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tt.MountMap['text']> & StartContextExtn>>): this;
88 /**
89 * Registers a middleware for handling /help
90 */
91 help(...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tt.MountMap['text']> & tt.CommandContextExtn>>): this;
92 /**
93 * Registers a middleware for handling /settings
94 */
95 settings(...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tt.MountMap['text']> & tt.CommandContextExtn>>): this;
96 middleware(): MiddlewareFn<C>;
97 static reply(...args: Parameters<Context['reply']>): MiddlewareFn<Context>;
98 static catch<C extends Context>(errorHandler: (err: unknown, ctx: C) => void, ...fns: ReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
99 /**
100 * Generates middleware that runs in the background.
101 */
102 static fork<C extends Context>(middleware: Middleware<C>): MiddlewareFn<C>;
103 static tap<C extends Context>(middleware: Middleware<C>): MiddlewareFn<C>;
104 /**
105 * Generates middleware that gives up control to the next middleware.
106 */
107 static passThru(): MiddlewareFn<Context>;
108 static lazy<C extends Context>(factoryFn: (ctx: C) => MaybePromise<Middleware<C>>): MiddlewareFn<C>;
109 static log(logFn?: (s: string) => void): MiddlewareFn<Context>;
110 /**
111 * @param trueMiddleware middleware to run if the predicate returns true
112 * @param falseMiddleware middleware to run if the predicate returns false
113 */
114 static branch<C extends Context>(predicate: boolean | Predicate<C> | AsyncPredicate<C>, trueMiddleware: Middleware<C>, falseMiddleware: Middleware<C>): MiddlewareFn<C>;
115 /**
116 * Generates optional middleware.
117 * @param predicate predicate to decide on a context object whether to run the middleware
118 * @param fns middleware to run if the predicate returns true
119 */
120 static optional<C extends Context>(predicate: Predicate<C> | AsyncPredicate<C>, ...fns: NonemptyReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
121 /** @deprecated use `Composer.drop` */
122 static filter<C extends Context>(predicate: Predicate<C>): MiddlewareFn<C>;
123 /**
124 * Generates middleware for dropping matching updates.
125 */
126 static drop<C extends Context>(predicate: Predicate<C>): MiddlewareFn<C>;
127 static dispatch<C extends Context, Handlers extends Record<string | number | symbol, Middleware<C>>>(routeFn: (ctx: C) => MaybePromise<keyof Handlers>, handlers: Handlers): Middleware<C>;
128 /**
129 * Generates optional middleware based on a predicate that only operates on `ctx.update`.
130 *
131 * Example:
132 * ```ts
133 * import { Composer, Update } from 'telegraf'
134 *
135 * const predicate = (u): u is Update.MessageUpdate => 'message' in u
136 * const middleware = Composer.guard(predicate, (ctx) => {
137 * const message = ctx.update.message
138 * })
139 * ```
140 *
141 * Note that `Composer.on('message')` is preferred over this.
142 *
143 * @param guardFn predicate to decide whether to run the middleware based on the `ctx.update` object
144 * @param fns middleware to run if the predicate returns true
145 * @see `Composer.optional` for a more generic version of this method that allows the predicate to operate on `ctx` itself
146 * @deprecated use `Composer.on`
147 */
148 static guard<C extends Context, U extends tg.Update>(guardFn: (u: tg.Update) => u is U, ...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, U>, U>>): MiddlewareFn<C>;
149 /**
150 * Generates middleware for handling updates narrowed by update types or filter queries.
151 */
152 static on<Ctx extends Context, Filter extends tt.UpdateType | Guard<Ctx['update']>>(filters: MaybeArray<Filter>, ...fns: NonemptyReadonlyArray<Middleware<FilteredContext<Ctx, Filter>>>): MiddlewareFn<Ctx>;
153 /**
154 * Generates middleware for handling updates narrowed by update types or message subtype.
155 * @deprecated Use filter utils instead. Support for Message subtype in `Composer.on` will be removed in Telegraf v5.
156 */
157 static on<Ctx extends Context, Filter extends tt.UpdateType | tt.MessageSubType>(filters: MaybeArray<Filter>, ...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<Ctx, tt.MountMap[Filter]>, tt.MountMap[Filter]>>): MiddlewareFn<Ctx>;
158 /**
159 * Generates middleware for handling provided update types.
160 * @deprecated use `Composer.on` instead
161 */
162 static mount: typeof Composer.on;
163 private static entity;
164 static entityText<C extends Context>(entityType: MaybeArray<string>, predicate: Triggers<C>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
165 static email<C extends Context>(email: Triggers<C>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
166 static phone<C extends Context>(number: Triggers<C>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
167 static url<C extends Context>(url: Triggers<C>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
168 static textLink<C extends Context>(link: Triggers<C>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
169 static textMention<C extends Context>(mention: Triggers<C>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
170 static mention<C extends Context>(mention: MaybeArray<string>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
171 static hashtag<C extends Context>(hashtag: MaybeArray<string>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
172 static cashtag<C extends Context>(cashtag: MaybeArray<string>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
173 static spoiler<C extends Context>(text: Triggers<C>, ...fns: MatchedMiddleware<C>): MiddlewareFn<C>;
174 private static match;
175 /**
176 * Generates middleware for handling matching text messages.
177 */
178 static hears<C extends Context>(triggers: Triggers<NarrowedContext<C, tt.MountMap['text']>>, ...fns: MatchedMiddleware<C, 'text'>): MiddlewareFn<C>;
179 /**
180 * Generates middleware for handling specified commands.
181 */
182 static command<C extends Context>(command: Triggers<NarrowedContext<C, tt.MountMap['text']>>, ...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tt.MountMap['text']> & tt.CommandContextExtn>>): MiddlewareFn<C>;
183 /**
184 * Generates middleware for handling matching callback queries.
185 */
186 static action<C extends Context>(triggers: Triggers<NarrowedContext<C, tt.MountMap['callback_query']>>, ...fns: MatchedMiddleware<C, 'callback_query'>): MiddlewareFn<C>;
187 /**
188 * Generates middleware for handling matching inline queries.
189 */
190 static inlineQuery<C extends Context>(triggers: Triggers<NarrowedContext<C, tt.MountMap['inline_query']>>, ...fns: MatchedMiddleware<C, 'inline_query'>): MiddlewareFn<C>;
191 static reaction<C extends Context>(reaction: MaybeArray<ReactionAddedOrRemoved>, ...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tg.Update.MessageReactionUpdate> & {
192 match: ReactionAddedOrRemoved;
193 }, tg.Update.MessageReactionUpdate>>): MiddlewareFn<C>;
194 /**
195 * Generates middleware responding only to specified users.
196 */
197 static acl<C extends Context>(userId: MaybeArray<number>, ...fns: NonemptyReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
198 private static memberStatus;
199 /**
200 * Generates middleware responding only to chat admins and chat creator.
201 */
202 static admin<C extends Context>(...fns: NonemptyReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
203 /**
204 * Generates middleware responding only to chat creator.
205 */
206 static creator<C extends Context>(...fns: NonemptyReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
207 /**
208 * Generates middleware running only in specified chat types.
209 */
210 static chatType<C extends Context>(type: MaybeArray<tg.Chat['type']>, ...fns: NonemptyReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
211 /**
212 * Generates middleware running only in private chats.
213 */
214 static privateChat<C extends Context>(...fns: NonemptyReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
215 /**
216 * Generates middleware running only in groups and supergroups.
217 */
218 static groupChat<C extends Context>(...fns: NonemptyReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
219 /**
220 * Generates middleware for handling game queries.
221 */
222 static gameQuery<C extends Context>(...fns: NonemptyReadonlyArray<Middleware<NarrowedContext<C, tg.Update.CallbackQueryUpdate<CallbackQuery.GameQuery>>>>): MiddlewareFn<C>;
223 static unwrap<C extends Context>(handler: Middleware<C>): MiddlewareFn<C>;
224 static compose<C extends Context>(middlewares: ReadonlyArray<Middleware<C>>): MiddlewareFn<C>;
225}
226export default Composer;
227//# sourceMappingURL=composer.d.ts.map
\No newline at end of file