reply.js 5.76 KB
var express = require('express');
var tryParse = require('tryparse');
var papago = require('./transmessage.js');
const request = require('request');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply' // reply api
const TOKEN = 'XOyIf8jsoQKq3b1zqxE4wawAoFU2Hz433AO3w8/ye+i6+2KrXpyfFwY0Dk/xhHQLPgtgPTiEP/m4IRW+SlVhdtzfH6c0Lfdw6nJ95QOugHfNWfviAmn5Uojh8LQJeAy21bvaNMCy11f+qgLSRnXmCgdB04t89/1O/w1cDnyilFU='
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
//const domain = "127.0.0.1";
const domain = "2018102191.osschatbot2022.tk"
const sslport = 23023;

var data = require('./getid.js');

const bodyParser = require('body-parser');

var isLeagueInfo = false;
var step = 0;

var currentLeagueID = 0;
var currentTeamID = 0;

data.SetData();

var app = express();
app.use(bodyParser.json());

app.post('/hook', function (req, res) {

    var eventObj = req.body.events[0];
    var source = eventObj.source;
    var message = eventObj.message;

    // request log
    console.log('======================', new Date() ,'======================');
    console.log('[request]', req.body);
    console.log('[request source] ', eventObj.source);
    console.log('[request message]', eventObj.message);
    console.log("Receive Message : ", eventObj.message.text);

    SelectAPI(eventObj, eventObj.message.text);
    
    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 Reply(eventObj,replyMsg){

    request.post(
        {
            url: TARGET_URL,
            headers: {
                'Authorization': `Bearer ${TOKEN}` // 인증정보 : channel token 값을 통해 인증.
            },
            json: {
                "replyToken":eventObj.replyToken, // reply token : 누구한테 보낼 것인지?를 판별하기 위해!
                "messages":[
                    {
                        "type":"text",
                        "text":replyMsg
                    },
                    {
                        "type":"text",
                        "text":"second"
                    }
                ]
            }
        },(error, response, body) => {
            console.log(body);
        });
}

function GetPlayerInfo(playerID, season, eventObj){
    var request = require('request');
    var options = {
        method: 'GET',
        url: 'https://v3.football.api-sports.io/players',  
        qs: {id: playerID, season: season},
        headers: {
            'x-rapidapi-host': 'v3.football.api-sports.io',
            'x-rapidapi-key': '526fc70a2e8b315e9a960ac4b4764191'
        }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
      Reply(eventObj,response.body);
    });
}


function SelectAPI(eventObj, commingMsg){
    if(tryParse.int(commingMsg) != null){ // 리그 선택
        if(step == 0){
            isLeagueInfo = true;
            SelectLeague(tryParse.int(commingMsg));
            Reply(eventObj, SelectLeagueInfoMessage());
        }  
        else if(step == 1 && isLeagueInfo){
            Reply(eventObj, SelectLeagueInfo(tryParse.int(commingMsg)));
        }
        else if(step == 1 && !isLeagueInfo){
            Reply(eventObj, SelectTeamInfo(tryParse.int(commingMsg)));
        }
    }
    else{ // 팀명 입력
        papago.TranslateKRtoEN(commingMsg, function(transedMsg){
            //Reply(eventObj, transedMsg);
            if(step == 0){
                currentTeamID = data.SearchTeam(transedMsg);
                Reply(eventObj, SelectTeamInfoMessage());
            }
        });
    }
    step++;
}

function SelectLeague(inputNum){
    let leagueID = 0;
    switch(inputNum){
        case 1: // 잉글랜드 프리미어리그
            leagueID = 39;
            break;
        case 2: // 스페인 라리가
            leagueID = 140;
            break;
        case 3: // 이탈리아 세리에 A
            leagueID = 135;
            break;
        case 4: // 독일 분데스리가
            leagueID = 78;
            break;
        case 5: // 프랑스 리그앙
            leagueID = 61;
            break;
        case 6: // 포르투칼 프리메라리가
            leagueID = 94;
            break;
        case 7: // UEFA 챔피언스리그
            leagueID = 2;
            break;
        case 8: // UEFA 유로파리그
            leagueID = 4;
            break;
        case 9: // UEFA 컨퍼런스리그
            leagueID = 848;
            break;
        case 10: // 대한민국 K리그
            leagueID = 292;
            break;
        default:
            break;
    }
    currentLeagueID = leagueID;
    console.log("Returned League ID : %d", leagueID);
    return leagueID;
}

function SelectLeagueInfo(inputNum){
    return 'You Selected ' + inputNum.toString();
}

function SelectTeamInfo(inputNum){
    return 'You Selected ' + inputNum.toString();
}

function DefaultSelectMessage(){
    return '환영합니다.';
}

function SelectLeagueInfoMessage(){
    let msg = '1. 팀 순위 \n2. 득점 순위 \n3. 도움 순위 \n4. 처음으로';
    return msg;
}

function SelectTeamInfoMessage(){
    let msg = '1. 경기 일정 \n2. 소속 선수 \n3. 순위 \n4. 처음으로';
    return msg;
}