👩‍💻 refactor(bot-commands): Обновлены кнопки в UI для настроек и информации.
All checks were successful
Deploy / deploy (push) Successful in 46s

This commit is contained in:
Oscar
2026-05-28 22:47:11 +03:00
parent 675a14bba0
commit 124302c661
2 changed files with 52 additions and 24 deletions

View File

@@ -3,7 +3,7 @@ import bot from '@bot'
import prisma from '@prisma'
import cron, { type ScheduledTask } from 'node-cron'
import { applyToJobs, checkIsAuth, listResumes, login, NoResumeError, saveResume } from './scraper.js'
import { BACK_MARKUP, BTN, createStatusReporter, escapeHtml, LOGIN_REPLY_KEYBOARD, MAIN_REPLY_KEYBOARD, NO_RESUME_MARKUP, safeEdit } from './ui.js'
import { BACK_MARKUP, BTN, createStatusReporter, escapeHtml, INFO_REPLY_KEYBOARD, LOGIN_REPLY_KEYBOARD, MAIN_REPLY_KEYBOARD, NO_RESUME_MARKUP, safeEdit, SETTINGS_REPLY_KEYBOARD } from './ui.js'
interface UserState {
autoCron: ScheduledTask | null
@@ -397,26 +397,33 @@ export function registerHHCommands() {
await bot.sendMessage(chatId, '🔢 Введи максимальное количество откликов (1-50):')
break
case BTN.AUTO_ON: {
case BTN.AUTO_TOGGLE: {
const s = getState(chatId)
if (s.autoCron) {
await bot.sendMessage(chatId, '⚠️ Авто уже запущено')
break
s.autoCron.stop()
s.autoCron = null
await bot.sendMessage(chatId, '⛔ Авто остановлен', { reply_markup: SETTINGS_REPLY_KEYBOARD })
}
else {
s.autoCron = cron.schedule('0 10 * * 1-5', async () => {
await bot.sendMessage(chatId, '⏰ Авто-отклик...')
})
await bot.sendMessage(chatId, '✅ Авто включён (пн-пт, 10:00)')
await bot.sendMessage(chatId, '✅ Авто включён (пн-пт, 10:00)', { reply_markup: SETTINGS_REPLY_KEYBOARD })
}
break
}
case BTN.AUTO_OFF: {
const s = getState(chatId)
s.autoCron?.stop()
s.autoCron = null
await bot.sendMessage(chatId, '⛔ Авто остановлен')
case BTN.SETTINGS:
await bot.sendMessage(chatId, '⚙️ Настройки:', { reply_markup: SETTINGS_REPLY_KEYBOARD })
break
case BTN.INFO:
await bot.sendMessage(chatId, ' Информация:', { reply_markup: INFO_REPLY_KEYBOARD })
break
case BTN.BACK:
await bot.sendMessage(chatId, '🤖 HH Auto-Apply', { reply_markup: MAIN_REPLY_KEYBOARD })
break
}
case BTN.LOGIN:
await handleLogin(chatId)

View File

@@ -4,13 +4,15 @@ export const BTN = {
APPLY: '🚀 Откликнуться',
STATUS: '⚙️ Статус',
QUERY: '🔍 Изменить запрос',
MAX: '🔢 Макс откликов',
AUTO_ON: '⏰ Авто вкл',
AUTO_OFF: '⛔ Авто выкл',
MAX: '🔢 Макс. откликов',
AUTO_TOGGLE: '⏰ Авто',
LOGIN: '🔑 Войти на hh.ru',
RESUME_LIST: '📄 Выбрать резюме',
MY_RESUME: '📋 Моё резюме',
SKIPPED: '🚫 Проблемные',
SKIPPED: '🚫 Проблемные вакансии',
SETTINGS: '⚙️ Настройки',
INFO: ' Информация',
BACK: '◀️ Назад',
} as const
export const LOGIN_REPLY_KEYBOARD = {
@@ -21,11 +23,29 @@ export const LOGIN_REPLY_KEYBOARD = {
export const MAIN_REPLY_KEYBOARD = {
keyboard: [
[{ text: BTN.APPLY }, { text: BTN.STATUS }],
[{ text: BTN.QUERY }, { text: BTN.MAX }],
[{ text: BTN.AUTO_ON }, { text: BTN.AUTO_OFF }],
[{ text: BTN.LOGIN }, { text: BTN.RESUME_LIST }],
[{ text: BTN.MY_RESUME }, { text: BTN.SKIPPED }],
[{ text: BTN.APPLY }],
[{ text: BTN.SETTINGS }, { text: BTN.INFO }],
],
resize_keyboard: true,
persistent: true,
}
export const SETTINGS_REPLY_KEYBOARD = {
keyboard: [
[{ text: BTN.MAX }, { text: BTN.QUERY }],
[{ text: BTN.AUTO_TOGGLE }, { text: BTN.RESUME_LIST }],
[{ text: BTN.LOGIN }],
[{ text: BTN.BACK }],
],
resize_keyboard: true,
persistent: true,
}
export const INFO_REPLY_KEYBOARD = {
keyboard: [
[{ text: BTN.STATUS }, { text: BTN.MY_RESUME }],
[{ text: BTN.SKIPPED }],
[{ text: BTN.BACK }],
],
resize_keyboard: true,
persistent: true,
@@ -54,8 +74,9 @@ export async function safeEdit(
if (e instanceof Error && (
e.message.includes('message is not modified')
|| e.message.includes('message to edit not found')
))
)) {
return
}
throw e
})
}