UNPKG

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