카카오톡 봇 만들기 (유튜브 )
카카오톡 봇 만들기! #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시 기준 작동불가인것

기능 개선으로 영상과는 코드가 다릅니다.

사용법이 조금 다르니 이점 참조해주시기 바랍니다.

고급진 카톡봇 제작의 필수요소!

 

파일을 읽고 쓰는 방법을 알려드리겠습니다.

 

작동구조는 위 영상에 있으니 따로 언급하지 않겠습니다. 

 


사용법
1. save(파일경로, 저장할 변수)
2. read(파일경로)

영상에서는 save(폴더경로, 파일이름, 저장할변수) , read(폴더경로, 파일이름) 이렇게 되어 있습니다.

폴더경로와 파일이름을 파일경로로 합쳐서 쓰도록 패치 하였습니다. 


밑의 코드중

var sdcard는 코드의 맨 윗쪽에

함수 부분은 코드의 맨 밑쪽에 넣어주시면됩니다.

var sdcard = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();    //절대경로

function save(originpath, content)
{
    // originpath는 sdcard/폴더/파일
    var splited_originpath = originpath.split("/");
    splited_originpath.pop();
    var path = splited_originpath.join("/");

    var folder = new java.io.File(path);
    folder.mkdirs();
    var file = new java.io.File(originpath);
    var fos = new java.io.FileOutputStream(file);
    var contentstring = new java.lang.String(content);
    fos.write(contentstring.getBytes());
    fos.close();
}

function read(originpath)
{
    var file = new java.io.File(originpath);
    if(file.exists() == false) return null;
    try
    {
        var fis = new java.io.FileInputStream(file);
        var isr = new java.io.InputStreamReader(fis);
        var br = new java.io.BufferedReader(isr);
        var temp_br = br.readLine();
        var temp_readline = "";
        while((temp_readline = br.readLine()) !== null){
            temp_br+="\n" + temp_readline; 
        }
        try
        {
            fis.close();
            isr.close();
            br.close();
            return temp_br;
        }
        catch(error)
        {
            return error;
        }
    }
    catch(error)
    {
        return error;
    }
}

 

 


전체코드

var allsee = new Array(1000).join(String.fromCharCode(847));
var sdcard = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();    //절대경로


function response(room, msg, sender, isGroupChat, replier, ImageDB, packageName, threadId){

    if (msg == "/기능") {
        replier.reply("made by 옴블\n\n--------기능------"+allsee+"\n\n안녕\n바보\n가위바위보\n/날씨");
    }
    if (msg == "/패치노트"){
        replier.reply("-----패치노트-----"+allsee+"\n\n20190826 ver1 /기능과 /패치노트 추가");
    }

    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('당신은 이겼습니다');
    	}
    }
}  

function save(originpath, content)
{
    // originpath는 sdcard/폴더/파일
    var splited_originpath = originpath.split("/");
    splited_originpath.pop();
    var path = splited_originpath.join("/");

    var folder = new java.io.File(path);
    folder.mkdirs();
    var file = new java.io.File(originpath);
    var fos = new java.io.FileOutputStream(file);
    var contentstring = new java.lang.String(content);
    fos.write(contentstring.getBytes());
    fos.close();
}

function read(originpath)
{
    var file = new java.io.File(originpath);
    if(file.exists() == false) return null;
    try
    {
        var fis = new java.io.FileInputStream(file);
        var isr = new java.io.InputStreamReader(fis);
        var br = new java.io.BufferedReader(isr);
        var temp_br = br.readLine();
        var temp_readline = "";
        while((temp_readline = br.readLine()) !== null){
            temp_br+="\n" + temp_readline; 
        }
        try
        {
            fis.close();
            isr.close();
            br.close();
            return temp_br;
        }
        catch(error)
        {
            return error;
        }
    }
    catch(error)
    {
        return error;
    }
}

 

메신져봇앱에서의 방법과 메신져봇R 앱에서의 방법이 다른 경우가 있습니다. 

기존 메신져봇앱에서 기준으로 글을 작성하였으나, 큰 방식은 같으니 메신저봇R을 쓰시는 분들도 조금만 고생해 주신다면 따라하실 수 있습니다. 


카카오톡 봇 만들기 (유튜브 )
카카오톡 봇 만들기! #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시 기준 작동불가인것

 

ftp를 이용한 카카오톡 원격코딩 방법을 알려드리겠습니다. 

 

오늘은 코딩보다는 코딩을 위한 프로그램 설치가 더 많아요.

 


 

오늘 할거 요약
1. 공기계에서 ftp 설정
2. 파일질라 (FileZilla) 설치
3. 비쥬얼 스튜디오 코드(Visual Studio Code) 설치
3-1. 비쥬얼 스튜디오 코드 필수 애드온 설치
4. 메신져봇 내장 Api를 사용하여 코드관리 하기

작은 핸드폰 화면으로 코딩하기가 여간 쉽지 않습니다. 

 

하이라이트도 없고, 렉걸리고 ... 생각만해도 숨이 막힙니다. 

 

컴퓨터에서 코딩할 수 있다면 얼마나 편할까요?

 

그 방법을 알려드리겠습니다.

 

 


1. 공기계를 ftp서버로 만들어주기

제가 알려드릴 방식은 공기계에서만 가능합니다. 

녹스, 미뮤같은 에뮬레이터에서는 불가능합니다. 

 

 

 

 

플레이스토어에서 'Ftp 서버'라는 앱을 설치해 주세요.

 

 

 

 

앱을 실행시키고 허용을 눌러주세요

 

 

 

 

설정에 들어가셔서

 

 

 

 

익명사용자 채크 해제 해주세요

 

 

 

 

수동포트말고 '포트'에 들어가셔서 포트번호를 5000으로 해주세요.

(포트번호 5000을 이미 사용하고 있다면 다른 적당한 포트번호로 설정해주세요)

 

 

 

 

빨간 전원버튼을 누르면 이렇게 화면이 나옵니다.

 

 

 

 

빨간 밑줄친 부분을 잘 적어두세요.

핸드폰마다 당연히 다르니깐 당황하지 마세요~

핸드폰의 ip주소입니다.

 

 

 

 

인터넷창을 키고 방금 적어둔 ip주소를 넣어보세요

 

 

 

 

사용자 이름과 비밀번호는 francis 입니다.

나중에 id와 비밀번호는 변경해 주세요

 

 

 

 

이런 창이 뜨면 성공입니다. 

이제 핸드폰은 ftp 서버가 되엇죠.

 

 


2. 파일질라 (FileZilla) 설치

구글에 파일질라를 검색하셔서 무료판 깔아주시면됩니다. 

까는거는 어렵지 않으니깐 패스~ 

 

 

 

 

파일질라를 실행시키면 이런창이 나옵니다. 

호스트에 위에서 적어둔 ip주소중 ':5000'만 빼고 입력해주세요.

사용자명은 francis

비밀번호는 francis

포트는 5000

이렇게 입력하신다음 빠른연결을 누르시면 됩니다. 

 

 

 

 

이렇게 오른쪽에 폴더가 뜨면 성공입니다. 

연결이 안되시는 분들은 공기계랑 컴퓨터랑 같은 공유기에 접속해 있는지 확인해주세요.

 

 

 

 


3. 비쥬얼 스튜디오 코드 설치 (VSC)

코딩하기 편하게 해주는 비쥬얼 스튜디오 코드를 설치해 줍니다. 

구글에 비쥬얼 스튜디오 코드라 검색하셔서 프로그램을 깔아주세요. 

 

 

 

 

비쥬얼 스튜디오 코드를 실행해 줍니다. 

 

맨 왼족 세로바에 사각형 아이콘을 클릭하시면 에드온을 깔 수 있습니다. 

 

위 사진에 나오는 3개의 에드온을 설치해주세요. 

 

 

 


4. 코드 파일 관리 프로그램 만들기

manage.js 라는 파일을 새로 만들어 주시고 다음과 같이 코드를 넣어줍니다. 

 

manage.js는 다른 코딩파일들을 관리하는 프로그램입니다. 

 

리로드(컴파일), 코드 파일 목록보기, 리로드(컴파일)할 파일 정하기 등의 기능을 넣어줄 겁니다. 

 

 

 

 

관리 프로그램은 봇의 주인만 사용해야합니다.

 

이를 위한 여러가지 방법 중 가장 쉬운 방법이 사용자의 이름을 이용하는 겁니다. 

 

sender(메세지를 보내는 사람의 카톡이름)이 "준현크루"와 == (같다면) && (그리고) msg == "리로드" 일때 다음 코드를 실행한다. 

 

여기서 "준현크루"부분에 봇 주인, 또는 관리자의 카톡이름을 넣어주시면 됩니다.

 

(주의할점 : 여기서 카톡이름은 봇이 깔린 공기계 카톡에서 보이는 이름을 기준으로 한다.)

 

 

 

 

 

새로운 명령어들 설명
Api.off(스크립트이름) : 스크립트이름의 작동을 중지한다. 
Api.reload(스크립트이름) : 스크립트이름을 리로드(컴파일)한다.
Api.on(스크립트이름) : 스크립트이름을 작동시킨다.
Api.getScriptNames() : 스크립트 목록을 알려준다.

사진의 25번째 줄을 보시면 msg.indexOf("파일변경") !== -1이라는 코드가 있습니다. 

 

msg에 "파일변경"이라는 문구가 있는지 알려주는 기능을 합니다.

 

indexOf는 원래는 찾으려는 문구의 위치를 알려주는 기능을 합니다. 

 

예를들어 "가나다라"라는 문자열이 있다면, 가나다라.indexOf("나") 는 1이라는 값을 가지게 되는 것이죠. 

 

그런데 가나다라.indexOf("마")는 어떤 값을 가지게 될까요? 가나다라에는 마가 없으니깐 -1이란 값을 가지게 됩니다. 

 

이걸 이용해서 indexOf의 결과값이 !== (==앞에 !가 있으면 not이라는 뜻임) -1이 아니면 해당 문자열안에 찾으려는 문자열이 있다는걸 알 수 있습니다. 

 

 

 

 

코드를 저장하고 manage.js를 공기계에 보내줍니다.

 

보통 메신져봇이 스크립트코드파일을 저장하는 위치는 내부저장소/kakaobot입니다. 

 

(주의!) 메신져봇R에서는 코드 저장 방식과 위치가 바뀌었습니다.

내부저장소/카톡봇/Bots/스크립트파일명 에 스크립트코드파일이 들어가 있으며, 메신저봇처럼 단순히 js파일을 추가해서는 안됩니다.

먼저 메신저봇R 앱에서 manage.js라는 파일을 생성을 해야지 위에서 소개한 방법을 사용할 수 있습니다.

 

 

 

 

manage.js를 보낸후에는 수동으로 컴파일을 해줍니다. 그리고 manage.js의 톱니바퀴모양 아이콘(설정창)을 클릭해줍니다.

 

 

 

 

설정창이 나오는데, 런타임 에러시 자동종료는 체크해제해주고

Api.off()무시는 체크해줍니다.

 

 

 

 

test.js는 런타임에러시 자동종료만 체크해제를 해줍니다.

(Api.off는 건들지 않음)

 

모든 설정은 끝났습니다. 영상 후반부를 보시면 어떤식으로 이용하는지 잘 나와있으니 참조하시길...

 

 


const scriptName = "manage.js";

function response(
  room,
  msg,
  sender,
  isGroupChat,
  replier,
  ImageDB,
  packageName,
  threadId
) {
  //이 코드로 저장과 리로드 기능을 하게 할거임

  //리로드
  if (sender == "옴블" && msg == "리로드") {
    try {
      Api.off(operationJS);   
      if (Api.reload(operationJS) == true) {
        Api.on(operationJS);
        replier.reply("리로드 성공");
      } else {
        replier.reply("리로드 실패");
      }
    } catch (error) {
      replier.reply(error);
    }
  }

  //js파일 목록 (동기화)
  if (sender == "옴블" && msg == "동기화") {
    replier.reply(Api.getScriptNames());
  }

  //리로드할 파일 정하기
  if (sender == "옴블" && msg.indexOf("파일변경") !== -1) {
    operationJS = msg.split(" ")[1];
    replier.reply(operationJS + "로 변경완료");
  }
}

 

주의

이 코드는 현재(2020년 3월 12일기준) 작동을 안 합니다.

참조만 하세요~

 

 


카카오톡 봇 만들기 (유튜브 )
카카오톡 봇 만들기! #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시 기준 작동불가인것

 

이것도 네이버 날씨가 개편이 되면서 작동이 안되는 코드입니다. 

 

하지만 코딩한게 아까워 핵심만 간추려 포스팅을 해둡니다.

 

그리고 함수형 코딩법으로 봇을 만들어 봅니다.


들어가기전에... 핵심요약
1. Utils.getWebText() 명령어로 사이트 웹코드 얻기
2. split, replace 등등으로 필요한 내용만 간추리기
3. 함수형 코딩

날씨기능을 얻는 코드 그 자체는 별로 중요한게 아닙니다.

핵심은 #3에 다 써놓았습니다. 

https://omble-blog.tistory.com/4?category=845743

 

#3 카톡봇을 만들어 보자 - 실시간 검색어 순위 (작동안함)

주의 이 코드는 현재(2020년 3월 9일기준) 작동을 안 합니다. 참조만 하세요~ 카카오톡 봇 만들기 (유튜브 ) 카카오톡 봇 만들기! #1 짧고 쉽고 간단하게~ https://youtu.be/It1uQuxegx0 카카오톡 봇 만들기! #2..

omble-blog.tistory.com

 

 

 

 


 

기능을 추가할수록 코드가 길어져 관리하기가 점점 어려워집니다.

 

이때 함수를 사용하면 어느정도는 코드 관리가 쉬워집니다. 

 

 

 

 

 

다들 수학시간에 함수라는걸 들어봤을 겁니다. 

 

프로그래밍에서도 똑같습니다. 윗 사진을 보면 이해되실 겁니다. 

 

긴 코드를 묶어서 쓰기 좋게 만드는게 함수라고 생각하면됩니다. 

 

 


카카오톡 봇 만들기 (유튜브 )
카카오톡 봇 만들기! #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시 기준 작동불가인것

 

봇 사용자들을 위한 기능을 만들어 봅니다. 

 

처음 봇을 본 사람들에게 사용법을 알려줘야겠죠?

 

채팅방에 들어올 때마다 일일히 말할 수는 없는 노릇이구요. 

 

그래서! 봇이 스스로 사용법을 알려주도록 코드를 짜봅시다. 

 


들어가기 전에... 오늘 만드는 코드 설명
1. 도움말 : "/기능"을 보내면 기능과 명령어를 설명함
2. 패치노트 : "/패치노트"라 보내면 패치내역을 보내줌
3. 전체보기 : 답장이 길때, 카톡의 전체보기(접어보기) 기능을 활성화시켜줌

"/기능" msg를 받으면 replier.reply로 답장을 하게 됩니다. 

 

답장 내용은 "made by 준현크루\n\n--------기능-------\n\n가위바위보\n/실검"

 

이렇게 되어있습니다. 

 

이것을 카톡으로 보내면 다음과 같이 됩니다. 

made by 준현크루

--------기능-------

가위바위보
/실검

\n\n은 엔터입니다. 줄을 변경시켜 줍니다. 

 

\는 키보드자판에 프린트 되어 있는 경우도 있지만 대부분은 없습니다. 

 

그럴땐 한국원 기호 ₩을 입력해주세요. 메신져봇에서 자동으로 \ 라고 인식을 하게 됩니다. 

 

(주의하실점!  / <=요거 와는 다른 기호입니다.)

 

새로운 기능을 추가할 때마다 갱신해서 적어주시면 됩니다. 

 

 

 

 

 

"/패치노트" msg를 받으면 패치노트를 알려주도록 코드를 짜봅니다. 

 

"/기능"때처럼 replier.reply 로 답장을 해주면됩니다.

 

사진에 있는 코드는 카톡에서는 이렇게 보입니다. 

------패치노트------

20190826 ver1 /기능과 /패치노트 추가

"/기능"과 마찬가지로 코드를 추가할 때마다 패치노트를 갱신시켜주면 됩니다. 

 

 

 

 

 

계속해서 새로운 기능들을 추가하다보면 "/기능"과 "/패치노트"도 덩달아 길어집니다.

 

그런데 답장이 길어지면 카톡방에서 보기에 불편하겟죠?

 

이럴때 접어보기 기능을 이용하면됩니다. 

 

방법은 간단합니다. 무척긴 공백문자를 생성해서 접고 싶은 곳에 넣으면됩니다. 

 

 

 

 

var allsee = new Array(1000).join(String.fromCharCode(847));

이 공백문자 코드를 맨 윗줄에 두면됩니다. 

 

Array는 배열입니다. 제 첫글(https://omble-blog.tistory.com/2)에 나와있는 그거랑 같습니다. 

 

Array(1000)이므로 1000개의 사물함이 있는 배열을 만든겁니다. 

 

거기에 .join명령어로 1000개의 사물함을 하나로 합쳐줍니다. 

 

이때 사물함 사이에 있던 칸막이를 String.fromCharCode(847)로 치환해줍니다. 

 

String.fromCharCode(847)를 해석하면 CharCode의 847번째 문자라는 뜻입니다.

 

여기서 CharCode란 UTF-16 아스키 코드를 뜻하는데, 아스키 코드란 마치 학교에서 키순으로 번호를 매기는 것처럼 글자에다가 번호를 매기는 규칙이라 생각하시면 됩니다.

 

그중 847번째 글자가 공백문자인거구요. 

 

 

 

 

이렇게 접어보기를 하고 싶은 곳에 allsee를 넣어주면됩니다. 

 


var allsee = new Array(1000).join(String.fromCharCode(847));

function response(room, msg, sender, isGroupChat, replier, ImageDB, packageName, threadId){

    if (msg == "/기능") {
        replier.reply("made by 옴블\n\n--------기능------"+allsee+"\n\n안녕\n바보\n가위바위보\n/날씨");
    }
    if (msg == "/패치노트"){
        replier.reply("-----패치노트-----"+allsee+"\n\n20190826 ver1 /기능과 /패치노트 추가");
    }

    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('당신은 이겼습니다');
    	}
    }
}    ​

 

 

 

 

주의

이 코드는 현재(2020년 3월 9일기준) 작동을 안 합니다.

참조만 하세요~

 


카카오톡 봇 만들기 (유튜브 )
카카오톡 봇 만들기! #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시 기준 작동불가인것

 

작동을 안 하는 구형 코드를 올리는 이유는 뭘까요? 

기껏 만들었는데 아까워서죠 ㅠㅠ...

아주아주 짧게 요약 가겠습니다!

 

 

 

 

 

웹페이지 html 소스코드 보는 방법입니다.

크롬에서 Ctrl + U를 누르면 됩니다.

개발자모드는 F12 입니다. 

 

 

 

 

F12나 Ctrl+ U로 본 코드를 카톡봇에서는 이 명령어로 가져옵니다.

Utils.getWebText()

괄호안에 웹사이트 주소를 넣으면 됩니다. 

 

 

 

 

split과 정규식, replace 명령어로 웹사이트 소스코드를 쳐내면됩니다.

자세한 방법은 영상에 나와있습니다. 

 

 

 

 

for문으로 적당히 답장을 꾸며주면됩니다. 


이번편은 소스코드 없습니다. 

작동안하는 코드를 복사하실 필요 없겠죠?


카카오톡 봇 만들기 (유튜브 )
카카오톡 봇 만들기! #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('당신은 이겼습니다');
    	}
    }
}    
​

 


유튜브로는 코드 공유의 한계가 있어서 티스토리에도 포스팅을 하려고 합니다.

제 유튜브 채널도 놀러 와 주세요!

 

카카오톡 봇 만들기 (유튜브 )
카카오톡 봇 만들기! #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을 사용하는데, 근본적인 동작방식은 대동소이하므로 편한 걸 사용하면 됩니다. 

다만,

1. JS카카오톳봇은 한국에서는 합법적인 경로로 구하기가 힘들고

2. 메신져봇은 제작자가 "최신 패치를 진행하지 않는다" 했으므로

3. 메신져봇 R을 사용하길 권장합니다.

 

 

 


 

카톡 앱이 하루 종일 작동해야 하기에 공기계 사용을 추천합니다. 

안드로이드 에뮬레이터는 비추해요. 컴퓨터를 하루종일 켜둘수는 없으니까요.

아 그리고 아이폰은 당연히 안됩니다. ㅎㅎ

 

 

 

 

지금(20년 03월 09일)은 JS카카오톡 봇이 없습니다. '메신저 자동응답봇'이나 '메신져봇R'을 설치해주시면 됩니다. 

 

 

 

 

카톡봇앱을 구동하기 위해서는 몇가지 설정이 필요합니다.

1. Wear OS가 깔려 있어야 하고

2. 알림설정이 되어야 합니다.

이 부분은 앱을 설치하면 앱에서 잘 알려주니 시키는 대로 따라하시면 됩니다.

 

 

 

 

카카오톡을 설치해 주세요. 

 

 

 

 

이제 봇 전용으로 카카오톡 계정을 만들어줘야 하는데, 카톡계정을 만들려면 전화번호가 필요합니다. 

안쓰는 번호로 카톡계정을 생성하는게 베스트입니다. 저같은 경우는 에넥스텔레콤의 0원유심을 사용하고 있구요. 

카톡봇을 계속 쓰실려면 0원유심을 신청하셔서 새로운 전화번호를 받으시는게 좋습니다.

비싸봤자 만원 안쪽입니다!

 

새로운 번호를 만들 수 없다면,  textPlus같은걸로 가상번호를 만들어서 가입하셔야 합니다. 

다만 이럴경우 한달에 두어번정도 계정인증이 풀리기도하고, 카카오톡측에서 지속적인 업데이트로 계정정지같은 조치가 들어오기도 하니 추천하진 않습니다. 

구글에 '카카오톡 부계정 만들기'라 검색하시면 여러 방법이 나오니 따라하시면 됩니다. 

 


계정을 다 만드셨다면 아래의 코드를 넣어서 동작시켜보세요!

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('바부야');
    }
}

"안녕"이라 보내면 "안녕하세요"라고 답해주네요. 

코드 설명은 영상에 자세히 나와있습니다. 

 

 


(추가) 메신저봇R인경우 코드 추가하는방법!

 

+ Recent posts