Skip to content

Commit 6cba59d

Browse files
wojpawlikEdJoPaTo
andauthored
Overhaul typings (telegraf#960)
* Overhaul typings * Improve composer.d.ts * Make MiddlewareFn covariant * Don't expose MiddlewareFn to avoid confusion * Streamline composer.d.ts * Improve markup.d.ts * Export some interfaces * export { Telegraf as default } * Add aliases for backwards compatibility * Add typings for polls; closes telegraf#970 * Format typings with prettier * Improve typings for restrictChatMember * Rename * Update typings/composer.d.ts Co-Authored-By: EdJoPaTo <github@edjopato.de> * Rename ContextMessageUpdate to TelegrafContext * Backport Fixes telegraf#991 Closes telegraf#992 Fixes telegraf#987 Closes telegraf#988 * Complete typings for Extra, Markup and Telegraf Co-authored-by: EdJoPaTo <github@edjopato.de>
1 parent 11c3105 commit 6cba59d

17 files changed

+2196
-1574
lines changed

.mailmap

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Wojciech Pawlik <woj.pawlik@gmail.com>

.prettierrc.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"insertPragma": true,
3+
"requirePragma": true,
4+
"semi": false,
5+
"singleQuote": true
6+
}

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"eslint-plugin-promise": "^4.0.0",
5454
"eslint-plugin-standard": "^4.0.0",
5555
"husky": "^4.2.0",
56+
"prettier": "2.0.4",
5657
"typescript": "^3.0.1"
5758
},
5859
"keywords": [

readme.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ $ yarn add telegraf
4141
### Examples
4242

4343
```js
44-
const Telegraf = require('telegraf')
44+
const { Telegraf } = require('telegraf')
4545

4646
const bot = new Telegraf(process.env.BOT_TOKEN)
4747
bot.start((ctx) => ctx.reply('Welcome!'))
@@ -52,7 +52,7 @@ bot.launch()
5252
```
5353

5454
```js
55-
const Telegraf = require('telegraf')
55+
const { Telegraf } = require('telegraf')
5656

5757
const bot = new Telegraf(process.env.BOT_TOKEN)
5858
bot.command('oldschool', (ctx) => ctx.reply('Hello'))

telegraf.js

+1
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ module.exports = Object.assign(Telegraf, {
213213
Extra,
214214
Markup,
215215
Router,
216+
Telegraf,
216217
Telegram,
217218
Stage,
218219
BaseScene,

typings/composer.d.ts

+197
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
/** @format */
2+
3+
import * as tt from './telegram-types.d'
4+
import { TelegrafContext } from './context'
5+
6+
type HearsTriggers = string[] | string | RegExp | RegExp[] | Function
7+
8+
export interface MiddlewareFn<TContext extends TelegrafContext> {
9+
/*
10+
next's parameter is in a contravariant position, and thus, trying to type it
11+
prevents assigning `MiddlewareFn<ContextMessageUpdate>`
12+
to `MiddlewareFn<CustomContext>`.
13+
Middleware passing the parameter should be a separate type instead.
14+
*/
15+
(ctx: TContext, next: () => Promise<void>): void | Promise<unknown>
16+
}
17+
18+
export interface MiddlewareObj<TContext extends TelegrafContext> {
19+
middleware(): MiddlewareFn<TContext>
20+
}
21+
22+
export type Middleware<TContext extends TelegrafContext> =
23+
| MiddlewareFn<TContext>
24+
| MiddlewareObj<TContext>
25+
26+
export declare class Composer<TContext extends TelegrafContext>
27+
implements MiddlewareObj<TContext> {
28+
/**
29+
* Registers a middleware.
30+
*/
31+
use(...middlewares: ReadonlyArray<Middleware<TContext>>): this
32+
33+
/**
34+
* Registers middleware for provided update type.
35+
*/
36+
on(
37+
updateTypes:
38+
| tt.UpdateType
39+
| tt.UpdateType[]
40+
| tt.MessageSubTypes
41+
| tt.MessageSubTypes[],
42+
...middlewares: ReadonlyArray<Middleware<TContext>>
43+
): this
44+
45+
/**
46+
* Return the middleware created by this Composer
47+
*/
48+
middleware(): MiddlewareFn<TContext>
49+
50+
/**
51+
* Registers middleware for handling text messages.
52+
*/
53+
hears(
54+
triggers: HearsTriggers,
55+
...middlewares: ReadonlyArray<Middleware<TContext>>
56+
): this
57+
58+
/**
59+
* Registers middleware for handling callbackQuery data with regular expressions
60+
*/
61+
action(
62+
triggers: HearsTriggers,
63+
...middlewares: ReadonlyArray<Middleware<TContext>>
64+
): this
65+
66+
/**
67+
* Registers middleware for handling specified commands.
68+
*/
69+
command(
70+
command: string | string[],
71+
...middlewares: ReadonlyArray<Middleware<TContext>>
72+
): this
73+
74+
/**
75+
* Registers middleware for handling callback_data actions with game query.
76+
*/
77+
gameQuery(...middlewares: ReadonlyArray<Middleware<TContext>>): this
78+
79+
/**
80+
* Registers middleware for handling /start command.
81+
*/
82+
start(...middlewares: ReadonlyArray<Middleware<TContext>>): this
83+
84+
/**
85+
* Registers middleware for handling /help command.
86+
*/
87+
help(...middlewares: ReadonlyArray<Middleware<TContext>>): this
88+
89+
constructor(...middlewares: ReadonlyArray<Middleware<TContext>>)
90+
91+
static unwrap<TContext extends TelegrafContext>(
92+
middleware: Middleware<TContext>
93+
): MiddlewareFn<TContext>
94+
95+
/**
96+
* Compose middlewares returning a fully valid middleware comprised of all those which are passed.
97+
*/
98+
static compose<TContext extends TelegrafContext>(
99+
middlewares: ReadonlyArray<Middleware<TContext>>
100+
): MiddlewareFn<TContext>
101+
102+
/**
103+
* Generates middleware for handling provided update types.
104+
*/
105+
static mount<TContext extends TelegrafContext>(
106+
updateTypes: tt.UpdateType | tt.UpdateType[],
107+
...middlewares: ReadonlyArray<Middleware<TContext>>
108+
): MiddlewareFn<TContext>
109+
110+
/**
111+
* Generates middleware for handling matching text messages.
112+
*/
113+
static hears<TContext extends TelegrafContext>(
114+
triggers: HearsTriggers,
115+
...middlewares: ReadonlyArray<Middleware<TContext>>
116+
): MiddlewareFn<TContext>
117+
118+
/**
119+
* Generates middleware for handling matching callback queries.
120+
*/
121+
static action<TContext extends TelegrafContext>(
122+
triggers: HearsTriggers,
123+
...middlewares: ReadonlyArray<Middleware<TContext>>
124+
): MiddlewareFn<TContext>
125+
126+
/**
127+
* Generates pass thru middleware.
128+
*/
129+
static passThru(): MiddlewareFn<TelegrafContext>
130+
131+
/**
132+
* Generates safe version of pass thru middleware.
133+
*/
134+
static safePassThru(): MiddlewareFn<TelegrafContext>
135+
136+
/**
137+
* Generates optional middleware.
138+
* @param middleware middleware to run if the predicate returns true
139+
*/
140+
static optional<TContext extends TelegrafContext>(
141+
test: boolean | ((ctx: TContext) => boolean),
142+
...middlewares: ReadonlyArray<Middleware<TContext>>
143+
): MiddlewareFn<TContext>
144+
145+
/**
146+
* Generates filter middleware.
147+
*/
148+
static filter<TContext extends TelegrafContext>(
149+
test: boolean | ((ctx: TContext) => boolean)
150+
): MiddlewareFn<TContext>
151+
152+
/**
153+
* @param trueMiddleware middleware to run if the predicate returns true
154+
* @param falseMiddleware middleware to run if the predicate returns false
155+
*/
156+
static branch<TContext extends TelegrafContext>(
157+
test: boolean | ((ctx: TContext) => boolean),
158+
trueMiddleware: Middleware<TContext>,
159+
falseMiddleware: Middleware<TContext>
160+
): MiddlewareFn<TContext>
161+
162+
static reply(
163+
text: string,
164+
extra?: tt.ExtraReplyMessage
165+
): MiddlewareFn<TelegrafContext>
166+
167+
/**
168+
* Generates middleware that runs in the background.
169+
*/
170+
static fork<TContext extends TelegrafContext>(
171+
middleware: Middleware<TContext>
172+
): MiddlewareFn<TContext>
173+
174+
static log(logFn?: (s: string) => void): MiddlewareFn<TelegrafContext>
175+
176+
/**
177+
* Generates middleware running only in given chat types.
178+
*/
179+
static chatType<TContext extends TelegrafContext>(
180+
type: tt.ChatType | tt.ChatType[],
181+
...middlewares: ReadonlyArray<Middleware<TContext>>
182+
): MiddlewareFn<TContext>
183+
184+
/**
185+
* Generates middleware running only in private chats.
186+
*/
187+
static privateChat<TContext extends TelegrafContext>(
188+
...middlewares: ReadonlyArray<Middleware<TContext>>
189+
): MiddlewareFn<TContext>
190+
191+
/**
192+
* Generates middleware running only in groups and supergroups.
193+
*/
194+
static groupChat<TContext extends TelegrafContext>(
195+
...middlewares: ReadonlyArray<Middleware<TContext>>
196+
): MiddlewareFn<TContext>
197+
}

0 commit comments

Comments
 (0)