app.js 3.35 KB
var express = require("express");
const line = require("@line/bot-sdk");
var request = require("request");

var app = express();
const config = require("./config.js");

var translate_api_url = "https://openapi.naver.com/v1/papago/n2mt"; //번역 api_url
var languagedetect_api_url = "https://openapi.naver.com/v1/papago/detectLangs"; //언어감지 api_url

// about the middleware, please refer to doc
app.get("/", function(req, res) {
  res.send("!");
});

// register a webhook handler with middleware
app.post("/webhook", line.middleware(config.line_config), (req, res) => {
  // res.status(200).end();
  Promise.all(req.body.events.map(handleEvent)).then(result =>
    res.json(result)
  );
});

const client = new line.Client(config.line_config);

//event handler
function handleEvent(event) {
  console.log("event.message.text");
  if (event.type !== "message" || event.message.type !== "text") {
    console.log("2");
    // ignore non-text-message event
    return Promise.resolve(null);
  }
  return new Promise(function(resolve, reject) {
    console.log("3");
    //언어 감지 option
    var detect_options = {
      url: languagedetect_api_url,
      form: { query: event.message.text },
      headers: config.naver_header
    };

    //papago 언어 감지
    request.post(detect_options, function(error, response, body) {
      console.log("4");
      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: "" };

        //언어 감지가 제대로 됐는지 확인
        console.log(detect_body.langCode);

        //번역은 한국어->영어 / 영어->한국어만 지원
        if (detect_body.langCode == "ko" || detect_body.langCode == "en") {
          console.log("5");
          source = detect_body.langCode == "ko" ? "ko" : "en";
          target = source == "ko" ? "en" : "ko";
          //papago 번역 option
          var options = {
            url: translate_api_url,
            // 한국어(source : ko), 영어(target: en), 카톡에서 받는 메시지(text)
            form: { source: source, target: target, text: event.message.text },
            headers: config.naver_header
          };

          // Naver Post API
          request.post(options, function(error, response, body) {
            // Translate API Success
            if (!error && response.statusCode == 200) {
              // JSON
              var objBody = JSON.parse(response.body);
              // Message 잘 찍히는지 확인

              result.text = objBody.message.result.translatedText;
              console.log(result.text);
              //번역된 문장 보내기
              client
                .replyMessage(event.replyToken, result)
                .then(resolve)
                .catch(reject);
            }
          });
        }
        // 메시지의 언어가 영어 또는 한국어가 아닐 경우
        else {
          result.text =
            "언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.";
          client
            .replyMessage(event.replyToken, result)
            .then(resolve)
            .catch(reject);
        }
      }
    });
  });
}

app.listen(3000, function() {
  console.log("Linebot listening on port 3000!");
});