Toggle navigation
Toggle navigation
This project
Loading...
Sign in
신지원
/
LineMusicChatbot
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Authored by
엄성진
2021-06-07 19:54:29 +0000
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
415e2615035f3d69855fbdf7a7fdc11056aa71c9
415e2615
1 parent
e2ac2423
Fix Random Recommend, Fix User Setting(part)
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
172 additions
and
30 deletions
check.js
index.js
check.js
View file @
415e261
...
...
@@ -6,7 +6,7 @@ const TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
var
{
google
}
=
require
(
'googleapis'
);
var
service
=
google
.
youtube
(
'v3'
);
//세팅값
//세팅
,설정
값
var
setting_userId
=
[];
//유저아이디보관
var
setting_Thumbnail
=
[];
// 1:썸네일 출력(기본값) / 0:미출력
var
setting_SendAmount
=
[];
// 보낼 양 (1이상, 10이하의 정수) (기본값:1)
...
...
@@ -23,15 +23,17 @@ function SEND(replyToken,title,url2,thumbnail,SendAmount,sendaddress) //검색
temp_title
[
i
]
=
title
[
i
];
temp_url2
[
i
]
=
url2
[
i
];
if
(
sendaddress
)
//주소 전송 활성화
temp_url
[
i
]
=
'https://www.youtube.com/watch?v='
+
(
temp_url2
[
i
].
replace
(
/
\"
/gi
,
""
));
else
temp_url
[
i
]
=
""
;
sendMessage
+=
temp_title
[
i
]
+
"\n"
+
temp_url
[
i
]
+
"\n"
+
"\n"
;
}
console
.
log
(
sendMessage
);
if
(
thumbnail
==
1
)
//썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
if
(
thumbnail
)
//썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
request
.
post
(
{
url
:
TARGET_URL
,
...
...
@@ -57,11 +59,7 @@ function SEND(replyToken,title,url2,thumbnail,SendAmount,sendaddress) //검색
}
}
);
}
function
SEND_TEXT
(
replyToken
,
sendMessage
)
//단순 텍스트 전송하는 함수
{
console
.
log
(
sendMessage
);
else
//썸네일 비활성화
request
.
post
(
{
url
:
TARGET_URL
,
...
...
@@ -84,31 +82,35 @@ function SEND_TEXT(replyToken,sendMessage) //단순 텍스트 전송하는 함
);
}
function
shuffle
(
array
)
{
//플레이리스트에서 랜덤으로 골라서 출력할 수 있도록 shuffle 함수를 추가함
for
(
let
i
=
array
.
length
-
1
;
i
>
0
;
i
--
)
{
let
j
=
Math
.
floor
(
Math
.
random
()
*
(
i
+
1
));
[
array
[
i
],
array
[
j
]]
=
[
array
[
j
],
array
[
i
]];
}
}
function
SEND_LIST
(
replyToken
,
response
,
choice
,
thumbnail
,
SendAmount
,
sendaddress
)
//플레이리스트에서 나온 내용 전송하는 함수
{
//sendMessage = JSON.stringify(response.data.items[0].snippet.title);
var
random_order
=
[
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
];
shuffle
(
random_order
)
sendMessage
=
""
;
var
temp_title
=
[],
temp_url
=
[],
temp_url2
=
[],
temp_thumpnail
=
[];
for
(
var
i
=
0
;
i
<
SendAmount
;
i
++
)
{
temp_title
[
i
]
=
JSON
.
stringify
(
response
.
data
.
items
[
i
].
snippet
.
title
).
replace
(
/
\"
/gi
,
""
);
temp_title
[
i
]
=
JSON
.
stringify
(
response
.
data
.
items
[
random_order
[
i
]
].
snippet
.
title
).
replace
(
/
\"
/gi
,
""
);
temp_url2
[
i
]
=
JSON
.
stringify
(
response
.
data
.
items
[
i
].
snippet
.
resourceId
.
videoId
);
//temp_url2[i] = choice;
temp_url2
[
i
]
=
JSON
.
stringify
(
response
.
data
.
items
[
random_order
[
i
]
].
snippet
.
resourceId
.
videoId
);
if
(
sendaddress
)
//주소 활성화
temp_url
[
i
]
=
'https://www.youtube.com/watch?v='
+
(
temp_url2
[
i
].
replace
(
/
\"
/gi
,
""
));
//temp_thumpnail[i] = "https://img.youtube.com/vi/" + JSON.stringify(response.data.items[i].snippet.thumbnails.high.url).replace(/\"/gi, "") + "/hqdefault.jpg";
// 썸네일 : 사용자가 플레이리스트로 입력 시 리턴으로 너무 많은 정보들을 줘야함. 그래서 뺌.
else
temp_url
[
i
]
=
""
;
sendMessage
+=
temp_title
[
i
]
+
"\n"
+
temp_url
[
i
]
+
"\n"
+
"\n"
;
// temp_thumpnail[i] + "\n" + "\n";
}
console
.
log
(
sendMessage
);
if
(
thumbnail
==
1
)
//썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
if
(
thumbnail
)
//썸네일을 활성화시켰을 경우, 맨 첫번째 작품 리스트 썸네일만 보여줌.
request
.
post
(
{
url
:
TARGET_URL
,
...
...
@@ -134,27 +136,141 @@ function SEND_LIST(replyToken,response,choice,thumbnail,SendAmount,sendaddress)/
}
}
);
else
//썸네일 비활성화
request
.
post
(
{
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
Info
.
TOKEN
}
`
},
json
:
{
"replyToken"
:
replyToken
,
"messages"
:
[
{
"type"
:
"text"
,
"text"
:
sendMessage
}
]
}
}
);
}
function
SEND_TEXT
(
replyToken
,
sendMessage
)
//단순 텍스트 전송하는 함수
{
console
.
log
(
sendMessage
);
request
.
post
(
{
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
Info
.
TOKEN
}
`
},
json
:
{
"replyToken"
:
replyToken
,
"messages"
:
[
{
"type"
:
"text"
,
"text"
:
sendMessage
}
]
}
}
);
}
function
SETTINGS
(
replyToken
,
sendMessage
)
//설정 함수
{
console
.
log
(
sendMessage
);
request
.
post
(
{
url
:
TARGET_URL
,
headers
:
{
'Authorization'
:
`Bearer
${
Info
.
TOKEN
}
`
},
json
:
{
"replyToken"
:
replyToken
,
"messages"
:
[
{
"type"
:
"text"
,
"text"
:
sendMessage
},
{
"type"
:
"template"
,
"altText"
:
"설정메뉴입니다."
,
"template"
:
{
"type"
:
"buttons"
,
"title"
:
"설정"
,
"text"
:
"설정하려는 항목을 골라주세요."
,
"actions"
:
[
{
"type"
:
"postback"
,
"label"
:
"썸네일 출력 여부 변경"
,
"data"
:
"썸네일"
},
{
"type"
:
"postback"
,
"label"
:
"추천 음악 개수 조정"
,
"data"
:
"개수"
},
{
"type"
:
"postback"
,
"label"
:
"유튜브 주소 출력 여부 변경"
,
"data"
:
"주소"
}
]
}
}
]
}
}
);
}
exports
.
thumbnail_settings
=
function
(
replyToken
,
userId
)
{
console
.
log
(
'썸네일 출력 설정'
);
// 여기서 썸네일을 출력할지 말지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_Thumbnail[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// https://developers.line.biz/en/reference/messaging-api/#template-messages 의 confirm 를 참고해서 응용하시면 될 것 같습니다.
// 이곳에 userid에 맞게 setting_Thumbnail, setting_SendAmount, setting_SendAddress 의 값을 수정해주시면 됩니다.
}
exports
.
amount_settings
=
function
(
replyToken
,
userId
)
{
console
.
log
(
'출력량 설정'
);
// 여기서 노래 몇개를 출력할지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_SendAmount[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// 이거는 단순하게 숫자를 입력받으면 될 것 같습니다. 다만 1,2,3,4,5,6,7,8,9,10 의 응답만 받도록 해주셔야 합니다. (예외처리 필수)
}
exports
.
address_settings
=
function
(
replyToken
,
userId
)
{
console
.
log
(
'유튜브 주소 출력 설정'
);
// 여기서 유튜브 주소를 출력할지 말지 물어보고나서, 웹훅의 응답을 받아 그 응답에 따라서
// setting_SendAddress[setting_userId.indexOf(userId)] 의 값를 수정합니다.
// https://developers.line.biz/en/reference/messaging-api/#template-messages 의 confirm 를 참고해서 응용하시면 될 것 같습니다.
}
exports
.
check
=
function
(
message
,
replyToken
,
userId
)
{
if
(
setting_userId
.
indexOf
(
userId
)
==-
1
)
if
(
setting_userId
.
indexOf
(
userId
)
==-
1
)
// 새로운 사용자가 이용할때, 설정 초기값 세팅
{
setting_userId
.
push
(
userId
);
setting_Thumbnail
.
push
(
1
);
setting_SendAmount
.
push
(
1
);
setting_SendAddress
.
push
(
1
);
console
.
log
(
"없당"
);
}
else
{
console
.
log
(
"있당"
);
console
.
log
(
"알림: 새로운 사용자가 발견됨"
);
}
...
...
@@ -249,7 +365,7 @@ exports.check = function (message, replyToken, userId) {
if
(
title
.
length
==
0
)
console
.
log
(
'검색된 동영상이 없습니다.'
);
else
SEND
(
replyToken
,
title
,
url2
,
1
,
3
,
1
);
SEND
(
replyToken
,
title
,
url2
,
setting_Thumbnail
[
setting_userId
.
indexOf
(
userId
)],
setting_SendAmount
[
setting_userId
.
indexOf
(
userId
)],
setting_SendAddress
[
setting_userId
.
indexOf
(
userId
)]
);
});
...
...
@@ -283,12 +399,16 @@ exports.check = function (message, replyToken, userId) {
}
else
if
(
choose
==
001
){
// 도움말
sendMessage
=
"도움말 예시"
;
sendMessage
=
"- 기본적으로 찾고 싶은 음악을 입력하여 보내면 적절한 음악 영상을 찾아 추천해드립니다."
+
"\n"
+
"예시) 소녀시대 노래"
+
"\n"
+
"- '플레이리스트'를 입력하면 분류에 따라 엄선한 음악을 추천드립니다!"
+
"\n"
+
"- '설정'을 입력하면 썸네일 출력 여부, 추천 음악 개수(1~10), 유튜브 주소 전송 여부를 설정하실 수 있습니다."
+
"\n"
+
"- 이 도움말을 다시 보고 싶으시다면 '도움말'을 입력하시면 됩니다! 음악과 함께 좋은 하루 보내세요."
;
SEND_TEXT
(
replyToken
,
sendMessage
);
}
else
if
(
choose
==
002
)
{
// 설정
sendMessage
=
"설정 예시"
;
SE
ND_TEXT
(
replyToken
,
sendMessage
);
SE
TTINGS
(
replyToken
,
sendMessage
);
}
else
{
//플레이리스트
...
...
@@ -308,7 +428,7 @@ exports.check = function (message, replyToken, userId) {
if
(
video
.
length
==
0
)
console
.
log
(
'검색된 동영상이 없습니다.'
);
else
SEND_LIST
(
replyToken
,
response
,
choice
,
1
,
10
,
1
);
SEND_LIST
(
replyToken
,
response
,
choice
,
setting_Thumbnail
[
setting_userId
.
indexOf
(
userId
)],
setting_SendAmount
[
setting_userId
.
indexOf
(
userId
)],
setting_SendAddress
[
setting_userId
.
indexOf
(
userId
)]
);
}
)
}
...
...
index.js
View file @
415e261
...
...
@@ -20,11 +20,33 @@ 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
==
"썸네일"
)
//설정에서 썸네일 설정버튼을 눌렀을때
songs
.
thumbnail_settings
(
eventObj
.
replyToken
,
eventObj
.
source
.
userId
);
//else if (썸네일 설정 버튼을 누르고 거기서 응답이 들어왔을때)
else
if
(
eeventObj
.
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 (플레이리스트를 입력했을때 뜬 버튼에서 가수를 눌렀을때)
send
(
eventObj
.
replyToken
,
message
.
text
,
eventObj
.
source
.
userId
);
res
.
sendStatus
(
200
);
});
function
send
(
replyToken
,
message
,
userId
)
{
function
react
(
replyToken
,
message
,
userId
)
{
request
.
post
(
{
...
...
Please
register
or
login
to post a comment