index.js 5.1 KB
var express = require('express');
var Info = require('./Info');
const request = require('request');
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const sslport = 23023;
const bodyParser = require('body-parser');
const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
var app = express();
app.use(bodyParser.json());
var songs = require('./check');
var thumbnail = 1;// 썸네일 출력 여부 (1:출력/0:미출력/기본값:1)
var post2 = require('./post2');
var thumbnail_yes;
app.post('/hook', function (req, res) {

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

    // request log
    console.log('======================', new Date(), '======================');
    console.log(eventObj);
    if (eventObj.type=="message") // 일반 메시지일때
        react(eventObj.replyToken, message.text,eventObj.source.userId);
    else if  (eventObj.postback.data=="썸네일") //설정에서 썸네일 설정버튼을 눌렀을때
    {
        console.log('썸네일 출력 설정');
        request.post(
            {
                url: TARGET_URL,
                headers:
                {
                    'Authorization': `Bearer ${Info.TOKEN}`
                },
                json:
                {
                    "replyToken": eventObj.replyToken,
                    "messages":
                        [
                            {
                                "type": "text",
                                "text": sendMessage
                            },
                            {
                                "type": "template",
                                "altText": "설정메뉴입니다.",
                                "template": {
                                    "type": "buttons",
                                    "title": "썸네일 출력 여부 변경",
                                    "text": "아래 항목을 골라주세요.",
                                    "actions": [
                                        {
                                            "type": "postback",
                                            "label": "썸네일 출력 O",
                                            "data": thumbnail_yes = 1
                                        },
                                        {
                                            "type": "postback",
                                            "label": "썸네일 출력 X",
                                            "data": thumbnail_yes = 0
                                        },
                                        {
                                            "type": "postback",
                                            "label": "뒤로가기",
                                            "data": thumbnail_yes = -1
                                        }
                                    ]
                                }
                            }
                        ]
                }
            }

        );


    }
    else if (eventObj.postback.data=="개수") //설정에서 출력 개수 설정버튼을 눌렀을때
        songs.amount_settings(eventObj.replyToken,eventObj.source.userId);

    //else if (출력 개수 설정 버튼을 누르고 거기서 응답이 들어왔을때)

    else if (eventObj.postback.data=="주소") //설정에서 유튜브 주소 설정버튼을 눌렀을때
        songs.address_settings(eventObj.replyToken,eventObj.source.userId);

    //else if (유튜브 주소 설정 버튼을 누르고 거기서 응답이 들어왔을때)

    //★★else if (플레이리스트를 입력했을때 뜬 버튼에서 장르를 눌렀을때)

    //★★else if (플레이리스트를 입력했을때 뜬 버튼에서 무드를 눌렀을때) 

    //★★else if (플레이리스트를 입력했을때 뜬 버튼에서 가수를 눌렀을때) 
    thumbnail_yes = postback.data;
    console.log("thumbnail_yes : "+thumbnail_yes);
    if (thumbnail_yes === 1 || thumbnail_yes === 0) {
        songs.thumbnail_settings(thumbnail_yes, eventObj.source.userId);
        
    }
    else if (thumbnail_yes === -1) console.log("뒤로가기");
    else console.log("NULL값 입력임");


console.log("11");
    res.sendStatus(200);
});
function react(replyToken, message,userId) {

    request.post(
        {
            body: message
        },

        function () {
            songs.check(message, replyToken,userId);
        }
    );
}
try {
    const option = {
        ca: fs.readFileSync('/etc/letsencrypt/live/' + Info.domain + '/fullchain.pem'),
        key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + Info.domain + '/privkey.pem'), 'utf8').toString(),
        cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + Info.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);
}