|
1 | | -import { Context, GrammyError } from 'grammy'; |
| 1 | +import { GrammyError } from 'grammy'; |
2 | 2 | import { ErrorResponse } from '../types/ResponseTypes'; |
3 | 3 | import logger from '../utils/logger'; |
| 4 | +import { createDecorator } from './index'; |
4 | 5 | import { ServiceProvider } from '../service/database/ServiceProvider'; |
5 | 6 | export function Catch(customResponse?: ErrorResponse) { |
6 | | - return function (target: any, propKey: string, descriptor: PropertyDescriptor) { |
7 | | - const originalMethod = descriptor.value; |
8 | | - descriptor.value = async function (...args: any[]) { |
9 | | - const ctx: Context = (this as any)?.ctx || args[0]; |
10 | | - try { |
11 | | - return await originalMethod.apply(this, args); |
12 | | - } catch (error: any) { |
13 | | - if (error instanceof GrammyError && error.error_code === 400 && error.description === 'Bad Request: message to be replied not found') { |
14 | | - console.warn(`Message not found to reply to. Skipping...`); |
15 | | - return; |
16 | | - } |
17 | | - if (error.error_code === 403 && error.description.includes('bot was kicked')) { |
18 | | - const chatId = error.payload?.chat_id; |
19 | | - logger.warn(`[Warning] Bot was kicked from a group (chat_id: ${error.payload.chat_id}). Skipping.`); |
20 | | - const service = ServiceProvider.getInstance(); |
21 | | - const groupService = await service.getGroupService(); |
22 | | - await groupService.delete(chatId); |
23 | | - return; |
24 | | - } |
25 | | - // Custom response or default error message |
26 | | - const errorResponse: ErrorResponse = customResponse || { |
27 | | - message: error.message, |
28 | | - statusCode: error.statusCode || 500, |
29 | | - category: 'General', |
30 | | - }; |
31 | | - logger.error(`[Category: ${errorResponse.category}] Error in ${target.constructor.name}.${propKey}(): ${error.message}`); |
| 7 | + return createDecorator(async (ctx, next) => { |
| 8 | + try { |
| 9 | + await next(); |
| 10 | + } catch (error: any) { |
| 11 | + if (error instanceof GrammyError && error.error_code === 400 && error.description === 'Bad Request: message to be replied not found') { |
| 12 | + console.warn(`Message not found to reply to. Skipping...`); |
| 13 | + return; |
32 | 14 | } |
33 | | - }; |
34 | | - |
35 | | - return descriptor; |
36 | | - }; |
| 15 | + if (error.error_code === 403 && error.description.includes('bot was kicked')) { |
| 16 | + const chatId = error.payload?.chat_id; |
| 17 | + logger.warn(`[Warning] Bot was kicked from a group (chat_id: ${error.payload.chat_id}). Skipping.`); |
| 18 | + const service = ServiceProvider.getInstance(); |
| 19 | + const groupService = await service.getGroupService(); |
| 20 | + await groupService.delete(chatId); |
| 21 | + return; |
| 22 | + } |
| 23 | + // Custom response or default error message |
| 24 | + const errorResponse: ErrorResponse = customResponse || { |
| 25 | + message: error.message, |
| 26 | + statusCode: error.statusCode || 500, |
| 27 | + category: 'General', |
| 28 | + }; |
| 29 | + logger.error(`[Category: ${errorResponse.category}] : ${error.message}`); |
| 30 | + } |
| 31 | + }); |
37 | 32 | } |
0 commit comments