최근 수정 시각 : 2024-03-13 23:59:24

카카오톡 봇/제작법


파일:상위 문서 아이콘.svg   상위 문서: 카카오톡 봇
{{{#!wiki style="margin:-10px"<tablebordercolor=#facc2e><tablebgcolor=#facc2e> 파일:카카오톡 아이콘.svg카카오톡
관련 문서
}}}
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px; word-break: keep-all"
<colbgcolor=#facc2e,#3a212b><colcolor=#3a212b,#facc2e> 기능 단톡방 · 카카오 이모티콘 · 카카오톡 채널 · 샵검색 · 카카오톡 선물하기 · 카카오톡 쇼핑하기 · 카카오쇼핑라이브 · 카카오톡 게임별 · 카카오톡 봇(제작법 · 팬다 Jr. 봇 · 오픈채팅봇) · 카카오톡 지갑
문제점 및 비판 카카오톡 사찰 논란 · 여성가족부 불법촬영물 오픈채팅방 단속 논란 · 인터넷 검열감시법 시행 사태 · 단톡방 성희롱 · 카카오톡 감옥
사건사고 클리앙 오픈채팅 여론조작 사건 · SK C&C 판교 데이터센터 화재로 인한 인터넷 서비스 장애 사건 · 카카오톡 AI 남성혐오 학습 논란
기타 업데이트 내역 · 만능톡 · 반톡 · 먹통 논란
}}}}}}}}} ||

1. 개요2. 카카오 공식 지원 봇3. 자바스크립트
3.1. Node.js (node-kakao)3.2. Node.js (remote-kakao)
4. 단순 자동응답5. 일반 자동응답 (IceBlock.js)6. 커피스크립트7. 루아8. Visual Basic9. Python10. 기타11. 기술
11.1. 웹 파싱11.2. 로컬 DB 접근11.3. 카카오링크11.4. share-Kakao
12. PC에서 제작

1. 개요

이문서에서 공식봇, 비공식봇의 제작방법을 간략하게 설명한다.
따라서 더 자세히 알고싶다면 관련 커뮤니티 또는 다른 봇 문서를 참고하면 좋을 듯하다.

이 문서에서 설명한 방법대로 봇을 사용하다 카카오 약관에 위반하여 걸린 정지에 대해서는 사용한 본인에게 책임이 있다.

2. 카카오 공식 지원 봇

2.1. 오픈채팅봇

카카오톡에서 현재 지원중인 공식 봇이다.

아주 기초적인 환영메세지, 알림메세지, 자동응답 총 3가지를 지원한다.
현재 거의 모든 오픈채팅방에 있으며[1] 카카오톡 공식 봇답게 UI가 직관적이고 개발하기 편리하다.
예전에는 방장봇이었지만 지금은 오픈채팅봇으로 이름만 바뀌었다 그러나 방장봇때 만들어진 채팅방은 계속 방장봇이다 하지만
방장봇때의 만들어진 채팅방에서, 방장봇을 비활성화 하고
다시 활성화를 하면 새로운 오픈채팅봇이 들어온다.

2.2. 팬다 Jr. 봇

카카오톡에서 지원했었던 공식봇이다.

여기서 지원했던 봇이었어도 아직 사용하는 오픈채팅방은 여전히 있다, 이유라면 방장봇과 팬다봇은 기능상 차이는 거의 없기 때문이다. 또한 팬다 Jr.봇이 존재하는 오픈채팅방에서 팬다봇은 여전히 사용이 가능하다

이 또한 개발하기에 직관적이고 편리하다.

3. 자바스크립트

가장 기초적이고 비공식봇을 만드는 사람들에게 가장 친숙한 봇을 만드는 방법이다. 거의 모든 봇에서 지원하는 언어이다. 현재 출시된 봇 구동 앱에서는 라이노 자바스크립트 엔진을 사용한다[2]

가장 많은 사람들이 쓰는 언어이다.

이에 대해서는 카카오톡 봇 문서에 많은 방법이 서술되어 있으므로 여기에선 정말 간단하게 소개하겠다. 봇을 만들때 문서를 참고하면 좋을것이다. #

기본적으로 제공되는 response함수는 다음과 같다.[3]
#!syntax javascript
function response (room, msg, sender, isGroupChat, replier, imageDB, packageName) {
    //여기에 소스를 쓰면 된다.
}

3.1. Node.js (node-kakao)

어떤 비공식봇 개발자가 만든 Node.js로 카톡봇을 만드는 라이브러리이다.
LOCO Protocol를 이용하여 봇을 만든다, 따라서 카카오 약관에 위배된다.[4]

사용자들의 악용으로 인해 지원이 중단됐다.

4.5.0 버전에서 제작자가 프로젝트를 중단하고 카카오톡의 패치로 로그인 시스템이 변경되어 막혔다
그러나 node-kakao 사용자들로 인해 뚫린 개조 버전이 은밀히 거래되고 있다.

프로젝트 중단
깃허브

3.2. Node.js (remote-kakao)

어떤 비공식봇 개발자가 만든 Node.js로 카톡봇을 만드는 라이브러리이다. 이 라이브러리로 카카오링크를 사용할 수 있을 정도로 호환성이 매우 좋은 편이다[5].

여담으로 최근에는 http방식으로 보냈던 기존 방식과 달리 socket.io를 이용하여 카톡봇을 돌리게 해준다

이건 공식 소개 글에 있는 예제 코드이다.
#!syntax javascript
import { RKClient } from 'remote-kakao';

const client = new RKClient();
const prefix = '>';

client.on('login', (port) => {
  console.log(`http://localhost:${port}`);
});

client.on('message', (message) => {
  if (!message.content.startsWith(prefix)) return;

  const args = message.content.split(' ');
  const cmd = args.shift();

  if (cmd === 'add') {
    if (args.length <= 2) return message.reply('최소 두 개의 더할 수를 보내주세요 ㅠㅠ');

    let sum = 0;
    args.forEach((n: string) => {
      if (!isNaN(Number(n))) sum += Number(n);
    });
    message.reply(sum);
  }
});

client.login();


깃허브[6]

4. 단순 자동응답

코딩도 모르고 정말 처음 시작할때 많이들 입문으로 시작하는 봇 제작 방식 중 하나이다.

단순 자동응답은 기능 창시자가 프로그래밍 언어로 인정하지 않는다.[7]
파일:상세 내용 아이콘.svg   자세한 내용은 채팅 자동응답 봇 문서
번 문단을
부분을
참고하십시오.

5. 일반 자동응답 (IceBlock.js)

오직 채자봇에서만 지원하는 기능으로, 블록코딩과 유사한 환경에서 로직을 만들면, 그 로직에 대응되는 자바스크립트 소스를 생성하여, 라이노 엔진에서 구동하는 방식으로 작동한다.
처음에는 IceBlock.js라는 이름으로 추가되었었다.

6. 커피스크립트

오직 채자봇에서만 지원하는 언어이다. 채자봇 내부에 커피스크립트 컴파일러가 내장되어있으며, 해당 컴파일러를 통해 자바스크립트로 트랜스파일한 뒤에 라이노 엔진에서 실행한다.

7. 루아

오직 채자봇에서만 지원하는 언어이다. LuaJ라는 엔진을 통해 구동한다.

8. Visual Basic

오직 채자봇에서만 지원하는 언어이다. vb2js를 통해 자바스크립트로 트랜스컴파일 후 라이노 엔진에서 구동한다.

9. Python

어떤 비공식봇 개발자가 만든 Python으로 카톡봇을 만드는 라이브러리이다.

이 이외에 파이썬으로 개발가능한 봇이 존재한다. #

10. 기타

물론 이것말고도 여러가지로 만들수 있다. 만들어 지지 않았을뿐.
카톡봇의 원리를 이해하면 안드로이드 스튜디오 같은 IDE로 충분히 만들수 있다! [8]

11. 기술

11.1. 웹 파싱

현재 카카오톡 봇 소스중 상당수를 차지하는 기술이다, 대부분의 파싱은 Jsoup 라이브러리로 이루어지며, 아주 오래전 봇 앱 또는 자바 클래스를 지원하지 않는 엔진[9]이 아닌이상 대다수가 Jsoup라이브러리를 탑재한다.[10]
웹사이트의 HTML 소스를 읽어오는 Util.getWebText(url);라는 함수도 존재하나, 이 함수 역시 내부적으로는 Jsoup 라이브러리를 통해 GET 요청을 보내고 응답을 받아오는 방식으로 작동한다.

사용방법
#!syntax javascript
org.jsoup.Jsoup.connect("url");

위 방식은 가장 기초적이며, get, post등 여러가지 웹 요청 방식에 따라 뒤에 따라오는 함수가 달라진다. 같은 라이노 엔진을 사용하는 ModPE 스크립트처럼 사용 방법은 자바와 동일하나, 언어만 자바스크립트로 바뀐 것과 같다.

변수나 상수에 클래스 자체를 넣는 방식[11]을 사용하여 마치 자바의 import처럼 사용하는 방법도 있으며, importClass(); 또는 importPackage(); 함수를 사용하는 방법[12]도 존재한다. 후자의 경우, 봇 구동 앱 개발자가 어떻게 어떻게 Scope를 생성하도록 설계했냐에 따라 사용할 수 있을 수도 있고[13], 없을 수도 있다.[14]

11.2. 로컬 DB 접근

스마트폰의 루트 경로에 있는 카카오톡의 DB에 접근하여 정보를 가지고 오는 방식으로, 메세지를 보내는 것과 같이 어떠한 동작을 하는 방법이 아닌 오직 읽기만 하는(read-only) 기법이다.

카카오톡 DB에는 입퇴장 기록 및 누가 누구를 강퇴하였는지, 누가 보낸 메시지를 누가 가렸는지, 가려지거나 삭제된 채팅의 원본 메시지 등이 저장[15]되기에 입퇴장 감지 및 강퇴 인식, 가리거나 지운 채팅(미디어 파일 포함[16])이 무엇인지 확인하는 기능을 구현할 수 있다.

추가적으로, 유저아이디 분석이 가능한 점을 이용하여 들낙 감지가 가능하다.

11.3. 카카오링크

카카오링크는 원래 카카오에서 공식적으로 제공하는 API 중 하나로, 다음과 같이 생긴 것을 채팅방에 수동으로[17] 전송하는 것이다.

파일:카카오링크.jpg

위의 과정을 자동화시킨 모듈이 존재하며, 대부분 해당 모듈을 통해 카카오링크를 자동으로 전송하는 방법을 사용하며, 카카오링크에 이미지를 포함시킬 수 있기에 사진 전송 대용으로 사용되곤 한다.
엄밀히 말하면 이 기능은 공식적으로 제공하는 기능이 아니다. 카카오링크 자체는 공식 API가 맞지만, 자동화 봇은 어느 개발자가 프로토콜을 분석하여 개발한 것이다. 따라서 카카오약관을 위반하는 사항이다.
이런 모듈들은 언어마다 존재하는데, python에는 kaling이, javascript에는 kaling.js[18][19]가 존재한다.

11.4. share-Kakao

카카오톡의 공유기능을 사용하여 만들어진 모듈이다. 무려 카카오링크와 달리 그냥 이미지를 보낼수 있다.[20]
동영상, 지도 여러가지 타입을 보낼수 있으며, 맨션도 가능하다![21] 다만 답장은 불가능하다.

이 방법은 위에 설명한 카카오톡 로컬 DB 접근이 가능해야하며[22], 비교적 최근에 발견된 방법이기에 곧 막힐수도 있다.

모듈 링크는 여기다. #

12. PC에서 제작

12.1. FTP

이 방법은 컴파일은 모바일로 하고 소스만 PC에서 제작한다.
이런 불편이 있지만 다른 방법보다 연결 등이 너무 쉽기에 많은 사람이 사용한다.

이 방법으로 할 땐 보통 Visual Studio Code를 사용한다. 아톰이나 다른 IDE도 가능하지만 매우 불편하다.
먼저 안드로이드에 'Ftp 서버' 라는 앱을 다운받는다. 그리고 앱을 실행한뒤 빨간 버튼을 누르면 버튼이 초록색으로 변하고 아래에 서버 아이피:포트와 유저네임, 비밀번호가 나온다. 이제 VS Code로 이동한다.

이후 VS Code에도 확장프로그램 'ftp-simple'을 설치한다. 다운로드한 후 F1키를 눌러 ftp를 검색한 후 설정으로 들어가면 json 형식이 나오는데 이때 방금 스마트폰에서 본 아이피와 포트, 닉네임, 비밀번호를 입력하고 저장한 다음 다시 F1키를 눌러
ftp에 접속한다. 그다음 위에 메뉴에서 디렉토리를 정하고 봇 소스를 개발하면 된다.
[1] 몇몇 채팅방은 팬다 Jr. 봇을 사용하기도 한다.[2] 그런지 ES2015문법도 극히 일부만 지원한다[3] 이는 레거시 Api에서만 해당한다.[4] 사실 카카오 측에서는 카카오가 허용하지 않은 api를 모두 금지하고 있기 때문에 대부분 운영정책 위반이다.[5] 정확하게는 remote-kakao 라고 한다.[6] 나중에 밝혀진 사실이지만 소스를 갈아엎고 처음부터 다시 개발해서 파일이 싹 다 없어졌다.[7] 따라서 태그들의 조합 역시 소스 코드로 인정되지 않는다.[8] 앱에서 응답을 처리한다는 것을 생각하면 자바나 코틀린 문법으로 만들 수 있다. 이미 코틀린 봇이 만들어졌다![9] ex) J2V8[10] Jsoup은 JavaScript를 위한 라이브러리가 아닌 자바용으로 제작된 라이브러리이다, 라이노 자바스크립트 엔진에서는 자바스크립트 측에서 앱 내부의 클래스에 접근할 수 있기에, 앱에 포함되어 있는 Jsoup에도 접근하여 사용할 수 있다.[11] 예시) const Jsoup = org.jsoup.Jsoup;[12] 예시) importClass(org.jsoup.Jsoup);[13] ImporterTopLevel 클래스 사용[14] org.mozilla.javascript.Context 인스턴스의 .initStandardObjects(); 메서드 사용[15] 채팅 삭제 기능은 실제로 채팅이 지워지는 것이 아닌, 보이지 않게 처리되는 것이다.[16] 파일의 경우 바로가기 링크 형태로 저장된다.[17] 카카오톡 앱 실행 후 친구 목록 또는 채팅방 목록에서 보낼 곳을 수동으로 선택[18] 단 이 모듈은 구글에서 배포한 crypto.js 라는 모듈이 추가로 필요하다.[19] 카카오링크 방식이 몇개가 변동됨에 따라 그대로 적용하면 작동이 되지 않는다.[20] 하지만 카카오톡 서버안에서 있는거만 가능하다.[21] 이유는 이 방식 어테치멘트를 수정하여 보낼수 있기 때문이다.[22] DB가 안 돼도 가능은 하지만 내부에서 사용하는 키가 매일매일 바뀐다.

분류