1 |
|
2 | import * as tg from './core/types/typegram';
|
3 | import * as tt from './telegram-types';
|
4 | import { Middleware, MiddlewareFn, MiddlewareObj } from './middleware';
|
5 | import Context, { FilteredContext, NarrowedContext } from './context';
|
6 | import { MaybeArray, NonemptyReadonlyArray, MaybePromise, Guard } from './core/helpers/util';
|
7 | import { type CallbackQuery } from './core/types/typegram';
|
8 | import { Digit, Reaction } from './reactions';
|
9 | type ReactionAddedOrRemoved = Reaction | `-${tg.TelegramEmoji}` | `-${Digit}${string}`;
|
10 | export type Triggers<C> = MaybeArray<string | RegExp | TriggerFn<C>>;
|
11 | type TriggerFn<C> = (value: string, ctx: C) => RegExpExecArray | null;
|
12 | export type Predicate<T> = (t: T) => boolean;
|
13 | export type AsyncPredicate<T> = (t: T) => Promise<boolean>;
|
14 | export 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]>>;
|
17 | interface StartContextExtn extends tt.CommandContextExtn {
|
18 | |
19 |
|
20 |
|
21 | startPayload: string;
|
22 | }
|
23 | export 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 | }
|
226 | export default Composer;
|
227 | //# sourceMappingURL=composer.d.ts.map |
\ | No newline at end of file |