app.js
5.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
var express = require('express');
const request = require('request');
//--------------- Line messanger modules -------------------
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TOKEN = 'LFi+FvOOFOydz0EKN22WRnQyiilnEiyxe2HVV1WrI54Jnght6+Gga07m7pxqSQltBJG2AV2lYnYOAk4TqxzZFKW9R36CJcQs+NaNEiNKJtgBfT/t3tEta/J6GtXxGz/DqdHnfZqSSfLFpXzun/ITTwdB04t89/1O/w1cDnyilFU='
//----------------------------------------------------------
//--------------- Translating moudules ----------------------
const PAPAGO_URL = 'https://openapi.naver.com/v1/papago/n2mt'
const PAPAGO_ID = 'r_kuebFKCqBeL3SI_dFb'
const PAPAGO_SECRET = 'Wdz2tudrzB'
var trans = require('./trans/trans')
var trans_counter = 0;
//-----------------------------------------------------------
// ---------- Shopping modules -------------
var puppeteer = require('puppeteer');
var gmarket = require('./crawling/gmarket');
var coupang = require('./crawling/coupang');
var auction = require('./crawling/auction');
var shopping = 0; // in shopping menu identifier 0 = idle, 1 = shop selecting, 2 = select complete
var shop_select = undefined // shopping-site identifier
//------------------------------------------
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "www.chatbotshin.tk"
const sslport = 23023;
const bodyParser = require('body-parser');
var app = express();
//=============== middlewares ================
app.use(bodyParser.json());
//============== Utility Selector =========================================
app.post('/hook', function (req, res) {
//-------- request values ---------
var eventObj = req.body.events[0];
var source = eventObj.source;
var message = eventObj.message;
//---------------------------------
//---------------- request log------------------------------------------------
console.log('======================', new Date() ,'======================');
console.log('[request]', req.body);
console.log('[request source] ', eventObj.source);
console.log('[request message]', eventObj.message);
//----------------------------------------------------------------------------
//--------------- Cancel ----------------------------------------------
if(message.text.includes('/취소')){
replying(eventObj.replyToken, '진행중인 기능 및 메뉴를 종료합니다.');
shopping = 0;
shop_select = undefined
trans_counter = 0;
}
//---------------------------------------------------------------------
//----------------------- Translation which includes language-selector -----------------------------------------------
if(eventObj.message.text.includes('/번역')){
console.log('번역캐치: ', eventObj.message.text);
trans_counter = trans.trans_lng_selector(eventObj.message.text); // after this trans_trigger = 1
}
else if(trans_counter==1){
trans_counter = trans.translating(eventObj.replyToken, eventObj.message.text); // after this trans_trigger = 0
}
//--------------------------------------------------------------------------------------------------------------------
//---------------------- linking Shoppingcart crawler ----------------------------------------------------------------
if(message.text == '/쇼핑' ){
replying(eventObj.replyToken, '쇼핑을 선택하셨습니다.\n원하시는 쇼핑몰 사이트를 선택하세요.\n현재 제공되는 사이트는 \n\n/g마켓\n/옥션\n/쿠팡\n\n입니다.\n/취소 로 해당 메뉴에서 퇴장이 가능합니다.');
shopping = 1; // 다음 메세지에 선택하지 못할 경우 0으로 되돌릴 필요가있음
}
if(shopping == 1){
switch(message.text){
case '/g마켓': break;
case '/옥션': break;
case '/쿠팡': break;
default: shopping == 0;
}
}
//--------------------------------------------------------------------------------------------------------------------
res.sendStatus(200);
});
//================== Just replying specific messages needed ===================================
function replying(replyToken, sp_message){ // sp_message is message(string) that depends on the situation that user selects
request.post(
{
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":replyToken,
"messages":[
{
"type":"text",
"text":sp_message // replying message
}
]
}
},(error, response, body) => {
console.log(body)
trans_trigger=0;
return trans_trigger;
});
}
//==================== Creating Server : Port = val sslport ===============================
try {
const option = {
ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'),
key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(),
cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(),
};
HTTPS.createServer(option, app).listen(sslport, () => {
console.log(`[HTTPS] Server is started on port ${sslport}`);
});
} catch (error) {
console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
console.log(error);
}