app.js 6.34 KB
var express = require('express');
const request = require('request');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const TOKEN = 'R0CqLhe3bFeQRPNy73/j9vtadUXNMnDRHIN6Nvg/PimeyHOgrLE7EAPfc8X3XNw8VjQKRJSHcJor6Tj0GTWjS3+Ns0PLDFRIyELsrSVptRbt/AEJ292DZfPn3uW7xrWfMEKwqHTN9+/ILbRHcdbu1QdB04t89/1O/w1cDnyilFU='
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "2021105655.osschatbot2022.ml"
const sslport = 23023;
var XMLHttpRequest = require('xhr2');

const bodyParser = require('body-parser');
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);

    let newRequest = new XMLHttpRequest();
    newRequest.onreadystatechange = () => {
        if (newRequest.status == 200 && newRequest.readyState == 4) {
            var dt = new Date();
            if (dt.getDay() == 0 || dt.getDay() == 6) {
                resJSON0 = JSON.parse(newRequest.responseText).root[0].LASTNEXT[0]
                resJSON1 = JSON.parse(newRequest.responseText).root[0].LASTNEXT[1]
                if (resJSON0.go === "next_mon") {
                    let nextRequest = new XMLHttpRequest();
                    nextRequest.onreadystatechange = () => {
                        if (nextRequest.status == 200 && nextRequest.readyState == 4) {
                            newResJSON = JSON.parse(nextRequest.responseText).root[0].WEEKLYMENU[0]
                            request.post(
                                {
                                    url: TARGET_URL,
                                    headers: {
                                        'Authorization': `Bearer ${TOKEN}`
                                    },
                                    json: {
                                        "replyToken": eventObj.replyToken,
                                        "messages": [
                                            {
                                                "type": "text",
                                                "text": newResJSON.fo_menu_lun1
                                            }
                                        ]
                                    }
                                }, (error, response, body) => {
                                    console.log(body)
                                });
                        }
                    }
                    nextRequest.open('POST', 'https://dorm2.khu.ac.kr/food/getWeeklyMenu.kmc')
                    nextRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
                    nextRequest.send("locgbn=K1&sch_date=" + resJSON0.mon_date + "&fo_gbn=stu")
                } else if (resJSON1.go === "next_mon") {
                    let nextRequest = new XMLHttpRequest();
                    nextRequest.onreadystatechange = () => {
                        if (nextRequest.status == 200 && nextRequest.readyState == 4) {
                            newResJSON = JSON.parse(nextRequest.responseText).root[0].WEEKLYMENU[0]
                            request.post(
                                {
                                    url: TARGET_URL,
                                    headers: {
                                        'Authorization': `Bearer ${TOKEN}`
                                    },
                                    json: {
                                        "replyToken": eventObj.replyToken,
                                        "messages": [
                                            {
                                                "type": "text",
                                                "text": newResJSON.fo_menu_lun1
                                            }
                                        ]
                                    }
                                }, (error, response, body) => {
                                    console.log(body)
                                });
                        }
                    }
                    nextRequest.open('POST', 'https://dorm2.khu.ac.kr/food/getWeeklyMenu.kmc')
                    nextRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
                    nextRequest.send("locgbn=K1&sch_date=" + resJSON1.mon_date + "&fo_gbn=stu")
                }
            }
            else {
                resJSON = JSON.parse(newRequest.responseText).root[0].WEEKLYMENU[0]
                request.post(
                    {
                        url: TARGET_URL,
                        headers: {
                            'Authorization': `Bearer ${TOKEN}`
                        },
                        json: {
                            "replyToken": eventObj.replyToken,
                            "messages": [
                                {
                                    "type": "text",
                                    "text": resJSON.fo_menu_lun1
                                }
                            ]
                        }
                    }, (error, response, body) => {
                        console.log(body)
                    });
            }
        }
    }
    newRequest.open('POST', 'https://dorm2.khu.ac.kr/food/getWeeklyMenu.kmc')
    newRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
    newRequest.send("locgbn=K1&sch_date=&fo_gbn=stu")

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