import bot from '@bot' import prisma from '@prisma' import { applyToJobs } from '../scraper.js' import { createStatusReporter, escapeHtml } from '../ui.js' export async function handleApply(chatId: number): Promise { const settings = await prisma.settings.findUnique({ where: { telegramId: chatId } }) if (!settings) return const reporter = createStatusReporter(chatId) await reporter.keep(`🔄 Ищу вакансии по запросу "${settings.searchQuery}"...`) applyToJobs({ query: settings.searchQuery, maxApplies: settings.maxApplies }, { chatId, reporter }) .then(async (result) => { if (result.error) { await bot.sendMessage(chatId, `❌ ${result.error}`) return } const lines: string[] = [] lines.push(`📊 Итого по запросу «${settings.searchQuery}»`) lines.push(`✅ Откликнулся: ${result.applied.length}`) lines.push(`⏭ Пропущено: ${result.skipped.length}`) if (result.errors.length) lines.push(`❌ Ошибок: ${result.errors.length}`) if (result.skipped.length) { lines.push('') lines.push('⏭ Пропущенные:') result.skipped.forEach(v => lines.push(`• ${v.title}`)) } if (result.errors.length) { lines.push('') lines.push('❌ Ошибки:') result.errors.forEach(v => lines.push(`• ${escapeHtml(v.title)} — ${escapeHtml(v.message ?? '')}`)) } const fullText = lines.join('\n') const LIMIT = 4000 for (let i = 0; i < fullText.length; i += LIMIT) { await bot.sendMessage(chatId, fullText.slice(i, i + LIMIT), { parse_mode: 'HTML', disable_web_page_preview: true, }) } }) }