@mtkruto/node 0.1.111 → 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.
@@ -158,11 +158,13 @@ export async function inlineQueryResultToTlObject(result_, parseText, usernameRe
158
158
  replyMarkup,
159
159
  });
160
160
  const title = "title" in result_ ? result_.title : undefined;
161
+ const description = "description" in result_ ? result_.description : undefined;
161
162
  if (document != null) {
162
163
  return new types.InputBotInlineResult({
163
164
  id,
164
165
  type,
165
166
  title,
167
+ description,
166
168
  thumb: thumb == null ? undefined : thumb,
167
169
  content: document,
168
170
  sendMessage: new types.InputBotInlineMessageMediaAuto({
@@ -178,6 +180,7 @@ export async function inlineQueryResultToTlObject(result_, parseText, usernameRe
178
180
  id,
179
181
  type,
180
182
  title,
183
+ description,
181
184
  document: new types.InputDocument({
182
185
  id: fileId.params.mediaId,
183
186
  accessHash: fileId.params.accessHash,
@@ -191,6 +194,7 @@ export async function inlineQueryResultToTlObject(result_, parseText, usernameRe
191
194
  id,
192
195
  type,
193
196
  title,
197
+ description,
194
198
  sendMessage: new types.InputBotInlineMessageMediaGeo({
195
199
  geoPoint: new types.InputGeoPoint({
196
200
  lat: result_.latitude,
@@ -209,6 +213,7 @@ export async function inlineQueryResultToTlObject(result_, parseText, usernameRe
209
213
  id,
210
214
  type,
211
215
  title,
216
+ description,
212
217
  sendMessage: new types.InputBotInlineMessageGame({
213
218
  replyMarkup,
214
219
  }),
@@ -223,6 +228,7 @@ export async function inlineQueryResultToTlObject(result_, parseText, usernameRe
223
228
  id,
224
229
  type,
225
230
  title,
231
+ description,
226
232
  sendMessage: new types.InputBotInlineMessageText({
227
233
  message,
228
234
  entities,
@@ -239,6 +245,7 @@ export async function inlineQueryResultToTlObject(result_, parseText, usernameRe
239
245
  id,
240
246
  type,
241
247
  title,
248
+ description,
242
249
  sendMessage: new types.InputBotInlineMessageMediaVenue({
243
250
  geoPoint: new types.InputGeoPoint({ long: result_.longitude, lat: result_.latitude }),
244
251
  address: result_.address,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "module": "./esm/mod.js",
3
3
  "main": "./script/mod.js",
4
4
  "name": "@mtkruto/node",
5
- "version": "0.1.111",
5
+ "version": "0.1.113",
6
6
  "description": "MTKruto for Node.js",
7
7
  "author": "Roj <rojvv@icloud.com>",
8
8
  "license": "LGPL-3.0-or-later",
@@ -5,7 +5,7 @@ export declare const PUBLIC_KEYS: PublicKeys;
5
5
  export declare const VECTOR_CONSTRUCTOR = 481674261;
6
6
  export declare const INITIAL_DC: DC;
7
7
  export declare const LAYER = 166;
8
- export declare const APP_VERSION = "MTKruto 0.1.111";
8
+ export declare const APP_VERSION = "MTKruto 0.1.113";
9
9
  export declare const DEVICE_MODEL: string;
10
10
  export declare const LANG_CODE: string;
11
11
  export declare const LANG_PACK = "";
@@ -80,7 +80,7 @@ exports.PUBLIC_KEYS = Object.freeze([
80
80
  exports.VECTOR_CONSTRUCTOR = 0x1CB5C415;
81
81
  exports.INITIAL_DC = "2";
82
82
  exports.LAYER = 166;
83
- exports.APP_VERSION = "MTKruto 0.1.111";
83
+ exports.APP_VERSION = "MTKruto 0.1.113";
84
84
  // @ts-ignore: lib
85
85
  exports.DEVICE_MODEL = typeof dntShim.Deno === "undefined" ? typeof navigator === "undefined" ? typeof process === "undefined" ? "Unknown" : process.platform + "-" + process.arch : navigator.userAgent.split(" ")[0] : dntShim.Deno.build.os + "-" + dntShim.Deno.build.arch;
86
86
  exports.LANG_CODE = typeof navigator === "undefined" ? "en" : navigator.language.split("-")[0];
@@ -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
  *