From 7f906091fa823b6543ec867fed49c55e671b8095 Mon Sep 17 00:00:00 2001 From: Kirill Ivlev Date: Wed, 13 Nov 2024 02:09:28 +0400 Subject: [PATCH] refact --- src/bot/bot.update.ts | 27 ++------------------------- src/bot/handlers.ts | 32 ++++++++++++++++++++++++++++++++ src/bot/scenes/quiz.scene.ts | 4 ++-- 3 files changed, 36 insertions(+), 27 deletions(-) create mode 100644 src/bot/handlers.ts diff --git a/src/bot/bot.update.ts b/src/bot/bot.update.ts index d70ae19..5d698d6 100644 --- a/src/bot/bot.update.ts +++ b/src/bot/bot.update.ts @@ -23,6 +23,7 @@ import {Inject, Logger} from "@nestjs/common"; import AppConsts from "../constants"; import {ClientProxy} from "@nestjs/microservices"; import {catchError} from "rxjs"; +import {TGHandlers} from "./handlers"; @Update() export class BotUpdate { @@ -95,31 +96,7 @@ export class BotUpdate { @On('callback_query') async onInlineQuery(@Ctx() ctx: any) { - let data = undefined; - try { - data = JSON.parse(ctx.update.callback_query.data); - } catch(error) { - this.logger.verbose(`[onInlineQuery]: can't parse json callback, checking content for other payload`); - } - if(data) { - this.gameService.emit({ cmd: 'ApplyDebuff'}, { ...ctx.callbackQuery, from: ctx.from.id }); - await ctx.editMessageReplyMarkup(undefined); - await ctx.editMessageText("ответ принят!"); - } - if(ctx.update.callback_query.message.text.indexOf('Внимание') !== -1) { - const answer =ctx.update.callback_query.data; - this.gameService.emit({ cmd: "QuestionAnswer"}, { user: ctx.from.id, answer: answer, name: ctx.from.first_name }); - await ctx.editMessageReplyMarkup(undefined); - await ctx.editMessageText("ответ принят!"); - } else if(ctx.update.callback_query.data.startsWith('card/')) { - const cardtoplay = ctx.update.callback_query.data.substring('card/'.length); - this.gameService.emit({cmd: 'CardPlayed'}, {text: cardtoplay, user: ctx.update.callback_query.from.id}) - await ctx.editMessageReplyMarkup(undefined); - await ctx.editMessageText("карта выбрана"); - } else - { - //console.log(ctx.update); - } + await TGHandlers.handleCallback(ctx, this.logger, this.gameService); } @Hears(Messages.CHANGE_PHOTO) diff --git a/src/bot/handlers.ts b/src/bot/handlers.ts new file mode 100644 index 0000000..ec18bb9 --- /dev/null +++ b/src/bot/handlers.ts @@ -0,0 +1,32 @@ +import {Logger} from "@nestjs/common"; +import {ClientProxy} from "@nestjs/microservices"; + +export class TGHandlers { + static async handleCallback(ctx:any, logger: Logger, gameService: ClientProxy) { + let data = undefined; + try { + data = JSON.parse(ctx.update.callback_query.data); + } catch(error) { + logger.verbose(`[onInlineQuery]: can't parse json callback, checking content for other payload`); + } + if(data) { + gameService.emit({ cmd: 'ApplyDebuff'}, { ...ctx.callbackQuery, from: ctx.from.id }); + await ctx.editMessageReplyMarkup(undefined); + await ctx.editMessageText("ответ принят!"); + } + if(ctx.update.callback_query.message.text.indexOf('Внимание') !== -1) { + const answer =ctx.update.callback_query.data; + gameService.emit({ cmd: "QuestionAnswer"}, { user: ctx.from.id, answer: answer, name: ctx.from.first_name }); + await ctx.editMessageReplyMarkup(undefined); + await ctx.editMessageText("ответ принят!"); + } else if(ctx.update.callback_query.data.startsWith('card/')) { + const cardtoplay = ctx.update.callback_query.data.substring('card/'.length); + gameService.emit({cmd: 'CardPlayed'}, {text: cardtoplay, user: ctx.update.callback_query.from.id}) + await ctx.editMessageReplyMarkup(undefined); + await ctx.editMessageText("карта выбрана"); + } else + { + //console.log(ctx.update); + } + } +} \ No newline at end of file diff --git a/src/bot/scenes/quiz.scene.ts b/src/bot/scenes/quiz.scene.ts index 1ebf907..a64c8d0 100644 --- a/src/bot/scenes/quiz.scene.ts +++ b/src/bot/scenes/quiz.scene.ts @@ -6,6 +6,7 @@ import { Messages } from '../tg.text'; import {Context} from "../context.interface"; import AppConsts from "../../constants"; import {ClientProxy} from "@nestjs/microservices"; +import {TGHandlers} from "../handlers"; @Scene(QUIZ_SCENE) export class QuizScene { @@ -50,8 +51,7 @@ export class QuizScene { @On('callback_query') async onInlineQuery(@Ctx() ctx: Context) { - - this.logger.verbose(`emit callback for ${ctx.callbackQuery}`); + await TGHandlers.handleCallback(ctx, this.logger, this.gameService); } @On('text') async onText(@Message('text') text: string, @Ctx() ctx: Context) {