최현준

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

Showing 1 changed file with 133 additions and 133 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 -
63 - // request log
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 49
76 - if (LnCh) 50 + AsyncFunction(message, replyToken, userid);
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'),
89 -// key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(),
90 -// cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(),
91 -// };
92 -
93 -// HTTPS.createServer(option, app).listen(sslport, () => {
94 -// console.log(`[HTTPS] Server is started on port ${sslport}`);
95 -// });
96 -// } catch (error) {
97 -// console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
98 -// console.log(error);
99 -// }
100 -
101 -function detect_language_change (InputMessage, NumberLock)
102 { 68 {
103 - for(var i in lnDetec) // Detect Language change 69 + return new Promise(function(resolve, reject)
104 { 70 {
105 - if (InputMessage == lnDetec[i].InLn) 71 + request.post
72 + (
106 { 73 {
107 - userinfo[NumberLock].userPaLn = lnDetec[i].PaLn; 74 + url: PAPAGO_D_URL,
108 - return 0; 75 + headers:
76 + {
77 + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
78 + 'X-Naver-Client-Id': `${PAPAGO_ID}`,
79 + 'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
80 + },
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);
109 } 89 }
110 - else if ( i == lnDetec.length-1) 90 + else
111 { 91 {
112 - return 1; 92 + reject(new Error('Request is failed'));
113 } 93 }
114 } 94 }
95 + )
96 + })
115 } 97 }
116 98
117 -function search_user_info (user_id) 99 +function messaging(message, replyToken, DetectLanguageChange)
100 +//메시지 보내기
118 { 101 {
119 - for(var i in userinfo) 102 + return new Promise(function(resolve, reject)
120 { 103 {
121 - if (userinfo[i].userId == user_id) 104 + if(DetectLanguageChange)
105 + request.post
106 + (
122 { 107 {
123 - console.log('동일한 id 존재.'); 108 + url: TARGET_URL,
124 - return i; 109 + headers:
125 - break; 110 + {
126 - } 111 + 'Authorization': `Bearer ${TOKEN}`
127 - else if ( i == userinfo.length-1) 112 + },
113 + json:
128 { 114 {
129 - console.log('동일한 것이 존재하지 않습니다. 새로운 개체를 생성합니다.'); 115 + "replyToken":replyToken,
130 - userinfo[userinfo.length] = 116 + "messages":
117 + [
131 { 118 {
132 - userId : user_id, 119 + "type":"text",
133 - userInLn : 'en', 120 + "text":message
134 - userPaLn : 'en' //default value
135 } 121 }
136 - return userinfo.length-1; 122 + ]
123 +
137 } 124 }
125 + }, (error, response, body) =>
126 + {
127 + if(!error && response.statusCode == 200)
128 + resolve('정상적으로 전송 되었습니다.');
138 } 129 }
130 + );
131 + })
139 } 132 }
140 133
141 -function detector (message, NumberLock) 134 +function trans (DetectLanguage, message, TransLanguage)
135 +//언어 번역
142 { 136 {
143 - request.post 137 + return new Promise(function(resolve, reject)
144 - (
145 { 138 {
146 - url: PAPAGO_D_URL, 139 + request.post(
140 + {
141 + url: PAPAGO_URL,
147 headers: 142 headers:
148 { 143 {
149 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 144 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
150 'X-Naver-Client-Id': `${PAPAGO_ID}`, 145 'X-Naver-Client-Id': `${PAPAGO_ID}`,
151 'X-Naver-Client-Secret': `${PAPAGO_SECRET}` 146 'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
152 }, 147 },
153 - body: 'query='+message, 148 + body: 'source='+DetectLanguage+'&target='+TransLanguage+'&text='+message,
154 json:true 149 json:true
155 },(error, response, body) => 150 },(error, response, body) =>
156 { 151 {
157 if(!error && response.statusCode == 200) 152 if(!error && response.statusCode == 200)
158 { 153 {
159 - console.log('[넘어온 메시지]', message); 154 + var transMessage = body.message.result.translatedText;
160 - console.log('[객체 정보 확인]',body); 155 + console.log('transMessage: ', transMessage);
161 - console.log('[user 객체 정보 확인]',userinfo[NumberLock]); 156 + resolve(transMessage);
162 - //tempc = body.langCode;
163 - //userinfo에 user입력 language언어 감지 및 저장
164 - userinfo[NumberLock].userInLn = body.langCode;
165 } 157 }
166 } 158 }
167 - ) 159 + );
160 + })
168 } 161 }
169 162
170 -function trans (replyToken, message, NumberLock) { 163 +function search_user_info (userid)
171 - 164 +//유저 생성 또는 위치 찾기
172 - request.post( 165 +{
166 + for(var i in User_Info_Array)
173 { 167 {
174 - url: PAPAGO_URL, 168 + if (User_Info_Array[i].UserId == userid)
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 { 169 {
189 - url: TARGET_URL, 170 + //기존 유저
190 - headers: { 171 + return i;
191 - 'Authorization': `Bearer ${TOKEN}` 172 + break;
192 - }, 173 + }
193 - json: { 174 + else if ( i == User_Info_Array.length-1)
194 - "replyToken":replyToken,
195 - "messages":[
196 { 175 {
197 - "type":"text", 176 + //새로운 유저
198 - "text":transMessage 177 + User_Info_Array[User_Info_Array.length] =
178 + {
179 + UserId : userid,
180 + UserPapagoLanguage : 'en'
199 } 181 }
200 - ] 182 + return User_Info_Array.length-1;
183 + }
184 + }
185 +}
186 +
187 +function Detect_Papago_Language_Change (TransToKoreanMessage, User_Location)
188 +//번역 언어 변경 감지
189 +{
190 + console.log('user의 정보는',User_Info_Array[User_Location]);
191 + for(var i in Language_Detect_Array) // Detect Language change
192 + {
193 + if (TransToKoreanMessage == Language_Detect_Array[i].Message)
194 + {
195 + //언어 변경 감지o
196 + User_Info_Array[User_Location].UserPapagoLanguage = Language_Detect_Array[i].PapagoLanguage;
197 + return 0;
198 + break;
199 + }
200 + else if ( i == Language_Detect_Array.length-1)
201 + {
202 + //언어 변경 감지x
203 + return 1;
201 } 204 }
202 - },(error, response, body) => {
203 - console.log(body)
204 - });
205 } 205 }
206 - });
207 } 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
......