mirror of
https://github.com/hempyhemp/hh-auto-reply.git
synced 2026-06-08 18:04:57 +00:00
👩💻 refactor(bot-commands): Обновлены кнопки в UI для настроек и информации.
All checks were successful
Deploy / deploy (push) Successful in 46s
All checks were successful
Deploy / deploy (push) Successful in 46s
This commit is contained in:
@@ -3,7 +3,7 @@ import bot from '@bot'
|
|||||||
import prisma from '@prisma'
|
import prisma from '@prisma'
|
||||||
import cron, { type ScheduledTask } from 'node-cron'
|
import cron, { type ScheduledTask } from 'node-cron'
|
||||||
import { applyToJobs, checkIsAuth, listResumes, login, NoResumeError, saveResume } from './scraper.js'
|
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 {
|
interface UserState {
|
||||||
autoCron: ScheduledTask | null
|
autoCron: ScheduledTask | null
|
||||||
@@ -397,26 +397,33 @@ export function registerHHCommands() {
|
|||||||
await bot.sendMessage(chatId, '🔢 Введи максимальное количество откликов (1-50):')
|
await bot.sendMessage(chatId, '🔢 Введи максимальное количество откликов (1-50):')
|
||||||
break
|
break
|
||||||
|
|
||||||
case BTN.AUTO_ON: {
|
case BTN.AUTO_TOGGLE: {
|
||||||
const s = getState(chatId)
|
const s = getState(chatId)
|
||||||
if (s.autoCron) {
|
if (s.autoCron) {
|
||||||
await bot.sendMessage(chatId, '⚠️ Авто уже запущено')
|
s.autoCron.stop()
|
||||||
break
|
s.autoCron = null
|
||||||
|
await bot.sendMessage(chatId, '⛔ Авто остановлен', { reply_markup: SETTINGS_REPLY_KEYBOARD })
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
s.autoCron = cron.schedule('0 10 * * 1-5', async () => {
|
s.autoCron = cron.schedule('0 10 * * 1-5', async () => {
|
||||||
await bot.sendMessage(chatId, '⏰ Авто-отклик...')
|
await bot.sendMessage(chatId, '⏰ Авто-отклик...')
|
||||||
})
|
})
|
||||||
await bot.sendMessage(chatId, '✅ Авто включён (пн-пт, 10:00)')
|
await bot.sendMessage(chatId, '✅ Авто включён (пн-пт, 10:00)', { reply_markup: SETTINGS_REPLY_KEYBOARD })
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
case BTN.AUTO_OFF: {
|
case BTN.SETTINGS:
|
||||||
const s = getState(chatId)
|
await bot.sendMessage(chatId, '⚙️ Настройки:', { reply_markup: SETTINGS_REPLY_KEYBOARD })
|
||||||
s.autoCron?.stop()
|
break
|
||||||
s.autoCron = null
|
|
||||||
await bot.sendMessage(chatId, '⛔ Авто остановлен')
|
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
|
break
|
||||||
}
|
|
||||||
|
|
||||||
case BTN.LOGIN:
|
case BTN.LOGIN:
|
||||||
await handleLogin(chatId)
|
await handleLogin(chatId)
|
||||||
|
|||||||
41
src/hh/ui.ts
41
src/hh/ui.ts
@@ -4,13 +4,15 @@ export const BTN = {
|
|||||||
APPLY: '🚀 Откликнуться',
|
APPLY: '🚀 Откликнуться',
|
||||||
STATUS: '⚙️ Статус',
|
STATUS: '⚙️ Статус',
|
||||||
QUERY: '🔍 Изменить запрос',
|
QUERY: '🔍 Изменить запрос',
|
||||||
MAX: '🔢 Макс откликов',
|
MAX: '🔢 Макс. откликов',
|
||||||
AUTO_ON: '⏰ Авто вкл',
|
AUTO_TOGGLE: '⏰ Авто',
|
||||||
AUTO_OFF: '⛔ Авто выкл',
|
|
||||||
LOGIN: '🔑 Войти на hh.ru',
|
LOGIN: '🔑 Войти на hh.ru',
|
||||||
RESUME_LIST: '📄 Выбрать резюме',
|
RESUME_LIST: '📄 Выбрать резюме',
|
||||||
MY_RESUME: '📋 Моё резюме',
|
MY_RESUME: '📋 Моё резюме',
|
||||||
SKIPPED: '🚫 Проблемные',
|
SKIPPED: '🚫 Проблемные вакансии',
|
||||||
|
SETTINGS: '⚙️ Настройки',
|
||||||
|
INFO: 'ℹ️ Информация',
|
||||||
|
BACK: '◀️ Назад',
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export const LOGIN_REPLY_KEYBOARD = {
|
export const LOGIN_REPLY_KEYBOARD = {
|
||||||
@@ -21,11 +23,29 @@ export const LOGIN_REPLY_KEYBOARD = {
|
|||||||
|
|
||||||
export const MAIN_REPLY_KEYBOARD = {
|
export const MAIN_REPLY_KEYBOARD = {
|
||||||
keyboard: [
|
keyboard: [
|
||||||
[{ text: BTN.APPLY }, { text: BTN.STATUS }],
|
[{ text: BTN.APPLY }],
|
||||||
[{ text: BTN.QUERY }, { text: BTN.MAX }],
|
[{ text: BTN.SETTINGS }, { text: BTN.INFO }],
|
||||||
[{ text: BTN.AUTO_ON }, { text: BTN.AUTO_OFF }],
|
],
|
||||||
[{ text: BTN.LOGIN }, { text: BTN.RESUME_LIST }],
|
resize_keyboard: true,
|
||||||
[{ text: BTN.MY_RESUME }, { text: BTN.SKIPPED }],
|
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,
|
resize_keyboard: true,
|
||||||
persistent: true,
|
persistent: true,
|
||||||
@@ -54,8 +74,9 @@ export async function safeEdit(
|
|||||||
if (e instanceof Error && (
|
if (e instanceof Error && (
|
||||||
e.message.includes('message is not modified')
|
e.message.includes('message is not modified')
|
||||||
|| e.message.includes('message to edit not found')
|
|| e.message.includes('message to edit not found')
|
||||||
))
|
)) {
|
||||||
return
|
return
|
||||||
|
}
|
||||||
throw e
|
throw e
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user