카카오톡 봇 만들기 (유튜브 )
카카오톡 봇 만들기! #1 짧고 쉽고 간단하게~ https://youtu.be/It1uQuxegx0
카카오톡 봇 만들기! #2 가위바위보 https://youtu.be/VaQiSzzxLxs
카카오톡 봇 만들기! #3 실시간 검색어 순위 https://youtu.be/Wv0Sv83oLTg
카카오톡 봇 만들기! #번외1 메신져봇으로 갈아타자
https://youtu.be/ojgqvCK26XE
카카오톡 봇 만들기! #4 기능설명, 접어보기, 전체보기 https://youtu.be/Dg1IX-tIEu0
카카오톡 봇 만들기! #5 날씨 알려주기
https://youtu.be/7DNaqFJYm5A
카카오톡 봇 만들기! #6 ftp 원격코딩, 코드관리
https://youtu.be/0nVmajTTNv4
메신져봇 앱으로 카카오톡 봇 만들기! #7 파일 읽고 저장하기
https://youtu.be/PMi7S-92VII
취소선은 2020년 3월 8일 22시 기준 작동불가인것

 

 

카카오톡봇을 설치했으니 이제 코딩을 시작합시다!

처음에는 가위바위보 기능을 만드는 게 국룰입니다 ㅎㅎ

저도 처음 봇을 만들었을때 가위바위보 기능부터 만들었었고요.

 


작동원리를 간단하게 알아봅시다

 

 

 

 

봇에게 "바보"라고 보내면 "바부야"라고 답장이 오도록 했을 때

이게 어떻게 작동이 되는 걸까요?

 

 

 

 

사람이 "바보"라고 보내면

"카톡"!

이렇게 봇이 있는 공기계에 카톡 알람이 뜨게 됩니다. 

JS봇앱 (==메신져봇, 메신져봇R)은 그 "알람"을 읽는 겁니다. 

 

 

 

 

"바보"를 받았으니 코드를 따라서

"바부야"라는 대답을 생성합니다.

 

 

 

 

생성한 대답을 카톡으로 보내줘야 하는데

보안 때문에 봇 앱에서 직접 보낼 수 없습니다. 

웨어 os앱은 여기서 사용됩니다. 

웨어 os의 빠른 카톡 답장 기능을 이용, 보안을 우회해서 보내는 겁니다. 

 

 

 

 

이렇게 사람에게 "바부야"라고 대답을 하게 되는 겁니다. 

 

여기서 알 수 있는 몇 가지 유의점이 있습니다. 

1.  알람을 읽어야 답장할 수 있으므로, 카톡 알람이 꺼지면 작동하지 않는다.
2. 웨어 os의 빠른 답장 기능을 이용하므로, 채팅방은 사람이 만들어줘야 한다.

이 두 가지는 신경을 써주셔야 합니다. (특히 알람!!)

 


자 이제부터 가위바위보 기능을 만들어 봅시다.

 

기능 구상을 해봅니다. 

내가 가위/바위/보 셋 중 하나를 보내면

봇이 가위/바위/보 셋 중 하나를 답장해야겠죠?

 

 

 

 

if문과 논리 연산자 ||을 이용해 사용자가 보낸 가위/바위/보를 인식하게 합니다.

여기서 변수 'msg'는 봇이 받은 카톡 메시지를 뜻합니다. 

해석을 해볼까요? 

 

코드    해석

if    만약

msg == '가위'    받은 카톡(msg)이 '가위'와 같다(==)면

||    또는

msg == '보'    받은 카톡(msg)이 '보'와 같다(==)면

||    또는

msg == '바위'    받은 카톡(msg)이 '바위'와 같다(==)면

{ }    중괄호 속 코드를 실행한다.

 

 

 

 

(RSP는 Rock Scissors Paper의 줄임말입니다.)

RSP에 ['가위', '바위', '보']라는 배열을 넣어줍니다.

영상에서는 행렬, 벡터라고 했네요. 비슷한거니 넘어갑니다. ㅎㅎ

배열은 쉽게 생각하면 사물함입니다. 

사물함에는 번호가 있죠? 

코딩에서는 맨 처음부터 0번, 그다음 1번, 그다음 2번... 순서대로 번호를 매겨줍니다.

RSP 사물함 0번은 '가위', 1번은 '바위', 2번은'보' 이렇게 되는거죠. 

코드로 표현하면 RSP[0] == '가위'

RSP[1] == '바위'

RSP[2] == '보'

이렇게 되죠.

 

 

 

 

수학문제는 가장 안쪽 괄호부터 풀어 나가는 것을 다들 알고 계실겁니다. 

코드도 똑같습니다. 가장 안쪽부터 순서대로 실행이됩니다. 

 

Math.random()과 Math. floor()라는 새로운 코드가 보이네요.

Math 뭔가 수학과 관련있어 보이죠? 맞습니다. 수학입니다.

 

Math.random()은 0~1 사이의 숫자를 랜덤으로 생성합니다.

그럼 Math.random()에 3을 곱하면 뭘까요?

0~1 사이의 숫자에 3을 곱했으니 0~3 사이의 숫자가 되겠네요. 

 

그것(0~3사이의 숫자)을 Math.floor가 감싸고 있습니다. 

Math.floor은 내림입니다. 2.5는 2로, 1.5는 1로, 1.78은 1로.... 이런식으로 소숫점 밑을 버려줍니다.

0~3사이의 숫자를 내려주면?

0, 1, 2 라는 정수가 나옵니다. 

 

0 또는 1 또는 2를 RSP에 넣어준다면?

가위 또는 바위 또는 보 

셋중 하나가 나오겠네요. 

이렇게 봇이 낼 가위바위보가 정해지게 됩니다.

 

 

 

 

사용자와 봇이 낸 가위바위보 데이터릴 비교해서 승무패를 정해줍니다.

둘다 똑같은걸 냈다면 비긴것이고

사용자가 가위 or 보 or 바위 일때

봇이 바위 or 가위 or 보 이면

사용자가 지게됩니다.

비기거나 진게 아니라면 이기게 된것이구요.


이렇게 가위바위보 기능을 만들어 보았습니다.

자유롭게 수정하셔서 원하는 기능을 구현하시면됩니다!

 

function response(room, msg, sender, isGroupChat, replier, ImageDB, packageName, threadId){
    /*(이 내용은 길잡이일 뿐이니 지우셔도 무방합니다)
     *(String) room: 메시지를 받은 방 이름
     *(String) msg: 메시지 내용
     *(String) sender: 전송자 닉네임
     *(boolean) isGroupChat: 단체/오픈채팅 여부
     *replier: 응답용 객체. replier.reply("메시지") 또는 replier.reply("방이름","메시지")로 전송
     *(String) ImageDB.getProfileImage(): 전송자의 프로필 이미지를 Base64로 인코딩하여 반환
     *(String) packageName: 메시지를 받은 메신저의 패키지 이름. (카카오톡: com.kakao.talk, 페메: com.facebook.orca, 라인: jp.naver.line.android
     *(int) threadId: 현재 쓰레드의 순번(스크립트별로 따로 매김)     *Api,Utils객체에 대해서는 설정의 도움말 참조*/
     
    if(msg == '안녕'){
        replier.reply('안녕하세요');
    }
    
    if(msg == '바보'){
    	replier.reply('바부야');
    }
    
    if(msg == '가위'||msg == '보' ||msg == '바위'){
        var RSP = ['가위', '바위', '보'];
    	RSP_bot = RSP[Math.floor((Math.random() * 3))];
    	replier.reply(RSP_bot);
    	   
    	if(msg == RSP_bot){
     	   replier.reply('비겼습니다');
    	}
        else if((msg == '가위' && RSP_bot == '바위')||(msg == '보' && RSP_bot == '가위')||(msg == '바위' && RSP_bot =='보')){
    	   replier.reply('당신은 졌습니다');
    	}
    	else{
    	   	replier.reply('당신은 이겼습니다');
    	}
    }
}    
​

+ Recent posts