From 945a7a491ebacd46f069461c4617969037e07564 Mon Sep 17 00:00:00 2001 From: evermake Date: Sun, 17 Mar 2024 12:50:27 +0300 Subject: [PATCH] feat(bot): add `start` and `howgoodami` commands (WIP) --- .../src/bot/handlers/commands/howgoodami.ts | 30 +++++++++++++++++++ backend/src/bot/handlers/commands/index.ts | 7 +++++ backend/src/bot/handlers/commands/start.ts | 11 +++++++ backend/src/bot/handlers/index.ts | 10 +++++++ backend/src/bot/handlers/root.ts | 7 +++++ backend/src/bot/index.ts | 29 ++---------------- 6 files changed, 67 insertions(+), 27 deletions(-) create mode 100644 backend/src/bot/handlers/commands/howgoodami.ts create mode 100644 backend/src/bot/handlers/commands/index.ts create mode 100644 backend/src/bot/handlers/commands/start.ts create mode 100644 backend/src/bot/handlers/index.ts create mode 100644 backend/src/bot/handlers/root.ts diff --git a/backend/src/bot/handlers/commands/howgoodami.ts b/backend/src/bot/handlers/commands/howgoodami.ts new file mode 100644 index 0000000..32a7368 --- /dev/null +++ b/backend/src/bot/handlers/commands/howgoodami.ts @@ -0,0 +1,30 @@ +import { handler } from '~/bot/handlers' +import filters from '~/bot/filters' + +export default handler((composer) => { + composer + .command('howgoodami') + .filter(filters.pm) + .use(async (ctx) => { + const messageId = ctx.message.message_id + + await ctx.reply(ctx.t['HowGoodAmI.Thinking']) + + ctx.domain.getStudentBetterThanPercent(ctx.user) + .then((percent) => { + ctx.api.sendMessage( + ctx.chat.id, + ctx.t['HowGoodAmI.Answer'](percent), + { reply_parameters: { message_id: messageId } }, + ) + }) + .catch((err) => { + ctx.logger.error(err) + ctx.api.sendMessage( + ctx.chat.id, + ctx.t['HowGoodAmI.Failed'], + { reply_parameters: { message_id: messageId } }, + ) + }) + }) +}) diff --git a/backend/src/bot/handlers/commands/index.ts b/backend/src/bot/handlers/commands/index.ts new file mode 100644 index 0000000..9b2785a --- /dev/null +++ b/backend/src/bot/handlers/commands/index.ts @@ -0,0 +1,7 @@ +import start from './start' +import howgoodami from './howgoodami' + +export default { + start, + howgoodami, +} diff --git a/backend/src/bot/handlers/commands/start.ts b/backend/src/bot/handlers/commands/start.ts new file mode 100644 index 0000000..7328457 --- /dev/null +++ b/backend/src/bot/handlers/commands/start.ts @@ -0,0 +1,11 @@ +import { handler } from '~/bot/handlers' +import filters from '~/bot/filters' + +export default handler((composer) => { + composer + .command('start') + .filter(filters.pm) + .use(async (ctx) => { + await ctx.reply(ctx.t.Welcome) + }) +}) diff --git a/backend/src/bot/handlers/index.ts b/backend/src/bot/handlers/index.ts new file mode 100644 index 0000000..2ce8111 --- /dev/null +++ b/backend/src/bot/handlers/index.ts @@ -0,0 +1,10 @@ +import { Composer } from 'grammy' +import type { Ctx } from '~/bot/context' + +export function handler(registerFn: (composer: Composer) => void): Composer { + const composer = new Composer() + registerFn(composer) + return composer +} + +export { default } from './root' diff --git a/backend/src/bot/handlers/root.ts b/backend/src/bot/handlers/root.ts new file mode 100644 index 0000000..80f0353 --- /dev/null +++ b/backend/src/bot/handlers/root.ts @@ -0,0 +1,7 @@ +import commands from './commands' +import { handler } from '.' + +export default handler((composer) => { + composer.use(commands.start) + composer.use(commands.howgoodami) +}) diff --git a/backend/src/bot/index.ts b/backend/src/bot/index.ts index 42f887d..393b8c5 100644 --- a/backend/src/bot/index.ts +++ b/backend/src/bot/index.ts @@ -1,5 +1,6 @@ import { Bot } from 'grammy' import plugins from './plugins' +import handlers from './handlers' import type { Ctx } from './context' import type { Logger } from '~/lib/logging' import type { Domain } from '~/domain' @@ -21,33 +22,7 @@ export function createBot({ plugins.domain.install(bot, { domain }) plugins.translations.install(bot) - bot.command('start', async (ctx) => { - ctx.reply(`${ctx.t.Welcome}\n\n${JSON.stringify(ctx.user)}`) - }) - - bot.command('howgoodami', async (ctx) => { - await ctx.api.sendMessage( - ctx.chat.id, - ctx.t['HowGoodAmI.Thinking'], - ) - - ctx.domain.getStudentBetterThanPercent(ctx.user!) - .then((percent) => { - ctx.api.sendMessage( - ctx.chat.id, - ctx.t['HowGoodAmI.Answer'](percent), - { reply_parameters: { message_id: ctx.update.message!.message_id } }, - ) - }) - .catch((err) => { - ctx.logger.error(err) - ctx.api.sendMessage( - ctx.chat.id, - ctx.t['HowGoodAmI.Failed'], - { reply_parameters: { message_id: ctx.update.message!.message_id } }, - ) - }) - }) + bot.use(handlers) return bot }