app.js 6.46 KB
var express = require('express');
const request = require('request');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TOKEN = 'm79m/yBsTVzZeC9pYqSLzEL00Hp0HqsVE/0ZsZxW2HNAwdnb9TwDgBcOyCn3/aJASXsE8ekpyGg4Gts/4r8LO72OTZec9Np5Mh9g1vrgyDj5theWv4g2miE5F1Cqax4X3waj1aIzDGHcUZdHD6fQvAdB04t89/1O/w1cDnyilFU='
const PAPAGO_URL = 'https://openapi.naver.com/v1/papago/n2mt'
const PAPAGO_D_URL = 'https://openapi.naver.com/v1/papago/detectLangs'
const PAPAGO_ID = 'tA41WEd_nbzy0nZcUQks'
const PAPAGO_SECRET = '6DHwov9gg2'
// const fs = require('fs');
// const path = require('path');
// const HTTPS = require('https');
// const domain = "www.theia17.tk"
// const sslport = 23023;
const bodyParser = require('body-parser');
//const mymodule = require('./modules/modules.js');
var app = express();

var ln = 'en'; //default value en
var tempc = 'ko';
var lnDetec = new Array();
var userinfo = new Array();
lnDetec[0] =
{
    "InLn" : '영어',
    "PaLn" : 'en'
}
lnDetec[1] =
{
    "InLn" : '일본어',
    "PaLn" : 'ja'
}
lnDetec[2] =
{
    "InLn" : '프랑스어',
    "PaLn" : 'fr'
}

userinfo[0] =
{
    userId : 'userId',
    userInLn : 'userInLn',
    userPaLn : 'userPaLn'
}
userinfo[1] =
{
    userId : 'userId',
    userInLn : 'userInLn',
    userPaLn : 'userPaLn'
}


app.use(bodyParser.json());
app.post('/hook', function (req, res) {

    var eventObj = req.body.events[0];
    var source = eventObj.source;
    var message = eventObj.message;
    var InputMessage = message.text; // input message
    var LnCh = 1; // Language change attempt => value 0;
    var user_id = eventObj.source.userId;
    var NumberLock = 0;
    
    // request log
    // console.log('======================', new Date() ,'======================');
    // console.log('[request]', req.body);
    // console.log('[request source] ', eventObj.source);
    console.log('userId: ', eventObj.source.userId);
    // console.log('[request message]', eventObj.message);
    // console.log('my meesage: ', message.text);
    // console.log('my ip check: ', req.ip);

    NumberLock = search_user_info(user_id);
    console.log('NumberLock 값은?', NumberLock);
    LnCh = detect_language_change(InputMessage, NumberLock);

    if (LnCh)
    {
        detector(message.text, NumberLock);
        trans(eventObj.replyToken, eventObj.message.text, NumberLock);
    }

    res.sendStatus(200);
});


// try {
//     const option = {
//       ca: fs.readFileSync('/etc/letsencrypt/live/' + domain +'/fullchain.pem'),
//       key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/privkey.pem'), 'utf8').toString(),
//       cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain +'/cert.pem'), 'utf8').toString(),
//     };
  
//     HTTPS.createServer(option, app).listen(sslport, () => {
//       console.log(`[HTTPS] Server is started on port ${sslport}`);
//     });
//   } catch (error) {
//     console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
//     console.log(error);
//   }
  
function detect_language_change (InputMessage, NumberLock)
{
    for(var i in lnDetec) // Detect Language change 
    {
        if (InputMessage == lnDetec[i].InLn)
        {
            userinfo[NumberLock].userPaLn = lnDetec[i].PaLn;
            return 0;
        }
        else if ( i == lnDetec.length-1)
        {
            return 1;
        }
    }
}

function search_user_info (user_id)
{
    for(var i in userinfo)
    {
        if (userinfo[i].userId == user_id)
        {
            console.log('동일한 id 존재.');
            return i;
            break;
        }
        else if ( i == userinfo.length-1)
        {
            console.log('동일한 것이 존재하지 않습니다. 새로운 개체를 생성합니다.');
            userinfo[userinfo.length] = 
            {
                userId : user_id,
                userInLn : 'en', 
                userPaLn : 'en' //default value
            }
            return userinfo.length-1;
        }
    }
}

function detector (message, NumberLock)
{
    request.post
    (
        {
            url: PAPAGO_D_URL,
            headers:
            {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'X-Naver-Client-Id': `${PAPAGO_ID}`,
                'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
            },
            body: 'query='+message,
            json:true
        },(error, response, body) => 
        {
            if(!error && response.statusCode == 200)
            {
                console.log('[넘어온 메시지]', message);
                console.log('[객체 정보 확인]',body);
                console.log('[user 객체 정보 확인]',userinfo[NumberLock]);
                //tempc = body.langCode;
                //userinfo에 user입력 language언어 감지 및 저장
                userinfo[NumberLock].userInLn = body.langCode;
            }
        }
    )
}

function trans (replyToken, message, NumberLock) {

    request.post(
        {
            url: PAPAGO_URL,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'X-Naver-Client-Id': `${PAPAGO_ID}`,
                'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
            },
            //body: 'source=ko&target='+ln+'&text=' + message,
            body: 'source='+userinfo[NumberLock].userInLn+'&target='+userinfo[NumberLock].userPaLn+'&text='+message,
            json:true
        },(error, response, body) => {
            if(!error && response.statusCode == 200) {
                console.log('[객체 정보 확인 in trans]',body.message);
                var transMessage = body.message.result.translatedText;
                request.post(
                    {
                        url: TARGET_URL,
                        headers: {
                            'Authorization': `Bearer ${TOKEN}`
                        },
                        json: {
                            "replyToken":replyToken,
                            "messages":[
                                {
                                    "type":"text",
                                    "text":transMessage
                                }
                            ]
                        }
                    },(error, response, body) => {
                        console.log(body)
                    });
            }
        });
}
  app.listen(3000, function () {
    console.log('Linebot listening on port 3000!');
  });