line.ctrl.js 4.98 KB
const request = require('request');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TOKEN = 'iaoVQEV5adLHh7MbW8bZvHKoULoKZUD6B0bXD2l0srO+yXyXKRe4HBLvWQwrkKQx2fwdsz1O/qVpVh9eucUf9GxRb8w2dSaaWCXd9FTqDLP5Yu9xovneGprYlU/0VKSAVw1iphi9BfJWfjIjwWY2pAdB04t89/1O/w1cDnyilFU=';
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "www.ossjaksimsamil.ml"
const sslport = 23023;

const Profile = require("../../models/profile");
const problem_set = require("../../data/problem_set");
const compareBJ = require("../../util/compareBJ");
const user = require('../user');

let username = "";

exports.linestart = 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);
  
  if(username == "") {
    username = eventObj.message.text;
  }

  if (!isExist(username)) {
    username = "";

    request.post(
      {
          url: TARGET_URL,
          headers: {
              'Authorization': `Bearer ${TOKEN}`
          },
          json: {
              "replyToken":replyToken,
              "messages":[
                  {
                      "type":"text",
                      "text": "작심삼일 혹은 백준 사이트의 ID값이 올바르지 않습니다. 다시 입력해주세요."
                  }
              ]
          }
      },(body) => {
          console.log(body)
      });
  }

  if(eventObj.message.text == "문제") {
    console.log("문제를 추천합니다.");
    recommendData = lineRecommend(username);
    recommendBJ(eventObj.replyToken, recommendData);
  }

  // if((eventObj.message.text == '문제추천')&&(username != undefined)){
  //     console.log("문제를 추천합니다.");
  //     recommendData = lineRecommend(username);
  //     recommendBJ(eventObj.replyToken, recommendData);
  // } else {
  // let isExist = lineCtrl.findID(eventObj.message.text);
  // if (isExist == true)
  //     username = eventObj.message.text;
  // else{
  //     request.post(
  //         {
  //             url: TARGET_URL,
  //             headers: {
  //                 'Authorization': `Bearer ${TOKEN}`
  //             },
  //             json: {
  //                 "replyToken":replyToken,
  //                 "messages":[
  //                     {
  //                         "type":"text",
  //                         "text": "작심삼일 혹은 백준 사이트의 ID값이 올바르지 않습니다. 다시 입력해주세요."
  //                     }
  //                 ]
  //             }
  //         },(body) => {
  //             console.log(body)
  //         });
  //     }
  
  // recommendBJ(eventObj.replyToken, eventObj.message.text);
  // }
  res.sendStatus(200);
}

function recommendBJ(replyToken, message) {
  var recommendProblem = "오늘의 추천문제는 " + message.problem_title + "입니다.";
  var problemURL = "https://www.boj.kr/" + recommendData.problem_number;
  request.post(
      {
          url: TARGET_URL,
          headers: {
              'Authorization': `Bearer ${TOKEN}`
          },
          json: {
              "replyToken":replyToken,
              "messages":[
                  {
                      "type":"text",
                      "text": recommendProblem
                  },
                  {
                      "type":"text",
                      "text": problemURL
                  }
              ]
          }
      },(body) => {
          console.log(body)
      });
  

  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);
}


/*
POST api/notify/slack/recommend
{
  username: "username"
}
*/
function lineRecommend(username) {

    const profile = await Profile.findByUsername(username);
    if (!profile) {
      console.log("401");
      return;
    }
    let unsolved_data = compareBJ.compareBJ(
      profile.getBJdata(),
      problem_set.problem_set
    );
    let recommendData = compareBJ.randomItem(unsolved_data);

    if (!recommendData) {
      console.log("402");
      return;
    } 

    return recommendData;
    
};

function isExist(username) {
    const profile = await Profile.findByUsername(username);
    if (!profile) {
      return false;
    } else return true;
}