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 | ... | ... |
-
Please register or login to post a comment