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