From a52d7a170658d1e8b8d4a629dcf63b689869aa24 Mon Sep 17 00:00:00 2001 From: Oscar Date: Mon, 1 Jun 2026 11:29:41 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=9F=20feat(file/topic):=20=D0=94=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B2=D1=85=D0=BE=D0=B4=D0=B0=20=D0=BF=D0=BE=20email=20=D0=B8?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hh/bot-commands.ts | 19 +++++++++++++++++-- src/hh/handlers/auth.ts | 17 +++++++++++++++++ src/hh/handlers/debug.ts | 3 +-- src/hh/state.ts | 4 ++++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/hh/bot-commands.ts b/src/hh/bot-commands.ts index bc7c5bb..3c4052c 100644 --- a/src/hh/bot-commands.ts +++ b/src/hh/bot-commands.ts @@ -2,7 +2,7 @@ import bot from '@bot' import prisma from '@prisma' import { debugFunc } from '@/hh/handlers/debug' import { handleApply } from './handlers/apply.js' -import { doLogin, handleLogin } from './handlers/auth.js' +import { doLogin, handleLogin, handleLoginByEmail, handleLoginByPhone } from './handlers/auth.js' import { handleSkipped, handleStatus } from './handlers/info.js' import { finishOnboarding, showPromptStep, showQueryStep, showResumeInfo } from './handlers/onboarding.js' import { handleMyResume, handleResumeList, handleResumePick } from './handlers/resume.js' @@ -39,6 +39,18 @@ const CALLBACK_HANDLERS: Record = { await bot.deleteMessage(chatId, messageId).catch(() => {}) await handleLogin(chatId) }, + hh_login_method_email: async (chatId, messageId) => { + const state = getState(chatId) + state.loginMethodMsgId = null + await bot.deleteMessage(chatId, messageId).catch(() => {}) + await handleLoginByEmail(chatId) + }, + hh_login_method_phone: async (chatId, messageId) => { + const state = getState(chatId) + state.loginMethodMsgId = null + await bot.deleteMessage(chatId, messageId).catch(() => {}) + await handleLoginByPhone(chatId) + }, hh_login_use_current: async (chatId, messageId) => { const state = getState(chatId) state.awaitingEmail = false @@ -109,6 +121,7 @@ const CALLBACK_HANDLERS: Record = { async function clearAwaitingState(chatId: number): Promise { const state = getState(chatId) const msgIds = [ + state.loginMethodMsgId, state.loginPromptMessageId, state.queryPromptMessageId, state.maxPromptMessageId, @@ -116,11 +129,13 @@ async function clearAwaitingState(chatId: number): Promise { state.onboardingMsgId, ] state.awaitingEmail = false + state.awaitingPhone = false state.awaitingQuery = false state.awaitingMax = false state.awaitingPrompt = false state.onboardingStep = null state.onboardingMsgId = null + state.loginMethodMsgId = null state.loginPromptMessageId = null state.queryPromptMessageId = null state.maxPromptMessageId = null @@ -170,7 +185,7 @@ export function registerHHCommands() { return } - const isAwaiting = state.awaitingEmail || state.awaitingQuery || state.awaitingMax || state.awaitingPrompt || state.onboardingStep !== null + const isAwaiting = state.awaitingEmail || state.awaitingPhone || state.awaitingQuery || state.awaitingMax || state.awaitingPrompt || state.onboardingStep !== null const isMenuButton = Object.values(BTN).includes(msg.text as typeof BTN[keyof typeof BTN]) if (isMenuButton && isAwaiting) { diff --git a/src/hh/handlers/auth.ts b/src/hh/handlers/auth.ts index c372ad1..f0f7c54 100644 --- a/src/hh/handlers/auth.ts +++ b/src/hh/handlers/auth.ts @@ -56,6 +56,19 @@ export async function doLogin(chatId: number, email: string): Promise { } export async function handleLogin(chatId: number): Promise { + const state = getState(chatId) + const msg = await bot.sendMessage(chatId, '🔐 Выбери способ входа:', { + reply_markup: { + inline_keyboard: [[ + { text: '📧 Email', callback_data: 'hh_login_method_email' }, + { text: '📱 Телефон', callback_data: 'hh_login_method_phone' }, + ]], + }, + }) + state.loginMethodMsgId = msg.message_id +} + +export async function handleLoginByEmail(chatId: number): Promise { const state = getState(chatId) const user = await prisma.user.findUnique({ where: { telegramId: chatId } }) state.awaitingEmail = true @@ -79,3 +92,7 @@ export async function handleLogin(chatId: number): Promise { state.loginPromptMessageId = prompt.message_id } } + +export async function handleLoginByPhone(chatId: number): Promise { + await bot.sendMessage(chatId, '📱 Авторизация по телефону — скоро будет доступна') +} diff --git a/src/hh/handlers/debug.ts b/src/hh/handlers/debug.ts index 6cba20b..807ca48 100644 --- a/src/hh/handlers/debug.ts +++ b/src/hh/handlers/debug.ts @@ -1,7 +1,6 @@ import bot from '@bot' -import { startOnboarding } from '@/hh/handlers/onboarding' export async function debugFunc(chatId: number): Promise { await bot.sendMessage(chatId, '🌍 Регион — скоро будет доступно') - await startOnboarding(chatId) + // await startOnboarding(chatId) } diff --git a/src/hh/state.ts b/src/hh/state.ts index ee08c51..72f4e0c 100644 --- a/src/hh/state.ts +++ b/src/hh/state.ts @@ -5,10 +5,12 @@ export interface UserState { autoCron: ScheduledTask | null isApplying: boolean awaitingEmail: boolean + awaitingPhone: boolean awaitingQuery: boolean awaitingMax: boolean awaitingPrompt: boolean pendingResumes: ResumeListItem[] + loginMethodMsgId: number | null loginPromptMessageId: number | null queryPromptMessageId: number | null maxPromptMessageId: number | null @@ -23,10 +25,12 @@ function makeUserState(): UserState { autoCron: null, isApplying: false, awaitingEmail: false, + awaitingPhone: false, awaitingQuery: false, awaitingMax: false, awaitingPrompt: false, pendingResumes: [], + loginMethodMsgId: null, loginPromptMessageId: null, queryPromptMessageId: null, maxPromptMessageId: null,