From 03b17a0cdb911b3f3e4ed0892e47e757f4b9ebff Mon Sep 17 00:00:00 2001 From: Alexander Bukhalo Date: Sat, 2 Jan 2021 02:00:10 +0300 Subject: [PATCH] feat(): disabling global catch support --- lib/index.ts | 4 ++- lib/interfaces/context.interface.ts | 2 +- lib/interfaces/telegraf-options.interface.ts | 4 ++- lib/telegraf-core.module.ts | 36 ++++++++++++++++++-- 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/lib/index.ts b/lib/index.ts index 819279a..c4e9f7f 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -11,6 +11,8 @@ export * from './interfaces'; export * from './telegraf.module'; /** - * Backward compatibility with versions < 1.4.0 + * Backward compatibility with versions < 1.4.0, + * after removing TelegrafProvider service + * TODO: remove that on next major release */ export { Telegraf as TelegrafProvider } from 'telegraf'; diff --git a/lib/interfaces/context.interface.ts b/lib/interfaces/context.interface.ts index 418bbac..169e5fb 100644 --- a/lib/interfaces/context.interface.ts +++ b/lib/interfaces/context.interface.ts @@ -1,7 +1,7 @@ import { TelegrafContext } from 'telegraf/typings/context'; export interface Context extends TelegrafContext { - [key: string]: any; + [key: string]: any; // TBD } /** diff --git a/lib/interfaces/telegraf-options.interface.ts b/lib/interfaces/telegraf-options.interface.ts index 60e96f2..6de8013 100644 --- a/lib/interfaces/telegraf-options.interface.ts +++ b/lib/interfaces/telegraf-options.interface.ts @@ -5,6 +5,7 @@ import { LaunchWebhookOptions, } from 'telegraf/typings/telegraf'; import { Middleware } from 'telegraf/typings/composer'; +import { Context } from './context.interface'; export interface TelegrafModuleOptions { token: string; @@ -15,7 +16,8 @@ export interface TelegrafModuleOptions { }; botName?: string; include?: Function[]; - middlewares?: ReadonlyArray>; + middlewares?: ReadonlyArray>; + disableGlobalCatch?: boolean; } export interface TelegrafOptionsFactory { diff --git a/lib/telegraf-core.module.ts b/lib/telegraf-core.module.ts index 25f0e8f..66566f2 100644 --- a/lib/telegraf-core.module.ts +++ b/lib/telegraf-core.module.ts @@ -7,11 +7,13 @@ import { Global, Inject, OnApplicationShutdown, + Logger, } from '@nestjs/common'; import { TelegrafModuleOptions, TelegrafModuleAsyncOptions, TelegrafOptionsFactory, + Context, } from './interfaces'; import { TELEGRAF_BOT_NAME, @@ -28,6 +30,8 @@ import { defer } from 'rxjs'; providers: [UpdatesExplorerService, MetadataAccessorService], }) export class TelegrafCoreModule implements OnApplicationShutdown { + private static logger = new Logger(TelegrafCoreModule.name); + constructor( @Inject(TELEGRAF_BOT_NAME) private readonly botName: string, private readonly moduleRef: ModuleRef, @@ -40,8 +44,22 @@ export class TelegrafCoreModule implements OnApplicationShutdown { provide: telegrafBotName, useFactory: async (): Promise => await defer(async () => { - const bot = new Telegraf(options.token); + const bot = new Telegraf(options.token); this.applyBotMiddlewares(bot, options.middlewares); + + /** + * Backward compatibility with versions < 1.4.0, + * TODO: remove that on next major release, + * after exception filters has been added + */ + if (!options.disableGlobalCatch) { + bot.catch((err, ctx: Context) => { + this.logger.error( + `Encountered an error for ${ctx.updateType} update type`, + err, + ); + }); + } await bot.launch(options.launchOptions); return bot; }).toPromise(), @@ -77,8 +95,22 @@ export class TelegrafCoreModule implements OnApplicationShutdown { const { botName, ...telegrafOptions } = telegrafModuleOptions; return await defer(async () => { - const bot = new Telegraf(telegrafOptions.token); + const bot = new Telegraf(telegrafOptions.token); this.applyBotMiddlewares(bot, telegrafOptions.middlewares); + + /** + * Backward compatibility with versions < 1.4.0, + * TODO: remove that on next major release, + * after exception filters has been added + */ + if (!telegrafOptions.disableGlobalCatch) { + bot.catch((err, ctx: Context) => { + this.logger.error( + `Encountered an error for ${ctx.updateType} update type`, + err, + ); + }); + } await bot.launch(telegrafOptions.launchOptions); return bot; }).toPromise();