"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.events = void 0; const telegraf_1 = require("telegraf"); const db_1 = require("../../db/db"); const axios_1 = __importDefault(require("axios")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); let vacancies = []; function events(bot) { bot.action('skip', (ctx) => __awaiter(this, void 0, void 0, function* () { ctx.reply('Меню', telegraf_1.Markup.keyboard([ ['Моя анкета'], ['Вакансии'], // ['Уведомления: включены'], ]).resize()); ctx.answerCbQuery(); })); bot.hears('Вернуться в меню', (ctx) => __awaiter(this, void 0, void 0, function* () { ctx.reply('Меню', telegraf_1.Markup.keyboard([ ['Моя анкета'], ['Вакансии'], // ['Уведомления: включены'], ]).resize()); })); bot.hears('Моя анкета', (ctx) => __awaiter(this, void 0, void 0, function* () { try { // Выполнение первого GET-запроса для получения данных пользователя const response = yield axios_1.default.get(`${process.env.API}students/${ctx.from.id}`, { headers: { 'X-API-KEY': 'SbRHOVoK97GKCx3Lqx6hKXLbZZJEd0GTGbeglXdpK9PhSB9kpr4eWCsuIIwnD6F2mgpTDlVHFCRbeFmuSfqBVsb12lNwF3P1tmdxiktl7zH9sDS2YK7Pyj2DecCWAZ3n', }, }); const data = response.data; const resumeFile = yield db_1.Resume.findOne({ where: { id: ctx.from.id } }); // Проверяем, существует ли резюме if (resumeFile && resumeFile.resumefile.length > 1) { // Выполнение второго GET-запроса для получения файла с резюме const resumeResponse = yield (0, axios_1.default)({ method: 'GET', url: `${process.env.API}services/resume/${resumeFile.resumefile}`, headers: { 'X-API-KEY': 'SbRHOVoK97GKCx3Lqx6hKXLbZZJEd0GTGbeglXdpK9PhSB9kpr4eWCsuIIwnD6F2mgpTDlVHFCRbeFmuSfqBVsb12lNwF3P1tmdxiktl7zH9sDS2YK7Pyj2DecCWAZ3n', }, responseType: 'stream', timeout: 10000, }); // Сохраняем файл временно на диск const resumePath = path_1.default.join(__dirname, 'resume.pdf'); const writer = fs_1.default.createWriteStream(resumePath); resumeResponse.data.pipe(writer); writer.on('finish', () => __awaiter(this, void 0, void 0, function* () { // Отправка файла и сообщения с данными из API yield ctx.replyWithDocument({ source: resumePath }); yield ctx.replyWithHTML(`Имя: ${data.Name}\nГруппа: ${data.Group}\nТип: ${data.Type}\nГотов на занятость: ${data.Time.join()}\nО себе: ${data.Soft_skills}\nПочта: ${data.Email}\n`, { reply_markup: { inline_keyboard: [ [ { text: 'Редактировать анкету', web_app: { url: process.env.WEB_APP || '' }, }, ], [ { text: 'Обновить резюме', callback_data: 'update_resume', }, ], ], }, }); // Удаляем временный файл fs_1.default.unlinkSync(resumePath); })); writer.on('error', err => { console.error('Ошибка при записи файла резюме:', err); ctx.reply('Произошла ошибка при получении файла резюме.'); }); } else { // Отправка только сообщения с данными из API, если резюме не существует yield ctx.replyWithHTML(`Имя: ${data.Name}\nГруппа: ${data.Group}\nТип: ${data.Type}\nГотов на занятость: ${data.Time.join()}\nО себе: ${data.Soft_skills}\nПочта: ${data.Email}\n`, { reply_markup: { inline_keyboard: [ [ { text: 'Редактировать', web_app: { url: process.env.WEB_APP || '' }, }, ], [ { text: 'Загрузить резюме', callback_data: 'update_resume', }, ], ], }, }); } } catch (error) { console.error('Ошибка при выполнении запроса к API:', error); ctx.reply('Произошла ошибка при получении данных из API.'); } })); bot.hears('Вакансии', (ctx) => __awaiter(this, void 0, void 0, function* () { try { yield ctx.reply('Выберите тип вакансии:', telegraf_1.Markup.keyboard([ ['Актуальные вакансии'], ['Сохраненные вакансии'], ['Поиск'], ['Вернуться в меню'], ]).resize()); } catch (error) { console.error('Ошибка при выполнении запроса к API:', error); ctx.reply('Произошла ошибка при получении данных из API.'); } })); bot.hears('Поиск', (ctx) => __awaiter(this, void 0, void 0, function* () { try { yield ctx.reply('Поиск вакансий:', telegraf_1.Markup.keyboard([ ['Актуальные вакансии'], ['Сохраненные вакансии'], ['Вернуться в меню'], ]).resize()); ctx.reply('Страница с поиском вакансий', { reply_markup: { inline_keyboard: [ [ { text: 'Перейти', web_app: { url: process.env.WEB_APP_SEARCH || '' }, }, ], ], resize_keyboard: true, one_time_keyboard: true, }, }); } catch (error) { console.error('Ошибка при выполнении запроса к API:', error); ctx.reply('Произошла ошибка при получении данных из API.'); } })); bot.hears('Актуальные вакансии', (ctx) => __awaiter(this, void 0, void 0, function* () { try { yield db_1.UserBase.update({ vacansyindex: 0 }, { where: { id: ctx.from.id, }, }); // Выполнение первого GET-запроса для получения данных пользователя const response = yield axios_1.default.get(`${process.env.API}students/matches/${ctx.from.id}`, { headers: { 'X-API-KEY': 'SbRHOVoK97GKCx3Lqx6hKXLbZZJEd0GTGbeglXdpK9PhSB9kpr4eWCsuIIwnD6F2mgpTDlVHFCRbeFmuSfqBVsb12lNwF3P1tmdxiktl7zH9sDS2YK7Pyj2DecCWAZ3n', }, }); vacancies = response.data; console.log(vacancies); if (vacancies.length === 0) { ctx.reply('На данный момент нет актуальных вакансий.'); return; } let user = yield db_1.UserBase.findOne({ where: { id: ctx.from.id } }); if (user) { let currentIndex = user === null || user === void 0 ? void 0 : user.vacansyindex; yield sendVacancy(ctx, currentIndex, true); } } catch (error) { console.error('Ошибка при выполнении запроса к API:', error); ctx.reply('Произошла ошибка при получении данных из API.'); } })); bot.hears('Сохраненные вакансии', (ctx) => __awaiter(this, void 0, void 0, function* () { try { yield db_1.UserBase.update({ vacansyindex: 0 }, { where: { id: ctx.from.id, }, }); // Выполнение первого GET-запроса для получения данных пользователя const response = yield axios_1.default.get(`${process.env.API}students/favourites/${ctx.from.id}`, { headers: { 'X-API-KEY': 'SbRHOVoK97GKCx3Lqx6hKXLbZZJEd0GTGbeglXdpK9PhSB9kpr4eWCsuIIwnD6F2mgpTDlVHFCRbeFmuSfqBVsb12lNwF3P1tmdxiktl7zH9sDS2YK7Pyj2DecCWAZ3n', }, }); vacancies = response.data; console.log(vacancies); if (vacancies.length === 0) { ctx.reply('На данный момент нет сохранённых вакансий.'); return; } let user = yield db_1.UserBase.findOne({ where: { id: ctx.from.id } }); if (user) { let currentIndex = user === null || user === void 0 ? void 0 : user.vacansyindex; yield sendVacancy(ctx, currentIndex, false); } } catch (error) { console.error('Ошибка при выполнении запроса к API:', error); ctx.reply('На данный момент нет сохранённых вакансий.'); // ctx.reply('Произошла ошибка при получении данных из API.'); } })); bot.action('next', (ctx) => __awaiter(this, void 0, void 0, function* () { let user = yield db_1.UserBase.findOne({ where: { id: ctx.from.id } }); if (user) { let currentIndex = (user === null || user === void 0 ? void 0 : user.vacansyindex) + 1; if (currentIndex <= vacancies.length - 1) { yield db_1.UserBase.update({ vacansyindex: currentIndex }, { where: { id: ctx.from.id } }); yield sendVacancy(ctx, currentIndex, true); ctx.answerCbQuery(); } else { ctx.answerCbQuery('Это последняя вакансия.'); } } })); bot.action('update_resume', (ctx) => __awaiter(this, void 0, void 0, function* () { yield ctx.scene.enter('resumeScene'); yield ctx.answerCbQuery(); })); bot.action('prev', (ctx) => __awaiter(this, void 0, void 0, function* () { let user = yield db_1.UserBase.findOne({ where: { id: ctx.from.id } }); if (user) { let currentIndex = (user === null || user === void 0 ? void 0 : user.vacansyindex) - 1; if (currentIndex >= 0) { yield db_1.UserBase.update({ vacansyindex: currentIndex }, { where: { id: ctx.from.id } }); yield sendVacancy(ctx, currentIndex, true); ctx.answerCbQuery(); } else { ctx.answerCbQuery('Это первая вакансия.'); } } })); function sendVacancy(ctx, index, showSaveButton) { return __awaiter(this, void 0, void 0, function* () { const data = vacancies[index]; // Формируем кнопки навигации let inlineKeyboard = [ [ { text: 'Назад', callback_data: 'prev' }, { text: `${index + 1}/${vacancies.length}`, callback_data: 'new' }, { text: 'Далее', callback_data: 'next' }, ], ]; // Добавляем кнопку "Сохранить вакансию" только если showSaveButton = true if (showSaveButton) { inlineKeyboard.push([ { text: 'Сохранить вакансию', callback_data: `savevacancy+${data.JobID}`, }, ]); } // Отправляем сообщение с вакансиями yield ctx.replyWithHTML(`${data.Job_name}\n\n` + `Компания: ${data.Company_name}\n` + `Заработная плата: ${data.Salary} руб/мес\n` + `Контактные данные: ${data.Email}\n\n` + `Требования к кандидату:\n` + ` - ${data.Year} курс\n` + ` - Опыт работы по специальности: ${data.Qualification}\n` + ` - Soft skills: ${data.Soft_skills}\n` + `Обязанности:\n` + `${data.Responsibilities}`, { reply_markup: { inline_keyboard: inlineKeyboard, }, }); }); } } exports.events = events;