From ae38fd9b9a92fd2bdb5c271196f68b7894ef74df Mon Sep 17 00:00:00 2001 From: Kurbanov Bulat Date: Wed, 16 Feb 2022 18:42:15 +0300 Subject: [PATCH] Fix --- .../factory/bots/approved/errors_utils.ts | 8 +++ src/bots/factory/bots/approved/index.ts | 49 +++++++++++++------ src/bots/factory/bots/approved/utils.ts | 16 +++++- 3 files changed, 55 insertions(+), 18 deletions(-) create mode 100644 src/bots/factory/bots/approved/errors_utils.ts diff --git a/src/bots/factory/bots/approved/errors_utils.ts b/src/bots/factory/bots/approved/errors_utils.ts new file mode 100644 index 0000000..1d96c29 --- /dev/null +++ b/src/bots/factory/bots/approved/errors_utils.ts @@ -0,0 +1,8 @@ +import { TelegramError } from 'telegraf'; + + +export function isNotModifiedMessage(e: any): boolean { + if (!(e instanceof TelegramError)) return false; + + return e.description === 'Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message'; +} diff --git a/src/bots/factory/bots/approved/index.ts b/src/bots/factory/bots/approved/index.ts index a3d5ac8..9ae98cf 100644 --- a/src/bots/factory/bots/approved/index.ts +++ b/src/bots/factory/bots/approved/index.ts @@ -20,6 +20,7 @@ import { getRandomKeyboard, getTextPaginationData, getUpdateLogKeyboard, getUser import { sendFile } from './hooks/downloading'; import { setCommands } from './hooks/setCommands'; import { downloadImage } from './services/downloader'; +import { isNotModifiedMessage } from './errors_utils'; Sentry.init({ @@ -129,9 +130,15 @@ export async function createApprovedBot(token: string, state: BotState): Promise `${CallbackData.UPDATE_LOG_PREFIX}${arg}_`, arg, page, allowedLangs, BookLibrary.getBooks, formatBook, header, noItemsMessage, ); - await ctx.editMessageText(pMessage.message, { - reply_markup: pMessage.keyboard?.reply_markup - }); + try { + await ctx.editMessageText(pMessage.message, { + reply_markup: pMessage.keyboard?.reply_markup + }); + } catch (e) { + if (!isNotModifiedMessage(e)) { + Sentry.captureException(e); + } + } }); bot.command(["settings", `settings@${me.username}`], async (ctx: Context) => { @@ -149,9 +156,15 @@ export async function createApprovedBot(token: string, state: BotState): Promise const keyboard = await getUserAllowedLangsKeyboard(ctx.callbackQuery.from.id); - ctx.editMessageText("Настройки языков:", { - reply_markup: keyboard.reply_markup, - }); + try { + await ctx.editMessageText("Настройки языков:", { + reply_markup: keyboard.reply_markup, + }); + } catch (e) { + if (!isNotModifiedMessage(e)) { + Sentry.captureException(e); + } + } }); registerLanguageSettingsCallback(bot, 'on', CallbackData.ENABLE_LANG_PREFIX); @@ -212,11 +225,13 @@ export async function createApprovedBot(token: string, state: BotState): Promise } ); } catch (e) { - Sentry.captureException(e, { - extra: { - message: data.current, - } - }) + if (!isNotModifiedMessage(e)) { + Sentry.captureException(e, { + extra: { + message: data.current, + } + }); + } } }); @@ -273,11 +288,13 @@ export async function createApprovedBot(token: string, state: BotState): Promise } ); } catch (e) { - Sentry.captureException(e, { - extra: { - message: data.current, - } - }) + if (!isNotModifiedMessage(e)) { + Sentry.captureException(e, { + extra: { + message: data.current, + } + }); + } } }); diff --git a/src/bots/factory/bots/approved/utils.ts b/src/bots/factory/bots/approved/utils.ts index 745550a..ec537b8 100644 --- a/src/bots/factory/bots/approved/utils.ts +++ b/src/bots/factory/bots/approved/utils.ts @@ -1,12 +1,22 @@ import { Context, Markup, Telegraf } from 'telegraf'; import { InlineKeyboardMarkup } from 'typegram'; import { URLSearchParams } from 'url'; +import * as Sentry from '@sentry/node'; +import env from '@/config'; + + +import { isNotModifiedMessage } from './errors_utils'; import { getPaginationKeyboard, getUserAllowedLangsKeyboard } from './keyboard'; import * as BookLibrary from "./services/book_library"; import { createOrUpdateUserSettings, getUserSettings } from './services/user_settings'; +Sentry.init({ + dsn: env.SENTRY_DSN, +}); + + interface PreparedMessage { message: string; keyboard?: Markup.Markup; @@ -79,8 +89,10 @@ export function registerPaginationCommand( await ctx.editMessageText(pMessage.message, { reply_markup: pMessage.keyboard?.reply_markup }); - } catch (err) { - console.log(err); + } catch (e) { + if (!isNotModifiedMessage(e)) { + Sentry.captureException(e); + } } }) }