Files
Tg-job/mtucijobsbot/dist/modules/scenes/events.js

293 lines
15 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"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(`<b>Имя:</b> ${data.Name}\n<b>Группа:</b> ${data.Group}\n<b>Тип:</b> ${data.Type}\n<b>Готов на занятость:</b> ${data.Time.join()}\n<b>О себе:</b> ${data.Soft_skills}\n<b>Почта:</b> ${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(`<b>Имя:</b> ${data.Name}\n<b>Группа:</b> ${data.Group}\n<b>Тип:</b> ${data.Type}\n<b>Готов на занятость:</b> ${data.Time.join()}\n<b>О себе:</b> ${data.Soft_skills}\n<b>Почта:</b> ${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(`<b>${data.Job_name}</b>\n\n` +
`<b>Компания:</b> ${data.Company_name}\n` +
`<b>Заработная плата:</b> ${data.Salary} руб/мес\n` +
`<b>Контактные данные:</b> ${data.Email}\n\n` +
`<b>Требования к кандидату:</b>\n` +
` - ${data.Year} курс\n` +
` - Опыт работы по специальности: ${data.Qualification}\n` +
` - Soft skills: ${data.Soft_skills}\n` +
`<b>Обязанности:</b>\n` +
`${data.Responsibilities}`, {
reply_markup: {
inline_keyboard: inlineKeyboard,
},
});
});
}
}
exports.events = events;