copied the code from the working repo
This commit is contained in:
292
mtucijobsbot/dist/modules/scenes/events.js
vendored
Normal file
292
mtucijobsbot/dist/modules/scenes/events.js
vendored
Normal file
@@ -0,0 +1,292 @@
|
||||
"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;
|
||||
Reference in New Issue
Block a user