@mtkruto/node 0.1.112 → 0.1.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
1
  export * from "./client/2_client_plain.js";
2
2
  export * from "./client/3_types.js";
3
- export * from "./client/4_client.js";
3
+ export * from "./client/5_client.js";
4
+ export * from "./client/6_composer.js";
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./client/2_client_plain.js"), exports);
18
18
  __exportStar(require("./client/3_types.js"), exports);
19
- __exportStar(require("./client/4_client.js"), exports);
19
+ __exportStar(require("./client/5_client.js"), exports);
20
+ __exportStar(require("./client/6_composer.js"), exports);
@@ -37,7 +37,10 @@ export interface ClientParams extends ClientPlainParams {
37
37
  * Whether to automatically call `start` with no parameters in the first `invoke` call. Defaults to `true`.
38
38
  */
39
39
  autoStart?: boolean;
40
- errorHandler?: (err: unknown, function_: types.Type | functions.Function<unknown>, n: number) => MaybePromise<boolean>;
40
+ /**
41
+ * Whether to use default handlers. Defaults to `true`.
42
+ */
43
+ defaultHandlers?: boolean;
41
44
  }
42
45
  export interface AnswerCallbackQueryParams {
43
46
  /** A text to be shown to the user. */
@@ -227,6 +230,10 @@ export type ConnectionState = "notConnected" | "updating" | "ready";
227
230
  export type AuthorizationState = {
228
231
  authorized: boolean;
229
232
  };
233
+ export interface ReplyParams extends Omit<SendMessagesParams, "replyToMessageId"> {
234
+ /** Whether to quote the message that is to be replied. Enabled by default for non-private chats. */
235
+ quote?: boolean;
236
+ }
230
237
  export type FilterableUpdates = "message" | "editedMessage" | "callbackQuery";
231
238
  export interface Update {
232
239
  message?: Message;
@@ -237,11 +244,18 @@ export interface Update {
237
244
  callbackQuery?: CallbackQuery;
238
245
  inlineQuery?: InlineQuery;
239
246
  }
240
- export type NextFn = () => Promise<void>;
241
- export interface Handler<U extends Partial<Update> = Partial<Update>> {
242
- (update: U, next: NextFn): MaybePromise<void>;
247
+ export type NextFn<T = void> = () => Promise<T>;
248
+ export interface Handler<C> {
249
+ (ctx: C, next: NextFn): MaybePromise<void>;
250
+ }
251
+ export interface InvokeErrorHandler<C> {
252
+ (ctx: {
253
+ client: C;
254
+ error: unknown;
255
+ function: types.Type | functions.Function<unknown>;
256
+ n: number;
257
+ }, next: NextFn<boolean>): MaybePromise<boolean>;
243
258
  }
244
- export type FilterUpdate<U extends Update, T extends keyof U, F extends keyof NonNullable<U[T]>> = With<U, T> & Pick<{
245
- [P in T]-?: With<NonNullable<U[T]>, F>;
259
+ export type FilterUpdate<U extends Update, T extends keyof U, F extends (keyof NonNullable<U[T]>) | null> = With<U, T> & Pick<{
260
+ [P in T]-?: F extends keyof NonNullable<U[T]> ? With<NonNullable<U[T]>, F> : NonNullable<U[T]>;
246
261
  }, T>;
247
- export declare const skip: Handler;
@@ -1,5 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.skip = void 0;
4
- const skip = (__, _) => _();
5
- exports.skip = skip;
@@ -0,0 +1,22 @@
1
+ import { FilterableUpdates, FilterUpdate, Update } from "./3_types.js";
2
+ type MaybePromise<T> = T | Promise<T>;
3
+ export type NextFunction = () => Promise<void>;
4
+ export type MiddlewareFn<C extends Update = Update> = (ctx: C, next: NextFunction) => MaybePromise<unknown>;
5
+ export interface MiddlewareObj<C extends Update = Update> {
6
+ middleware: () => MiddlewareFn<C>;
7
+ }
8
+ export type Middleware<C extends Update = Update> = MiddlewareFn<C> | MiddlewareObj<C>;
9
+ export declare function flatten<C extends Update = Update>(mw: Middleware<C>): MiddlewareFn<C>;
10
+ export declare function concat<C extends Update = Update>(left: MiddlewareFn<C>, right: MiddlewareFn<C>): MiddlewareFn<C>;
11
+ export declare const skip: MiddlewareFn;
12
+ export declare class Composer<C extends Update> implements MiddlewareObj<C> {
13
+ #private;
14
+ constructor(...middleware: Middleware<C>[]);
15
+ middleware(): MiddlewareFn<C>;
16
+ use(...middleware: Middleware<C>[]): Composer<C>;
17
+ branch(predicate: (ctx: C) => MaybePromise<boolean>, trueHandler_: Middleware<C>, falseHandler_: Middleware<C>): Composer<C>;
18
+ filter<D extends C>(predicate: (ctx: C) => ctx is D, ...middleware: Middleware<D>[]): Composer<D>;
19
+ filter(predicate: (ctx: C) => MaybePromise<boolean>, ...middleware: Middleware<C>[]): Composer<C>;
20
+ on<T extends keyof Update, F extends keyof NonNullable<Update[T]>>(filter: T extends FilterableUpdates ? T | [T, F, ...F[]] : T, ...middleawre: Middleware<FilterUpdate<C, T, F>>[]): Composer<FilterUpdate<C, T, F>>;
21
+ }
22
+ export {};
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _Composer_handle;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Composer = exports.skip = exports.concat = exports.flatten = void 0;
16
+ function flatten(mw) {
17
+ return typeof mw === "function" ? mw : (ctx, next) => mw.middleware()(ctx, next);
18
+ }
19
+ exports.flatten = flatten;
20
+ function concat(left, right) {
21
+ return async (ctx, next) => {
22
+ let called = false;
23
+ await left(ctx, async () => {
24
+ if (called) {
25
+ return;
26
+ }
27
+ else {
28
+ called = true;
29
+ await right(ctx, next);
30
+ }
31
+ });
32
+ };
33
+ }
34
+ exports.concat = concat;
35
+ const skip = (_ctx, next) => next();
36
+ exports.skip = skip;
37
+ class Composer {
38
+ constructor(...middleware) {
39
+ _Composer_handle.set(this, void 0);
40
+ __classPrivateFieldSet(this, _Composer_handle, middleware.length == 0 ? exports.skip : middleware.map(flatten).reduce(concat), "f");
41
+ }
42
+ middleware() {
43
+ return __classPrivateFieldGet(this, _Composer_handle, "f");
44
+ }
45
+ use(...middleware) {
46
+ const composer = new Composer(...middleware);
47
+ __classPrivateFieldSet(this, _Composer_handle, concat(__classPrivateFieldGet(this, _Composer_handle, "f"), flatten(composer)), "f");
48
+ return composer;
49
+ }
50
+ branch(predicate, trueHandler_, falseHandler_) {
51
+ const trueHandler = flatten(trueHandler_);
52
+ const falseHandler = flatten(falseHandler_);
53
+ return this.use(async (upd, next) => {
54
+ if (await predicate(upd)) {
55
+ await trueHandler(upd, next);
56
+ }
57
+ else {
58
+ await falseHandler(upd, next);
59
+ }
60
+ });
61
+ }
62
+ filter(predicate, ...middleware) {
63
+ return this.branch(predicate, middleware.length == 0 ? exports.skip : middleware.map(flatten).reduce(concat), exports.skip);
64
+ }
65
+ on(filter, ...middleawre) {
66
+ const type = typeof filter === "string" ? filter : filter[0];
67
+ const keys = Array.isArray(filter) ? filter.slice(1) : [];
68
+ return this.filter((ctx) => {
69
+ if (type in ctx) {
70
+ if (keys.length > 0) {
71
+ for (const key of keys) {
72
+ // deno-lint-ignore ban-ts-comment
73
+ // @ts-ignore
74
+ if (!(key in ctx[type])) {
75
+ return false;
76
+ }
77
+ }
78
+ }
79
+ return true;
80
+ }
81
+ else {
82
+ return false;
83
+ }
84
+ }, ...middleawre);
85
+ }
86
+ }
87
+ exports.Composer = Composer;
88
+ _Composer_handle = new WeakMap();
@@ -2,19 +2,52 @@ import { MaybePromise } from "../1_utilities.js";
2
2
  import { functions, ReadObject, types } from "../2_tl.js";
3
3
  import { Storage } from "../3_storage.js";
4
4
  import { DC } from "../3_transport.js";
5
- import { BotCommand, ChatAction, ChatID, InlineQueryResult, Message, ParseMode, User } from "../3_types.js";
5
+ import { BotCommand, CallbackQuery, ChatAction, ChatID, InlineQuery, InlineQueryResult, Message, ParseMode, User } from "../3_types.js";
6
6
  import { Migrate } from "../4_errors.js";
7
7
  import { With } from "./0_utilities.js";
8
8
  import { ClientAbstract } from "./1_client_abstract.js";
9
- import { AnswerCallbackQueryParams, AnswerInlineQueryParams, AuthorizeUserParams, ClientParams, DownloadParams, EditMessageParams, FilterableUpdates, FilterUpdate, ForwardMessagesParams, GetMyCommandsParams, Handler, SendMessagesParams, SendPollParams, SetMyCommandsParams, Update, UploadParams } from "./3_types.js";
9
+ import { AnswerCallbackQueryParams, AnswerInlineQueryParams, AuthorizeUserParams, ClientParams, DownloadParams, EditMessageParams, FilterableUpdates, FilterUpdate, ForwardMessagesParams, GetMyCommandsParams, InvokeErrorHandler, ReplyParams, SendMessagesParams, SendPollParams, SetMyCommandsParams, Update, UploadParams } from "./3_types.js";
10
+ import { Composer, Middleware } from "./4_composer.js";
10
11
  declare const getEntity: unique symbol;
11
12
  declare const getStickerSetName: unique symbol;
12
13
  export declare const handleMigrationError: unique symbol;
13
14
  declare const getMessageWithReply: unique symbol;
15
+ export interface Context extends Update {
16
+ /** The client that received the update. */
17
+ client: Client;
18
+ /** Resolves to `ctx.message ?? ctx.editedMessage ?? ctx.callbackQuery?.message`. */
19
+ msg: undefined extends this["message"] ? undefined extends this["editedMessage"] ? undefined extends this["callbackQuery"] ? never : this["callbackQuery"] extends With<CallbackQuery, "message"> ? this["callbackQuery"]["message"] : this["callbackQuery"] extends With<CallbackQuery, "inlineMessageId"> ? never : (Message | undefined) : this["editedMessage"] : this["message"];
20
+ /** Resolves to `effectiveMessage?.chat`. */
21
+ chat: this["msg"] extends never ? never : this["msg"]["chat"];
22
+ /** Resolves to `(ctx.message ?? ctx.editedMessage)?.from ?? ctx.callbackQuery?.from ?? ctx.inlineQuery?.from`. */
23
+ from: this["message"] extends Message ? this["message"]["from"] : this["editedMessage"] extends Message ? this["editedMessage"]["from"] : this["callbackQuery"] extends CallbackQuery ? this["callbackQuery"]["from"] : this["inlineQuery"] extends InlineQuery ? this["inlineQuery"]["from"] : never;
24
+ /** Resolves to `effectiveMessage?.senderChat`. */
25
+ senderChat: this["msg"] extends never ? never : this["msg"]["senderChat"];
26
+ /** Reply the received message with a text message. */
27
+ reply: (text: string, params?: ReplyParams) => Promise<With<Message, "text">>;
28
+ /** Reply the received message with a poll. */
29
+ replyPoll: (question: string, options: [string, string, ...string[]], params?: SendPollParams) => Promise<With<Message, "poll">>;
30
+ /** Send a chat action to the chat which the message was received from. */
31
+ sendChatAction: (action: ChatAction, params?: {
32
+ messageThreadId?: number;
33
+ }) => Promise<void>;
34
+ /** Edit a message in the chat which the message was received from. */
35
+ editMessageText: (messageId: number, text: string, params?: EditMessageParams) => Promise<With<Message, "text">>;
36
+ /** Answer the received callback query. */
37
+ answerCallbackQuery: (params?: AnswerCallbackQueryParams) => Promise<void>;
38
+ /** Answer the received inline query. */
39
+ answerInlineQuery: (results: InlineQueryResult[], params?: AnswerInlineQueryParams) => Promise<void>;
40
+ /** Retrieve a single message of the chat which the message was received from. */
41
+ getMessage: (messageId: number) => Promise<Omit<Message, "replyToMessage"> | null>;
42
+ /** Retrieve multiple messages of the chat which the message was received from. */
43
+ getMessages: (messageIds: number[]) => Promise<Omit<Message, "replyToMessage">[]>;
44
+ toJSON: () => Update;
45
+ }
46
+ export declare function skipInvoke<C extends Context>(): InvokeErrorHandler<Client<C>>;
14
47
  export declare const restartAuth: unique symbol;
15
48
  export declare class ConnectionError extends Error {
16
49
  }
17
- export declare class Client extends ClientAbstract {
50
+ export declare class Client<C extends Context = Context> extends ClientAbstract {
18
51
  #private;
19
52
  readonly apiId: number | null;
20
53
  readonly apiHash: string | null;
@@ -78,8 +111,12 @@ export declare class Client extends ClientAbstract {
78
111
  *
79
112
  * @param function_ The function to invoke.
80
113
  */
81
- invoke<T extends (functions.Function<unknown> | types.Type) = functions.Function<unknown>>(function_: T): Promise<T extends functions.Function<unknown> ? T["__R"] : void>;
82
- invoke<T extends (functions.Function<unknown> | types.Type) = functions.Function<unknown>>(function_: T, noWait: true): Promise<void>;
114
+ invoke: {
115
+ <T extends types.Type | functions.Function<unknown> = functions.Function<unknown>>(function_: T): Promise<T extends functions.Function<unknown> ? T["__R"] : void>;
116
+ <T_1 extends types.Type | functions.Function<unknown> = functions.Function<unknown>>(function_: T_1, noWait: true): Promise<void>;
117
+ } & {
118
+ use: (handler: InvokeErrorHandler<Client<C>>) => void;
119
+ };
83
120
  /**
84
121
  * Alias for `invoke` with its second parameter being `true`.
85
122
  */
@@ -229,11 +266,11 @@ export declare class Client extends ClientAbstract {
229
266
  * @param results The results to answer with.
230
267
  */
231
268
  answerInlineQuery(id: string, results: InlineQueryResult[], params?: AnswerInlineQueryParams): Promise<void>;
232
- use(handler: Handler): void;
233
- branch(predicate: (upd: Update) => MaybePromise<boolean>, trueHandler: Handler, falseHandler: Handler): void;
234
- filter<D extends Update>(predicate: (update: Update) => update is D, handler: Handler<D>): void;
235
- filter(predicate: (update: Update) => MaybePromise<boolean>, handler: Handler): void;
236
- on<T extends keyof Update, F extends keyof NonNullable<Update[T]>>(filter: T extends FilterableUpdates ? T | [T, F, ...F[]] : T, handler: Handler<FilterUpdate<Update, T, F>>): void;
269
+ use(...middleware: Middleware<C>[]): Composer<C>;
270
+ branch(predicate: (ctx: C) => MaybePromise<boolean>, trueHandler_: Middleware<C>, falseHandler_: Middleware<C>): Composer<C>;
271
+ filter<D extends C>(predicate: (ctx: C) => ctx is D, ...middleware: Middleware<D>[]): void;
272
+ filter(predicate: (ctx: C) => MaybePromise<boolean>, ...middleware: Middleware<C>[]): void;
273
+ on<T extends keyof Update, F extends keyof NonNullable<Update[T]>>(filter: T extends FilterableUpdates ? T | [T, F, ...F[]] : T, ...middleawre: Middleware<FilterUpdate<C, T, F>>[]): void;
237
274
  /**
238
275
  * Set the bot's description in the given language. Bot-only.
239
276
  *