diff --git a/lib/glpiParse.js b/lib/glpiParse.js
index b6e0015..4d76d90 100644
--- a/lib/glpiParse.js
+++ b/lib/glpiParse.js
@@ -13,149 +13,161 @@ const glpiUrl = conf.glpiConfig.apiurl.replace("apirest.php", "");
exports.parseTickets = async (bot, messageData) => {
let listTickets = await glpm.getAllItems('Ticket', 5);
for(let i = 4; i >= 0; i--){
- let ticketId;
- if(!listTickets[i]) break;
- ticketId = listTickets[i].id;
- if(ticketId <= messageData.ticket) continue;
- if(listTickets[i].users_id_recipient != conf.glpiConfig.user_id){
- let usersArray = await glpm.getUsers(ticketId);
- let authorEmail;
- if(!usersArray[0]) continue;
- if(usersArray[0].hasOwnProperty('alternative_email') && usersArray[0].alternative_email){
- authorEmail = usersArray[0].alternative_email;
- }else{
- let temp = await glpm.getItem("User", usersArray[0].users_id);
- authorEmail = temp.firstname + ' ' + temp.realname;
+ try{
+ let ticketId;
+ if(!listTickets[i]) break;
+ ticketId = listTickets[i].id;
+ if(ticketId <= messageData.ticket) continue;
+ if(listTickets[i].users_id_recipient != conf.glpiConfig.user_id){
+ let usersArray = await glpm.getUsers(ticketId);
+ let authorEmail;
+ if(!usersArray[0]) continue;
+ if(usersArray[0].hasOwnProperty('alternative_email') && usersArray[0].alternative_email){
+ authorEmail = usersArray[0].alternative_email;
+ }else{
+ let temp = await glpm.getItem("User", usersArray[0].users_id);
+ authorEmail = temp.firstname + ' ' + temp.realname;
+ }
+ let text = await htmlToText(listTickets[i].content);
+ let messageText = `🟢 ЗАЯВКА №${ticketId}\n\n`;
+ messageText += `Автор заявки: ${authorEmail}\n`;
+ messageText += `Проблема: ${listTickets[i].name}\nОписание: `;
+ messageText += text;
+ if(messageText.length > 600){
+ messageText = `${messageText.substring(0, 500)} + '\n\nЧитать дальше`;
+ }
+ let messg = await bot.telegram.sendMessage(conf.supportChatId, messageText, {
+ parse_mode: 'HTML',
+ reply_markup: { inline_keyboard: cns.inlineKeyboards.open }
+ });
+ await editMessageText(bot, messg.message_id, messageText, cns.inlineKeyboards.open);
+ messageData.data[ticketId] = {
+ messageId: messg.message_id,
+ status: 1
+ };
+ let title = `🟢 ${ticketId} - ${listTickets[i].name}`;
+ await createThread(bot, messageData, ticketId, title);
+ await sleep(1000);
}
- let text = await htmlToText(listTickets[i].content);
- let messageText = `🟢 ЗАЯВКА №${ticketId}\n\n`;
- messageText += `Автор заявки: ${authorEmail}\n`;
- messageText += `Проблема: ${listTickets[i].name}\nОписание: `;
- messageText += text;
- if(messageText.length > 600){
- messageText = `${messageText.substring(0, 500)} + '\n\nЧитать дальше`;
- }
- let messg = await bot.telegram.sendMessage(conf.supportChatId, messageText, {
- parse_mode: 'HTML',
- reply_markup: { inline_keyboard: cns.inlineKeyboards.open }
- });
- await editMessageText(bot, messg.message_id, messageText, cns.inlineKeyboards.open);
- messageData.data[ticketId] = {
- messageId: messg.message_id,
- status: 1
- };
- let title = `🟢 ${ticketId} - ${listTickets[i].name}`;
- await createThread(bot, messageData, ticketId, title);
- await sleep(1000);
+ messageData.ticket = ticketId;
+ fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
+ }catch(e){
+ fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify("*** parseTickets:\n" + e, null, 3));
}
- messageData.ticket = ticketId;
}
- fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
}
exports.parseComments = async (bot, messageData) => {
let listComments = await glpm.getAllItems('ITILFollowup', 5);
for (let i = 4; i >= 0; i--) {
- if(!listComments[i]) break;
- let commentId = listComments[i].id;
- if(commentId <= messageData.comment) continue;
- if(listComments[i].users_id != conf.glpiConfig.user_id){
- let ticketId = listComments[i].items_id;
- if(!messageData.data.hasOwnProperty(ticketId) || !messageData.data[ticketId].hasOwnProperty("threadId")) continue;
- let comment = await htmlToText(listComments[i].content);
- let user;
- if(listComments[i].users_id){
- let temp = await glpm.getItem("User", listComments[i].users_id);
- user = temp.firstname + ' ' + temp.realname;
- }else{
- let temp = await glpm.getUsers(ticketId);
- user = temp[0].alternative_email;
+ try{
+ if(!listComments[i]) break;
+ let commentId = listComments[i].id;
+ if(commentId <= messageData.comment) continue;
+ if(listComments[i].users_id != conf.glpiConfig.user_id){
+ let ticketId = listComments[i].items_id;
+ if(!messageData.data.hasOwnProperty(ticketId) || !messageData.data[ticketId].hasOwnProperty("threadId")) continue;
+ let comment = await htmlToText(listComments[i].content);
+ let user;
+ if(listComments[i].users_id){
+ let temp = await glpm.getItem("User", listComments[i].users_id);
+ user = temp.firstname + ' ' + temp.realname;
+ }else{
+ let temp = await glpm.getUsers(ticketId);
+ user = temp[0].alternative_email;
+ }
+ if(!messageData.data.hasOwnProperty(ticketId) || !messageData.data[ticketId].hasOwnProperty('threadId')){
+ return;
+ }
+ let messageText = `Комментарий от ${user}:\n\n${comment}`;
+ if(messageText.length > 2400){
+ messageText = `${messageText.substring(0, 2400)} + '\n\nЧитать дальше`;
+ }
+ await bot.telegram.sendMessage(conf.supportChatId, messageText, {parse_mode: "HTML", message_thread_id: messageData.data[ticketId].threadId});
+ await sleep(1000);
}
- if(!messageData.data.hasOwnProperty(ticketId) || !messageData.data[ticketId].hasOwnProperty('threadId')){
- return;
- }
- let messageText = `Комментарий от ${user}:\n\n${comment}`;
- if(messageText.length > 2400){
- messageText = `${messageText.substring(0, 2400)} + '\n\nЧитать дальше`;
- }
- await bot.telegram.sendMessage(conf.supportChatId, messageText, {parse_mode: "HTML", message_thread_id: messageData.data[ticketId].threadId});
- await sleep(1000);
+ messageData.comment = commentId;
+ fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
+ }catch(e){
+ fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify("*** parseComments:\n" + e, null, 3));
}
- messageData.comment = commentId;
- fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
}
}
exports.refreshStatus = async (bot, messageData) => {
let listTickets = await glpm.getAllItems('Ticket', 100);
for(let i = 99; i >= 0; i--){
- let ticketId = listTickets[i].id;
- if(!listTickets[i] || !messageData.data.hasOwnProperty(ticketId)) continue;
- let td = messageData.data[ticketId];
- try{
- if(td.status != listTickets[i].status){
- let usersArray = await glpm.getUsers(ticketId);
+ try{
+ let ticketId = listTickets[i].id;
+ if(!listTickets[i] || !messageData.data.hasOwnProperty(ticketId)) continue;
+ let td = messageData.data[ticketId];
+ if(td.status != listTickets[i].status){
+ let usersArray = await glpm.getUsers(ticketId);
let message = await htmlToText(listTickets[i].content);
- let authorEmail;
+ let authorEmail;
if(!usersArray[0]) authorEmail == "Unknown";
- else if(usersArray[0].hasOwnProperty('alternative_email') && usersArray[0].alternative_email){
- authorEmail = usersArray[0].alternative_email;
- }else if(usersArray[0].users_id == conf.glpiConfig.user_id){
+ else if(usersArray[0].hasOwnProperty('alternative_email') && usersArray[0].alternative_email){
+ authorEmail = usersArray[0].alternative_email;
+ }else if(usersArray[0].users_id == conf.glpiConfig.user_id){
await editTicketStatus(bot, messageData, message);
continue;
}else{
- let temp = await glpm.getItem("User", usersArray[0].users_id);
- authorEmail = temp.firstname + ' ' + temp.realname;
- }
+ let temp = await glpm.getItem("User", usersArray[0].users_id);
+ authorEmail = temp.firstname + ' ' + temp.realname;
+ }
let color = await getTicketColor(listTickets[i].status);
- let messageText = `${color} ЗАЯВКА №${ticketId}\n\n`;
- messageText += `Автор заявки: ${authorEmail}\n`;
- messageText += `Проблема: ${listTickets[i].name}\nОписание: `;
- messageText += message;
- if(messageText.length > 600){
- messageText = `${messageText.substring(0, 500)} + '\n\nЧитать дальше`;
- }
- let inKeyboard = await getKeyboardFromStatus(listTickets[i].status);
- if(td.hasOwnProperty('threadId')){
+ let messageText = `${color} ЗАЯВКА №${ticketId}\n\n`;
+ messageText += `Автор заявки: ${authorEmail}\n`;
+ messageText += `Проблема: ${listTickets[i].name}\nОписание: `;
+ messageText += message;
+ if(messageText.length > 600){
+ messageText = `${messageText.substring(0, 500)} + '\n\nЧитать дальше`;
+ }
+ let inKeyboard = await getKeyboardFromStatus(listTickets[i].status);
+ if(td.hasOwnProperty('threadId')){
if(listTickets[i].status == 5 || listTickets[i].status == 6){
await closeThread(bot, messageData, ticketId);
}else{
let title = `${color} ${ticketId} - ${listTickets[i].name}`;
await bot.telegram.editForumTopic(conf.supportChatId, td.threadId, { name: title });
}
- }
+ }
await editMessageText(bot, td.messageId, messageText, inKeyboard);
await editMessageText(bot, td.pinMessageId, messageText, inKeyboard);
- messageData.data[ticketId].status = listTickets[i].status;
+ messageData.data[ticketId].status = listTickets[i].status;
}else if(td.hasOwnProperty('threadId') && (listTickets[i].status == 5 || listTickets[i].status == 6)){
await closeThread(bot, messageData, ticketId);
}
}catch(e){
- fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify("refreshStatus function: " + e, null, 3));
+ fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify("*** refreshStatus:\n" + e, null, 3));
}
}
fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
}
exports.editTicketStatus = async (bot, messageData, message) => {
- let ticketId = message.text.split('№')[1].split('\n')[0];
- let ticket = await glpm.getItem('Ticket', ticketId);
- let inKeyboard = await getKeyboardFromStatus(ticket.status);
- if(messageData.data[ticketId].status != ticket.status){
- messageData.data[ticketId].status = ticket.status;
- let color = await getTicketColor(ticket.status);
- let title = ticket.name;
- if(messageData.data[ticketId].hasOwnProperty('userChatId')){
- title = `${title.split(' - ')[1]} - ${title.split(' - ')[2]}`;
+ try{
+ let ticketId = message.text.split('№')[1].split('\n')[0];
+ let ticket = await glpm.getItem('Ticket', ticketId);
+ let inKeyboard = await getKeyboardFromStatus(ticket.status);
+ if(messageData.data[ticketId].status != ticket.status){
+ messageData.data[ticketId].status = ticket.status;
+ let color = await getTicketColor(ticket.status);
+ let title = ticket.name;
+ if(messageData.data[ticketId].hasOwnProperty('userChatId')){
+ title = `${title.split(' - ')[1]} - ${title.split(' - ')[2]}`;
+ }
+ title = `${color} ${ticketId} - ${title}`;
+ if(messageData.data[ticketId].hasOwnProperty('threadId')){
+ await bot.telegram.editForumTopic(conf.supportChatId, messageData.data[ticketId].threadId, { name: title });
+ }
+ let messageText = await parseMessageText(message, messageData, ticketId);
+ await editMessageText(bot, messageData.data[ticketId].messageId, messageText, inKeyboard);
+ await editMessageText(bot, messageData.data[ticketId].pinMessageId, messageText, inKeyboard);
}
- title = `${color} ${ticketId} - ${title}`;
- if(messageData.data[ticketId].hasOwnProperty('threadId')){
- await bot.telegram.editForumTopic(conf.supportChatId, messageData.data[ticketId].threadId, { name: title });
- }
- let messageText = await parseMessageText(message, messageData, ticketId);
- await editMessageText(bot, messageData.data[ticketId].messageId, messageText, inKeyboard);
- await editMessageText(bot, messageData.data[ticketId].pinMessageId, messageText, inKeyboard);
+ await editMessageMarkup(bot, message.message_id, inKeyboard);
+ fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
+ }catch(e){
+ fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify("*** editTicketStatus:\n" + e, null, 3));
}
- await editMessageMarkup(bot, message.message_id, inKeyboard);
- fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
}
\ No newline at end of file
diff --git a/lib/glpm.js b/lib/glpm.js
index 2ca87fe..f388993 100644
--- a/lib/glpm.js
+++ b/lib/glpm.js
@@ -26,7 +26,7 @@ exports.createTicket = async (title, description) => {
});
return response.data.id;
}catch(e){
- fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify("*** createTicket:\n" + e, null, 3));
}
}
@@ -51,7 +51,7 @@ exports.changeStatusTicket = async (ticketId, statusId) => {
});
return response;
}catch(e){
- fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify("*** changeStatusTicket:\n" + e, null, 3));
}
}
@@ -77,7 +77,7 @@ exports.assignTicket = async (ticketId, userId) => {
});
return response.data;
}catch(e){
- fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify("*** assignTicket:\n" + e, null, 3));
}
}
@@ -96,7 +96,7 @@ exports.getItem = async(item, id) => { // ITILFollowup = комментари
});
return response.data;
}catch(e){
- fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify("*** getItem:\n" + e, null, 3));
}
}
@@ -115,7 +115,7 @@ exports.getAllItems = async(item, cnt) => {
});
return response.data;
}catch(e){
- fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify("*** getAllItems:\n" + e, null, 3));
}
}
@@ -141,7 +141,7 @@ exports.addComment = async(ticketId, comment) => {
});
return response.data;
}catch(e){
- fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify("*** addComment:\n" + e, null, 3));
}
}
@@ -166,7 +166,7 @@ exports.removeComment = async(ticketId, commentId) => {
});
return response.data;
}catch(e){
- fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify("*** removeComment:\n" + e, null, 3));
}
}
@@ -185,6 +185,6 @@ exports.getUsers = async(ticketId) => {
});
return response.data;
}catch(e){
- fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ fs.appendFileSync(__dirname + "/../logs/logs.json", JSON.stringify("*** getUsers:\n" + e, null, 3));
}
}
\ No newline at end of file
diff --git a/lib/utils.js b/lib/utils.js
index 467d638..c56759a 100644
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -8,54 +8,66 @@ const conf = JSON.parse(fs.readFileSync(dir + "/../data/conf.json"));
const glpiUrl = conf.glpiConfig.apiurl.replace("apirest.php", "");
exports.htmlToText = async (text) => {
- let temp = html.convert(he.decode(text), {preserveNewlines: true});
- textArray = temp.split('\n');
- for(let i in textArray){
- if(textArray[i].indexOf("[/front/document.send.php?docid=") >= 0){
- delete textArray[i-1];
- delete textArray[i];
+ try{
+ let temp = html.convert(he.decode(text), {preserveNewlines: true});
+ textArray = temp.split('\n');
+ for(let i in textArray){
+ if(textArray[i].indexOf("[/front/document.send.php?docid=") >= 0){
+ delete textArray[i-1];
+ delete textArray[i];
+ }
}
- }
- let messageText = '';
- for(let k in textArray){
- if(textArray[k][0] != '>' && textArray[k].trim() && textArray[k].indexOf('ts@krtech.ru писал') == -1 && textArray[k].indexOf('cellpadding="0"') == -1){
- messageText += textArray[k].trim().replace(/[<>]/g, '') + ' ';
+ let messageText = '';
+ for(let k in textArray){
+ if(textArray[k][0] != '>' && textArray[k].trim() && textArray[k].indexOf('ts@krtech.ru писал') == -1 && textArray[k].indexOf('cellpadding="0"') == -1){
+ messageText += textArray[k].trim().replace(/[<>]/g, '') + ' ';
+ }
}
+ return messageText.replace(/\[.*?\]/g, '');
+ }catch(e){
+ fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify("*** htmlToText:\n" + e, null, 3));
}
- return messageText.replace(/\[.*?\]/g, '');
}
exports.parseMessageText = async (message, messageData, ticketId) => {
- let color = await this.getTicketColor(messageData.data[ticketId].status);
- text = message.text.split('\n');
- messageText = `${color} ЗАЯВКА №${ticketId}\n\n`;
- for(let i = 2; i < text.length; i++){
- if(text[i].indexOf(':') >= 0) messageText += `${text[i].replace(':', ':')}\n`;
- }
- if(text[text.length - 1].indexOf("Читать дальше") >= 0){
- messageText = `${messageText.replace('Читать дальше', '')}\nЧитать дальше`;
- }
- return messageText;
+ try{
+ let color = await this.getTicketColor(messageData.data[ticketId].status);
+ text = message.text.split('\n');
+ messageText = `${color} ЗАЯВКА №${ticketId}\n\n`;
+ for(let i = 2; i < text.length; i++){
+ if(text[i].indexOf(':') >= 0) messageText += `${text[i].replace(':', ':')}\n`;
+ }
+ if(text[text.length - 1].indexOf("Читать дальше") >= 0){
+ messageText = `${messageText.replace('Читать дальше', '')}\nЧитать дальше`;
+ }
+ return messageText;
+ }catch(e){
+ fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify("*** parseMessageText:\n" + e, null, 3));
+ }
}
exports.createThread = async (bot, messageData, ticketId, title) => {
- let td = messageData.data[ticketId];
- let thread = await bot.telegram.createForumTopic(conf.supportChatId, title, {
- icon_custom_emoji_id: '5357315181649076022'
- });
- let status = td.status;
- messageData.data[ticketId].threadId = thread.message_thread_id;
- let inKeyboard = await this.getKeyboardFromStatus(status);
- await this.editMessageMarkup(bot, td.messageId, inKeyboard);
- let msg = await bot.telegram.copyMessage(conf.supportChatId, conf.supportChatId, td.messageId, {
- parse_mode: 'HTML',
- disable_notification: true,
- message_thread_id: thread.message_thread_id,
- reply_markup: { inline_keyboard: inKeyboard }
- });
- await bot.telegram.pinChatMessage(conf.supportChatId, msg.message_id, { disable_notification: true });
- messageData.data[ticketId].pinMessageId = msg.message_id;
- fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
+ try{
+ let td = messageData.data[ticketId];
+ let thread = await bot.telegram.createForumTopic(conf.supportChatId, title, {
+ icon_custom_emoji_id: '5357315181649076022'
+ });
+ let status = td.status;
+ messageData.data[ticketId].threadId = thread.message_thread_id;
+ let inKeyboard = await this.getKeyboardFromStatus(status);
+ await this.editMessageMarkup(bot, td.messageId, inKeyboard);
+ let msg = await bot.telegram.copyMessage(conf.supportChatId, conf.supportChatId, td.messageId, {
+ parse_mode: 'HTML',
+ disable_notification: true,
+ message_thread_id: thread.message_thread_id,
+ reply_markup: { inline_keyboard: inKeyboard }
+ });
+ await bot.telegram.pinChatMessage(conf.supportChatId, msg.message_id, { disable_notification: true });
+ messageData.data[ticketId].pinMessageId = msg.message_id;
+ fs.writeFileSync(dir + "/../data/messageData.json", JSON.stringify(messageData, null, 3));
+ }catch(e){
+ fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify("*** createThread:\n" + e, null, 3));
+ }
}
exports.closeThread = async (bot, messageData, ticketId) => {
@@ -93,7 +105,7 @@ exports.editMessageText = async (bot, messageId, messageText, keyboard) => {
reply_markup: {inline_keyboard: keyboard}
});
}catch(e){
- fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ //fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify(e, null, 3));
}
}
@@ -101,7 +113,7 @@ exports.editMessageMarkup = async (bot, messageId, keyboard) => {
try{
await bot.telegram.editMessageReplyMarkup(conf.supportChatId, messageId, undefined, {inline_keyboard: keyboard});
}catch(e){
- fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify(e, null, 3));
+ //fs.appendFileSync(dir + "/../logs/logs.json", JSON.stringify(e, null, 3));
}
}