최현준

동기식 처리 추가 및 함수 정리

Showing 1 changed file with 153 additions and 153 deletions
...@@ -6,205 +6,205 @@ const PAPAGO_URL = 'https://openapi.naver.com/v1/papago/n2mt' ...@@ -6,205 +6,205 @@ const PAPAGO_URL = 'https://openapi.naver.com/v1/papago/n2mt'
6 const PAPAGO_D_URL = 'https://openapi.naver.com/v1/papago/detectLangs' 6 const PAPAGO_D_URL = 'https://openapi.naver.com/v1/papago/detectLangs'
7 const PAPAGO_ID = 'tA41WEd_nbzy0nZcUQks' 7 const PAPAGO_ID = 'tA41WEd_nbzy0nZcUQks'
8 const PAPAGO_SECRET = '6DHwov9gg2' 8 const PAPAGO_SECRET = '6DHwov9gg2'
9 -// const fs = require('fs');
10 -// const path = require('path');
11 -// const HTTPS = require('https');
12 -// const domain = "www.theia17.tk"
13 -// const sslport = 23023;
14 const bodyParser = require('body-parser'); 9 const bodyParser = require('body-parser');
15 -//const mymodule = require('./modules/modules.js');
16 var app = express(); 10 var app = express();
17 - 11 +var async = require('async');
18 -var ln = 'en'; //default value en 12 +const { resolve } = require('path');
19 -var tempc = 'ko'; 13 +var Language_Detect_Array = new Array();
20 -var lnDetec = new Array(); 14 +var User_Info_Array = new Array();
21 -var userinfo = new Array(); 15 +Language_Detect_Array[0] =
22 -lnDetec[0] =
23 { 16 {
24 - "InLn" : '영어', 17 + "Message" : '영어',
25 - "PaLn" : 'en' 18 + "PapagoLanguage" : 'en'
26 } 19 }
27 -lnDetec[1] = 20 +Language_Detect_Array[1] =
28 { 21 {
29 - "InLn" : '일본어', 22 + "Message" : '일본어',
30 - "PaLn" : 'ja' 23 + "PapagoLanguage" : 'ja'
31 } 24 }
32 -lnDetec[2] = 25 +Language_Detect_Array[2] =
33 { 26 {
34 - "InLn" : '프랑스어', 27 + "Message" : '프랑스어',
35 - "PaLn" : 'fr' 28 + "PapagoLanguage" : 'fr'
36 } 29 }
37 - 30 +Language_Detect_Array[3] =
38 -userinfo[0] =
39 { 31 {
40 - userId : 'userId', 32 + "Message" : '한국어',
41 - userInLn : 'userInLn', 33 + "PapagoLanguage" : 'ko'
42 - userPaLn : 'userPaLn'
43 } 34 }
44 -userinfo[1] = 35 +
36 +User_Info_Array[0] =
45 { 37 {
46 - userId : 'userId', 38 + UserId : null,
47 - userInLn : 'userInLn', 39 + UserPapagoLanguage : ''
48 - userPaLn : 'userPaLn'
49 } 40 }
50 41
51 -
52 app.use(bodyParser.json()); 42 app.use(bodyParser.json());
53 app.post('/hook', function (req, res) { 43 app.post('/hook', function (req, res) {
54 44
55 var eventObj = req.body.events[0]; 45 var eventObj = req.body.events[0];
56 - var source = eventObj.source; 46 + var message = eventObj.message.text;
57 - var message = eventObj.message; 47 + var replyToken = eventObj.replyToken;
58 - var InputMessage = message.text; // input message 48 + var userid = eventObj.source.userId;
59 - var LnCh = 1; // Language change attempt => value 0;
60 - var user_id = eventObj.source.userId;
61 - var NumberLock = 0;
62 49
63 - // request log 50 + AsyncFunction(message, replyToken, userid);
64 - // console.log('======================', new Date() ,'======================');
65 - // console.log('[request]', req.body);
66 - // console.log('[request source] ', eventObj.source);
67 - console.log('userId: ', eventObj.source.userId);
68 - // console.log('[request message]', eventObj.message);
69 - // console.log('my meesage: ', message.text);
70 - // console.log('my ip check: ', req.ip);
71 -
72 - NumberLock = search_user_info(user_id);
73 - console.log('NumberLock 값은?', NumberLock);
74 - LnCh = detect_language_change(InputMessage, NumberLock);
75 -
76 - if (LnCh)
77 - {
78 - detector(message.text, NumberLock);
79 - trans(eventObj.replyToken, eventObj.message.text, NumberLock);
80 - }
81 51
82 res.sendStatus(200); 52 res.sendStatus(200);
83 }); 53 });
84 54
55 +async function AsyncFunction(message, replyToken, userid)
56 +{
57 + var User_Location = search_user_info(userid);
58 + var DetectLanguage = await detector(message);
59 + if(DetectLanguage != 'ko') var TransToKoreanMessage = await trans(DetectLanguage, message, 'ko'); else var TransToKoreanMessage = message;
60 + var DetectLanguageChange = Detect_Papago_Language_Change(TransToKoreanMessage, User_Location);
61 + if(DetectLanguage != User_Info_Array[User_Location].UserPapagoLanguage) var TransToUserSettingMessage = await trans(DetectLanguage, message, User_Info_Array[User_Location].UserPapagoLanguage);
62 + var Messaging = await messaging(TransToUserSettingMessage, replyToken, DetectLanguageChange);
63 + console.log("log-Message: ", Messaging);
64 +}
85 65
86 -// try { 66 +function detector (message)
87 -// const option = { 67 +//언어 감지
88 -// ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'), 68 +{
89 -// key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(), 69 + return new Promise(function(resolve, reject)
90 -// cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(), 70 + {
91 -// }; 71 + request.post
92 - 72 + (
93 -// HTTPS.createServer(option, app).listen(sslport, () => { 73 + {
94 -// console.log(`[HTTPS] Server is started on port ${sslport}`); 74 + url: PAPAGO_D_URL,
95 -// }); 75 + headers:
96 -// } catch (error) { 76 + {
97 -// console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.'); 77 + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
98 -// console.log(error); 78 + 'X-Naver-Client-Id': `${PAPAGO_ID}`,
99 -// } 79 + 'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
100 - 80 + },
101 -function detect_language_change (InputMessage, NumberLock) 81 + body: 'query='+message,
82 + json:true
83 + },(error, response, body) =>
84 + {
85 + if(!error && response.statusCode == 200)
86 + {
87 + var DetectLanguage = body.langCode;
88 + resolve(DetectLanguage);
89 + }
90 + else
91 + {
92 + reject(new Error('Request is failed'));
93 + }
94 + }
95 + )
96 + })
97 +}
98 +
99 +function messaging(message, replyToken, DetectLanguageChange)
100 +//메시지 보내기
102 { 101 {
103 - for(var i in lnDetec) // Detect Language change 102 + return new Promise(function(resolve, reject)
104 { 103 {
105 - if (InputMessage == lnDetec[i].InLn) 104 + if(DetectLanguageChange)
106 - { 105 + request.post
107 - userinfo[NumberLock].userPaLn = lnDetec[i].PaLn; 106 + (
108 - return 0; 107 + {
109 - } 108 + url: TARGET_URL,
110 - else if ( i == lnDetec.length-1) 109 + headers:
111 - { 110 + {
112 - return 1; 111 + 'Authorization': `Bearer ${TOKEN}`
113 - } 112 + },
114 - } 113 + json:
114 + {
115 + "replyToken":replyToken,
116 + "messages":
117 + [
118 + {
119 + "type":"text",
120 + "text":message
121 + }
122 + ]
123 +
124 + }
125 + }, (error, response, body) =>
126 + {
127 + if(!error && response.statusCode == 200)
128 + resolve('정상적으로 전송 되었습니다.');
129 + }
130 + );
131 + })
132 +}
133 +
134 +function trans (DetectLanguage, message, TransLanguage)
135 +//언어 번역
136 +{
137 + return new Promise(function(resolve, reject)
138 + {
139 + request.post(
140 + {
141 + url: PAPAGO_URL,
142 + headers:
143 + {
144 + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
145 + 'X-Naver-Client-Id': `${PAPAGO_ID}`,
146 + 'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
147 + },
148 + body: 'source='+DetectLanguage+'&target='+TransLanguage+'&text='+message,
149 + json:true
150 + },(error, response, body) =>
151 + {
152 + if(!error && response.statusCode == 200)
153 + {
154 + var transMessage = body.message.result.translatedText;
155 + console.log('transMessage: ', transMessage);
156 + resolve(transMessage);
157 + }
158 + }
159 + );
160 + })
115 } 161 }
116 162
117 -function search_user_info (user_id) 163 +function search_user_info (userid)
164 +//유저 생성 또는 위치 찾기
118 { 165 {
119 - for(var i in userinfo) 166 + for(var i in User_Info_Array)
120 { 167 {
121 - if (userinfo[i].userId == user_id) 168 + if (User_Info_Array[i].UserId == userid)
122 { 169 {
123 - console.log('동일한 id 존재.'); 170 + //기존 유저
124 return i; 171 return i;
125 break; 172 break;
126 } 173 }
127 - else if ( i == userinfo.length-1) 174 + else if ( i == User_Info_Array.length-1)
128 { 175 {
129 - console.log('동일한 것이 존재하지 않습니다. 새로운 개체를 생성합니다.'); 176 + //새로운 유저
130 - userinfo[userinfo.length] = 177 + User_Info_Array[User_Info_Array.length] =
131 { 178 {
132 - userId : user_id, 179 + UserId : userid,
133 - userInLn : 'en', 180 + UserPapagoLanguage : 'en'
134 - userPaLn : 'en' //default value
135 } 181 }
136 - return userinfo.length-1; 182 + return User_Info_Array.length-1;
137 } 183 }
138 } 184 }
139 } 185 }
140 186
141 -function detector (message, NumberLock) 187 +function Detect_Papago_Language_Change (TransToKoreanMessage, User_Location)
188 +//번역 언어 변경 감지
142 { 189 {
143 - request.post 190 + console.log('user의 정보는',User_Info_Array[User_Location]);
144 - ( 191 + for(var i in Language_Detect_Array) // Detect Language change
192 + {
193 + if (TransToKoreanMessage == Language_Detect_Array[i].Message)
145 { 194 {
146 - url: PAPAGO_D_URL, 195 + //언어 변경 감지o
147 - headers: 196 + User_Info_Array[User_Location].UserPapagoLanguage = Language_Detect_Array[i].PapagoLanguage;
148 - { 197 + return 0;
149 - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 198 + break;
150 - 'X-Naver-Client-Id': `${PAPAGO_ID}`, 199 + }
151 - 'X-Naver-Client-Secret': `${PAPAGO_SECRET}` 200 + else if ( i == Language_Detect_Array.length-1)
152 - },
153 - body: 'query='+message,
154 - json:true
155 - },(error, response, body) =>
156 { 201 {
157 - if(!error && response.statusCode == 200) 202 + //언어 변경 감지x
158 - { 203 + return 1;
159 - console.log('[넘어온 메시지]', message);
160 - console.log('[객체 정보 확인]',body);
161 - console.log('[user 객체 정보 확인]',userinfo[NumberLock]);
162 - //tempc = body.langCode;
163 - //userinfo에 user입력 language언어 감지 및 저장
164 - userinfo[NumberLock].userInLn = body.langCode;
165 - }
166 } 204 }
167 - ) 205 + }
168 } 206 }
169 207
170 -function trans (replyToken, message, NumberLock) {
171 -
172 - request.post(
173 - {
174 - url: PAPAGO_URL,
175 - headers: {
176 - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
177 - 'X-Naver-Client-Id': `${PAPAGO_ID}`,
178 - 'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
179 - },
180 - //body: 'source=ko&target='+ln+'&text=' + message,
181 - body: 'source='+userinfo[NumberLock].userInLn+'&target='+userinfo[NumberLock].userPaLn+'&text='+message,
182 - json:true
183 - },(error, response, body) => {
184 - if(!error && response.statusCode == 200) {
185 - console.log('[객체 정보 확인 in trans]',body.message);
186 - var transMessage = body.message.result.translatedText;
187 - request.post(
188 - {
189 - url: TARGET_URL,
190 - headers: {
191 - 'Authorization': `Bearer ${TOKEN}`
192 - },
193 - json: {
194 - "replyToken":replyToken,
195 - "messages":[
196 - {
197 - "type":"text",
198 - "text":transMessage
199 - }
200 - ]
201 - }
202 - },(error, response, body) => {
203 - console.log(body)
204 - });
205 - }
206 - });
207 -}
208 app.listen(3000, function () { 208 app.listen(3000, function () {
209 console.log('Linebot listening on port 3000!'); 209 console.log('Linebot listening on port 3000!');
210 }); 210 });
...\ No newline at end of file ...\ No newline at end of file
......