엄성진

Add Buttons, Fix Function for Communicating

//라인 고유 토큰
exports.TOKEN = 'Kb1/rQYz4MUhF8XyKQv7z9x0MxVQ5bX/XO8S/yt/1qQEJVAbsEFAaMvXKEOx9Umr7KhivfyDPfZHRRLFPngR0O4ZGWV2VFses8ufPE7uAdvYr4G6keBNAU69nBz5IC71HfbIrUHxXYqD7GfhVwXzpwdB04t89/1O/w1cDnyilFU='
exports.YoutubeKey = 'AIzaSyBInggOtXxPFYIRee0Xs3vb5iZ9YE9_518'
exports.domain='2020105631.oss2021.tk'
\ No newline at end of file
......@@ -161,7 +161,7 @@ function SEND_LIST(replyToken,response,choice,thumbnail,SendAmount,sendaddress)/
);
}
function SEND_TEXT(replyToken,sendMessage) //단순 텍스트 전송하는 함수
function HELP(replyToken,sendMessage) //도움말 함수
{
console.log(sendMessage);
request.post(
......@@ -186,9 +186,9 @@ function SEND_TEXT(replyToken,sendMessage) //단순 텍스트 전송하는 함
);
}
function SETTINGS(replyToken,sendMessage) //설정 함수
function SETTINGS(replyToken) //설정 함수
{
console.log(sendMessage);
console.log("설정 메뉴 진입");
request.post(
{
url: TARGET_URL,
......@@ -202,10 +202,6 @@ function SETTINGS(replyToken,sendMessage) //설정 함수
"messages":
[
{
"type": "text",
"text": sendMessage
},
{
"type": "template",
"altText": "설정메뉴입니다.",
"template": {
......@@ -215,7 +211,7 @@ function SETTINGS(replyToken,sendMessage) //설정 함수
"actions": [
{
"type": "postback",
"label": "썸네일 출력 여부 변경",
"label": "썸네일 전송 여부 변경",
"data": "썸네일"
},
{
......@@ -225,7 +221,7 @@ function SETTINGS(replyToken,sendMessage) //설정 함수
},
{
"type": "postback",
"label": "유튜브 주소 출력 여부 변경",
"label": "유튜브 주소 전송 여부 변경",
"data": "주소"
}
]
......@@ -237,32 +233,378 @@ function SETTINGS(replyToken,sendMessage) //설정 함수
);
}
exports.thumbnail_settings = function (thumbnail_yes,userId)
function sendplaylist(replyToken, userId, choose)
{
var choice=ids.all_ids[choose];
service.playlistItems.list(
{
key: Info.YoutubeKey,
part: 'snippet',
fields: 'items(snippet(title,resourceId,thumbnails(high(url))))', //제목, VideoId, Thumbnail 이미지 정보.
maxResults: 10,
playlistId: choice
}, function (err, response){
if (err) {
console.log('The API returned an error: ', err);
return;
}
var video = response.data.items;
if (video.length == 0)
console.log('검색된 동영상이 없습니다.');
else
SEND_LIST(replyToken,response,choice,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]);
}
)
}
function PLAYLIST(replyToken) //플레이리스트 함수
{
console.log("플레이리스트 선택창 진입");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "플레이리스트 선택창 입니다.",
"template": {
"type": "buttons",
"title": "분야",
"text": "원하시는 분야를 골라주세요.",
"actions": [
{
"type": "postback",
"label": "장르",
"data": "genre"
},
{
"type": "postback",
"label": "무드",
"data": "mood"
},
{
"type": "postback",
"label": "가수",
"data": "singer"
}
]
}
}
]
}
}
);
}
// 여기서 썸네일을 출력할지 말지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_Thumbnail[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// https://developers.line.biz/en/reference/messaging-api/#template-messages 의 confirm 를 참고해서 응용하시면 될 것 같습니다.
// 이곳에 userid에 맞게 setting_Thumbnail, setting_SendAmount, setting_SendAddress 의 값을 수정해주시면 됩니다.
// var thumbnail;
exports.genre = function (replyToken)
{
console.log("플레이리스트-장르");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "장르 선택창 입니다.",
"template": {
"type": "buttons",
"title": "장르",
"text": "원하시는 장르를 골라주세요.",
"actions": [
{
"type": "postback",
"label": "힙합",
"data": "hiphop"
},
{
"type": "postback",
"label": "피아노",
"data": "piano"
},
{
"type": "postback",
"label": "팝",
"data": "pop"
}
]
}
}
]
}
}
);
}
//console.log("111");
//console.log("111222");
exports.hiphop = function(replyToken,userId)
{
console.log('플레이리스트-장르-힙합');
sendplaylist(replyToken, userId, 101);
}
// var eventObj = req.body.events[0];
//console.log("setting_userId.indexOf(userId) : before : " + setting_userId.indexOf(userId));
exports.piano = function(replyToken,userId)
{
console.log('플레이리스트-장르-피아노');
sendplaylist(replyToken, userId, 102);
}
exports.pop = function(replyToken,userId)
{
console.log('플레이리스트-장르-팝');
sendplaylist(replyToken, userId, 103);
}
setting_Thumbnail[setting_userId.indexOf(userId)] = thumbnail_yes;
//console.log("setting_userId.indexOf(userId) : after : " + setting_Thumbnail[setting_userId.indexOf(userId)])
exports.mood = function (replyToken)
{
console.log("플레이리스트-무드");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "무드 선택창 입니다.",
"template": {
"type": "buttons",
"title": "무드",
"text": "원하시는 무드를 골라주세요.",
"actions": [
{
"type": "postback",
"label": "신남",
"data": "exciting"
},
{
"type": "postback",
"label": "슬픔",
"data": "sad"
}
]
}
}
]
}
}
);
}
exports.exciting = function(replyToken,userId)
{
console.log('플레이리스트-무드-신남');
sendplaylist(replyToken, userId, 201);
}
console.log(thumbnail_yes + "after");
exports.sad = function(replyToken,userId)
{
console.log('플레이리스트-무드-슬픔');
sendplaylist(replyToken, userId, 202);
}
console.log("111111");
exports.singer = function (replyToken)
{
console.log("플레이리스트-가수");
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "가수 선택창 입니다.",
"template": {
"type": "buttons",
"title": "가수",
"text": "원하시는 가수를 골라주세요.",
"actions": [
{
"type": "postback",
"label": "블랙핑크",
"data": "blackpink"
},
{
"type": "postback",
"label": "아이유",
"data": "iu"
}
,
{
"type": "postback",
"label": "레드벨벳",
"data": "redvelvet"
}
,
{
"type": "postback",
"label": "트와이스",
"data": "twice"
}
]
}
}
]
}
}
);
}
exports.blackpink = function(replyToken,userId)
{
console.log('플레이리스트-가수-블랙핑크');
sendplaylist(replyToken, userId, 301);
}
exports.iu = function(replyToken,userId)
{
console.log('플레이리스트-가수-아이유');
sendplaylist(replyToken, userId, 302);
}
exports.redvelvet = function(replyToken,userId)
{
console.log('플레이리스트-가수-레드벨벳');
sendplaylist(replyToken, userId, 303);
}
exports.twice = function(replyToken,userId)
{
console.log('플레이리스트-가수-트와이스');
sendplaylist(replyToken, userId, 304);
}
exports.thumbnail_settings = function (replyToken)
{
console.log('썸네일 전송 설정');
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "설정메뉴입니다.",
"template": {
"type": "buttons",
"title": "썸네일 전송 여부 변경",
"text": "아래 항목을 골라주세요.",
"actions": [
{
"type": "postback",
"label": "썸네일 전송 O",
"data": "enablethumbnail"
},
{
"type": "postback",
"label": "썸네일 전송 X",
"data": "unablethumbnail"
},
]
}
}
]
}
}
);
}
exports.enablethumbnail = function(replyToken,userId)
{
console.log('썸네일 활성화 됨.');
setting_Thumbnail[setting_userId.indexOf(userId)]=1;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 썸네일이 전송됩니다!"
}
]
}
}
);
}
exports.unablethumbnail = function(replyToken,userId)
{
console.log('썸네일 비활성화 됨.');
setting_Thumbnail[setting_userId.indexOf(userId)]=0;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 썸네일이 전송되지 않습니다!"
}
]
}
}
);
}
exports.amount_settings = function (replyToken, userId)
{
console.log('출력량 설정');
......@@ -271,12 +613,103 @@ exports.amount_settings = function (replyToken, userId)
// 이거는 단순하게 숫자를 입력받으면 될 것 같습니다. 다만 1,2,3,4,5,6,7,8,9,10 의 응답만 받도록 해주셔야 합니다. (예외처리 필수)
}
exports.address_settings = function (replyToken, userId)
exports.address_settings = function (replyToken,)
{
console.log('유튜브 주소 출력 설정');
// 여기서 유튜브 주소를 출력할지 말지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_SendAddress[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// https://developers.line.biz/en/reference/messaging-api/#template-messages 의 confirm 를 참고해서 응용하시면 될 것 같습니다.
console.log('유튜브 주소 전송 설정');
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "template",
"altText": "설정메뉴입니다.",
"template": {
"type": "buttons",
"title": "유튜브 주소 전송 여부 변경",
"text": "아래 항목을 골라주세요.",
"actions": [
{
"type": "postback",
"label": "유튜브 주소 전송 O",
"data": "enableaddress"
},
{
"type": "postback",
"label": "유튜브 주소 전송 X",
"data": "unableaddress"
},
]
}
}
]
}
}
);
}
exports.enableaddress = function(replyToken,userId)
{
console.log('주소 활성화 됨.');
setting_SendAddress[setting_userId.indexOf(userId)]=1;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 유튜브 주소가 전송됩니다!"
}
]
}
}
);
}
exports.unableaddress = function(replyToken,userId)
{
console.log('주소 비활성화 됨.');
setting_SendAddress[setting_userId.indexOf(userId)]=0;
request.post(
{
url: TARGET_URL,
headers:
{
'Authorization': `Bearer ${Info.TOKEN}`
},
json:
{
"replyToken": replyToken,
"messages":
[
{
"type": "text",
"text": "이제 유튜브 주소가 전송되지 않습니다!"
}
]
}
}
);
}
exports.check = function (message, replyToken, userId) {
......@@ -331,6 +764,10 @@ exports.check = function (message, replyToken, userId) {
choose = 304;
choice = ids.all_ids[choose]
break;
case "플레이리스트":
choose = 100;
choice = 0;
break;
case "도움말":
choose = 001;
choice = 0;
......@@ -417,14 +854,16 @@ exports.check = function (message, replyToken, userId) {
+"\n"+"- '플레이리스트'를 입력하면 분류에 따라 엄선한 음악을 추천드립니다!"
+"\n"+"- '설정'을 입력하면 썸네일 출력 여부, 추천 음악 개수(1~10), 유튜브 주소 전송 여부를 설정하실 수 있습니다."
+"\n"+"- 이 도움말을 다시 보고 싶으시다면 '도움말'을 입력하시면 됩니다! 음악과 함께 좋은 하루 보내세요.";
SEND_TEXT(replyToken,sendMessage);
HELP(replyToken,sendMessage);
}
else if (choose == 002) { // 설정
sendMessage = "설정 예시";
SETTINGS(replyToken,sendMessage);
SETTINGS(replyToken);
}
else { //플레이리스트
PLAYLIST(replyToken);
/*
service.playlistItems.list(
{
key: Info.YoutubeKey,
......@@ -444,5 +883,6 @@ exports.check = function (message, replyToken, userId) {
SEND_LIST(replyToken,response,choice,setting_Thumbnail[setting_userId.indexOf(userId)],setting_SendAmount[setting_userId.indexOf(userId)],setting_SendAddress[setting_userId.indexOf(userId)]);
}
)
*/
}
}
\ No newline at end of file
......
......@@ -11,7 +11,6 @@ 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) {
......@@ -20,90 +19,91 @@ app.post('/hook', function (req, res) {
// 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
switch (eventObj.postback.data) {
case "썸네일": //설정에서 썸네일 설정버튼을 눌렀을때
songs.thumbnail_settings(eventObj.replyToken);
break;
case "enablethumbnail": //설정 -> 썸네일 설정 -> 활성화
songs.enablethumbnail(eventObj.replyToken,eventObj.source.userId);
break;
case "unablethumbnail": //설정 -> 썸네일 설정 -> 비활성화
songs.unablethumbnail(eventObj.replyToken,eventObj.source.userId);
break;
}
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 (플레이리스트를 입력했을때 뜬 버튼에서 장르를 눌렀을때)
case "개수": //설정에서 출력 개수 설정버튼을 눌렀을때
songs.amount_settings(eventObj.replyToken,eventObj.source.userId);
break;
case "주소": //설정에서 유튜브 주소 설정버튼을 눌렀을때
songs.address_settings(eventObj.replyToken);
break;
case "enableaddress": //설정 -> 주소 설정 -> 활성화
songs.enableaddress(eventObj.replyToken,eventObj.source.userId);
break;
case "unableaddress": //설정 -> 주소 설정 -> 비활성화
songs.unableaddress(eventObj.replyToken,eventObj.source.userId);
break;
case "genre": // 플레이리스트 -> 장르
songs.genre(eventObj.replyToken);
break;
case "hiphop": // 플레이리스트 -> 장르 -> 힙합
songs.hiphop(eventObj.replyToken,eventObj.source.userId);
break;
case "piano": // 플레이리스트 -> 장르 -> 피아노
songs.piano(eventObj.replyToken,eventObj.source.userId);
break;
case "pop": // 플레이리스트 -> 장르 -> 팝
songs.pop(eventObj.replyToken,eventObj.source.userId);
break;
case "mood": // 플레이리스트 -> 무드
songs.mood(eventObj.replyToken);
break;
case "exciting": // 플레이리스트 -> 무드 -> 신남
songs.exciting(eventObj.replyToken,eventObj.source.userId);
break;
case "sad": // 플레이리스트 -> 무드 -> 슬픔
songs.sad(eventObj.replyToken,eventObj.source.userId);
break;
case "singer": // 플레이리스트 -> 가수
songs.singer(eventObj.replyToken);
break;
case "blackpink": // 플레이리스트 -> 가수 -> 블랙핑크
songs.blackpink(eventObj.replyToken,eventObj.source.userId);
break;
case "iu": // 플레이리스트 -> 가수 -> 아이유
songs.iu(eventObj.replyToken,eventObj.source.userId);
break;
case "redvelvet": // 플레이리스트 -> 가수 -> 레드벨벳
songs.redvelvet(eventObj.replyToken,eventObj.source.userId);
break;
case "twice": // 플레이리스트 -> 가수 -> 트와이스
songs.twice(eventObj.replyToken,eventObj.source.userId);
break;
//★★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 (출력 개수 설정 버튼을 누르고 거기서 응답이 들어왔을때)
}
else if (thumbnail_yes === -1) console.log("뒤로가기");
else console.log("NULL값 입력임");
};
console.log("11");
res.sendStatus(200);
});
function react(replyToken, message,userId) {
request.post(
......