copied the code from the working repo

This commit is contained in:
2024-11-30 16:00:48 +03:00
parent f22b92869b
commit 15ac0cb9b8
148 changed files with 23342 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
"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.accept = void 0;
const axios_1 = __importDefault(require("axios"));
require("dotenv/config");
// const API_BASE_URL = 'https://mtucitech.ru/api/external/mtuci_jobs';
// const BEARER_TOKEN = 'zKbgaXQv{pvGtQm~U9$urtD#QsiHc@Ie';
function accept(bot) {
bot.action('accept', (ctx) => __awaiter(this, void 0, void 0, function* () {
var _a;
try {
const response = yield axios_1.default.get(`${process.env.MTUCI_TECH}/check?telegram_id=${ctx.from.id}`, {
headers: {
Authorization: `Bearer ${process.env.BEARER_TOKEN}`,
},
});
const data = response.data;
// Логика обработки ответа
switch (data.status) {
case 338:
ctx.answerCbQuery('Ошибка на стороне сервера. Пожалуйста, сообщите нам.');
break;
case 339:
ctx.answerCbQuery('Пользователь не привязан к проекту.');
break;
case 340:
ctx.reply('Можете заполнить своё резюме', {
reply_markup: {
inline_keyboard: [
[
{
text: 'Резюме',
web_app: { url: process.env.WEB_APP || '' },
},
],
],
resize_keyboard: true,
one_time_keyboard: true,
},
});
ctx.answerCbQuery('Пользователь найден, но не привязан LMS.');
break;
case 341:
ctx.reply('Можете заполнить своё резюме', {
reply_markup: {
inline_keyboard: [
[
{
text: 'Резюме',
web_app: { url: process.env.WEB_APP || '' },
},
],
],
resize_keyboard: true,
one_time_keyboard: true,
},
});
ctx.answerCbQuery('Пользователь найден, LMS привязан. Можно запросить дополнительные данные.');
default:
ctx.answerCbQuery('Неизвестный статус.');
break;
}
}
catch (error) {
if (axios_1.default.isAxiosError(error)) {
// Обработка ошибок Axios
if (error.response && error.response.status === 409) {
ctx.answerCbQuery('Вакансия уже добавлена в избранное');
}
else {
ctx.answerCbQuery('Произошла ошибка');
console.error(((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error.message);
}
}
else {
// Обработка других типов ошибок
ctx.answerCbQuery('Произошла неизвестная ошибка');
console.error(error);
}
}
}));
bot.action('accept2', (ctx) => __awaiter(this, void 0, void 0, function* () {
ctx.reply('Можете заполнить своё резюме', {
reply_markup: {
inline_keyboard: [
[
{
text: 'Резюме',
web_app: { url: process.env.WEB_APP || '' },
},
],
],
resize_keyboard: true,
one_time_keyboard: true,
},
});
ctx.answerCbQuery();
}));
}
exports.accept = accept;

View 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;

View File

@@ -0,0 +1,39 @@
"use strict";
// import { Telegraf, Context, Scenes } from 'telegraf';
// import { MessagesService } from '../../services/messagesService';
// import fs from 'fs';
// import fetch from 'node-fetch';
// import { MyWizardContext } from '../..';
// import { updateUrls } from '../../db/db';
// export function invest(bot: Telegraf<Scenes.WizardContext>) {
// bot.action('invest', async ctx => {
// await MessagesService.sendMessage(ctx, 'invest');
// await ctx.answerCbQuery();
// });
// bot.action('investscreen', async ctx => {
// await ctx.scene.enter('investHandler');
// await ctx.answerCbQuery();
// });
// }
// export const investHandler: Scenes.WizardScene<MyWizardContext> =
// new Scenes.WizardScene(
// 'investHandler',
// async ctx => {
// await MessagesService.sendMessage(ctx, 'getpoint');
// return ctx.wizard.next();
// },
// async ctx => {
// if (ctx.message && 'text' in ctx.message && ctx.from) {
// const userUrls = ctx.message.text;
// await updateUrls(ctx.from.id, 'invest', userUrls, true);
// await MessagesService.sendMessage(ctx, 'thanks');
// await MessagesService.sendMessage(ctx, 'invest');
// return ctx.scene.leave();
// } else {
// console.error(
// 'Ошибка: отсутствует текстовое сообщение или свойство from в контексте.'
// );
// return ctx.scene.leave();
// }
// }
// );

View File

@@ -0,0 +1,55 @@
"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.saveVacansy = void 0;
const axios_1 = __importDefault(require("axios"));
require("dotenv/config");
function saveVacansy(bot) {
bot.on('callback_query', (ctx) => __awaiter(this, void 0, void 0, function* () {
var _a;
if (ctx.callbackQuery && 'data' in ctx.callbackQuery) {
const callbackData = ctx.callbackQuery.data;
if (callbackData.startsWith('savevacancy+')) {
const jobID = callbackData.split('+')[1];
try {
const data = yield axios_1.default.post(`${process.env.API}students/favourites/`, { StudentID: ctx.from.id, JobID: jobID }, {
headers: {
'X-API-KEY': 'SbRHOVoK97GKCx3Lqx6hKXLbZZJEd0GTGbeglXdpK9PhSB9kpr4eWCsuIIwnD6F2mgpTDlVHFCRbeFmuSfqBVsb12lNwF3P1tmdxiktl7zH9sDS2YK7Pyj2DecCWAZ3n',
},
});
console.log(data);
ctx.answerCbQuery('Вакансия была сохранена');
}
catch (error) {
if (axios_1.default.isAxiosError(error)) {
// Обработка ошибок Axios
if (error.response && error.response.status === 409) {
ctx.answerCbQuery('Вакансия уже добавлена в избранное');
}
else {
ctx.answerCbQuery('Произошла ошибка при сохранении вакансии');
console.error(((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error.message);
}
}
else {
// Обработка других типов ошибок
ctx.answerCbQuery('Произошла неизвестная ошибка');
console.error(error);
}
}
}
}
}));
}
exports.saveVacansy = saveVacansy;