app.js
3.46 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
const TelegramBot = require('node-telegram-bot-api');
// replace the value below with the Telegram token you receive from @BotFather
const token = '825631426:AAE9tgw89kOZyLTre8DSDaObFQeVx7q41gw';
// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, { polling: true });
var request = require('request');
// Translation api url
const translate_api_url = 'https://openapi.naver.com/v1/papago/n2mt';
// Language detection api url
const languagedetect_api_url = 'https://openapi.naver.com/v1/papago/detectLangs'
// Naver papago client id & secret
const papago_client_id = 'lA0rGxQllAfrlOkGGNnK';
const papago_client_secret = 'u3fykDlNb0';
// /echo [whatever]
bot.onText(/\/echo (.+)/, (msg, match) => {
// 'msg' is the received Message from Telegram
// 'match' is the result of executing the regexp above on the text content
// of the message
const chatId = msg.chat.id;
const resp = match[1]; // the captured "whatever"
// send back the matched "whatever" to the chat
bot.sendMessage(chatId, resp);
});
// [Any normal message which is not a command (not starting with '/')]
bot.onText(/(?!\/)(.+)/, (msg, match) => {
const chatId = msg.chat.id;
const chatType = msg.chat.type;
const received_msg = match[1];
// Ignore if we are not on a private chat,
// since direct translation is to be used only on private chats.
if (chatType != 'private') {
return;
}
// Language detection options
var lang_detect_options = {
url: languagedetect_api_url,
form: { 'query': received_msg },
headers: {
'X-Naver-Client-Id': papago_client_id,
'X-Naver-Client-Secret': papago_client_secret
}
};
// Papago language detection
request.post(lang_detect_options, function (error, response, body) {
console.log(response.statusCode);
if (!error && response.statusCode == 200) {
var detect_body = JSON.parse(response.body);
var source = '';
var target = '';
var result = { type: 'text', text: '' };
// Check if detection was successful
console.log('Language detected: ' + detect_body.langCode);
// Translate using papago
// Target defaults to English for Korean source, or Korean for all other langs
if (detect_body.langCode != 'unk') {
source = detect_body.langCode;
target = source == 'ko' ? 'en' : 'ko';
// Papago translation options
var translate_options = {
url: translate_api_url,
form: {
'source': source, // Before translation
'target': target, // After translation
'text': received_msg // Message to translate
},
headers: {
'X-Naver-Client-Id': papago_client_id,
'X-Naver-Client-Secret': papago_client_secret
}
};
// Send translatation request
request.post(translate_options, function (error, response, body) {
// On success
if (!error && response.statusCode == 200) {
var objBody = JSON.parse(response.body);
result.text = objBody.message.result.translatedText;
// Send translated message
console.log('Before: ' + received_msg);
console.log('After: ' + result.text);
bot.sendMessage(chatId, result.text);
}
});
}
// Language not detected
else {
result.text = '언어를 감지할 수 없습니다.';
bot.sendMessage(chatId, result.text);
}
}
});
});