app.js 3.56 KB
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);
});

// Listen for any kind of message. Translate if it's not a command.
bot.on('message', (msg) => {
  const chatId = msg.chat.id;
  const chatType = msg.chat.type;
  const received_msg = msg.text;

  // Ignore if input is a command or we are not on a private chat,
  // since direct translation is to be used only on private chats.
  if (received_msg[0] == '/' || 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(detect_body.langCode);

      // Translate using papago, only Korean and English are supported atm
      if (detect_body.langCode == 'ko' || detect_body.langCode == 'en') {
        source = detect_body.langCode == 'ko' ? 'ko' : 'en';
        target = source == 'ko' ? 'en' : 'ko';

        // Papago translation options
        var translate_options = {
          url: translate_api_url,
          // 한국어(source : ko), 영어(target: en), 카톡에서 받는 메시지(text)
          form: {
            'source': source, // Translate from source
            'target': target, // to target
            '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(result.text);
            bot.sendMessage(chatId, result.text);
          }
        });
      }
      // Language not detected
      else {
        result.text = '언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.';
        bot.sendMessage(chatId, result.text);
      }
    }
  });
});