[[분류:카카오톡]] [include(틀:상위 문서, top1=카카오톡 봇)] [목차] == 개요 == 이문서에서 공식봇, 비공식봇의 제작방법을 간략하게 설명한다. '''이 문서에서 설명한 방법대로 봇을 사용하다 카카오 약관에 위반하여 걸린 정지에 대해서는 아무도 책임을 지지 않는다.''' == [[방장봇]] == 카카오톡에서 현재 지원중인 공식 봇이다. 아주 기초적인 환영메세지, 알림메세지, 자동응답 총 3가지를 지원한다. 현재 모든 오픈채팅방에 있으며[* 몇몇 채팅방은 [[팬다 Jr. 봇]]을 사용하기도 한다.] 카카오톡 공식 봇답게 UI가 직관적이고 개발하기 편리하다. 방장봇 비슷한 것을 사용하는 오픈채팅방도 있다. (비공식) == [[자바스크립트]] == 가장 기초적이고 비공식봇을 만드는 사람들에게 가장 친숙한 봇을 만드는 방법이다. 거의 모든 봇에서 지원하는 언어이다. 현재 출시된 봇 구동 앱에서는 라이노 자바스크립트 엔진을 사용한다 ''' 봇 스크립팅 문화가 가장 발달되어있는 언어이다. ''' 이에 대해서는 카카오톡 봇 문서에 많은 방법이 서술되어 있으므로 여기에선 정말 간단하게 소개하겠다. 봇을 만들때 문서를 참고하면 좋을것이다. [[https://kkotbot-docs.kro.kr|#]] 기본적으로 제공되는 response함수는 다음과 같다. {{{#!syntax javascript function response (room, msg, sender, isGroupChat, replier, imageDB, packageName) { //여기에 소스를 쓰면 된다. } }}} === [[Node.js]] (remote-kakao) === 어떤 비공식봇 개발자가 만든 Node.js로 카톡봇을 만드는 라이브러리이다. 이 라이브러리로 카카오링크를 사용할 수 있을 정도로 호환성이 매우 좋은 편이다[* 정확하게는 remote-kakao 라고 한다.]. 여담으로 최근에는 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(); }}} [[https://github.com/thoratica/remote-kakao|깃허브]][* 나중에 밝혀진 사실이지만 소스를 갈아엎고 처음부터 다시 개발해서 파일이 싹 다 없어졌다.] == 단순 자동응답 == 코딩도 모르고 정말 처음 시작할때 많이들 입문으로 시작하는 봇 제작 방식 중 하나이다. '''단순 자동응답은 기능 창시자가 프로그래밍 언어로 인정하지 않는다.'''[* 따라서 태그들의 조합 역시 [[소스 코드]]로 인정되지 않는다.] [include(틀:상세 내용, 문서명=채팅 자동응답 봇)] == 일반 자동응답 (IceBlock.js) == [[채팅 자동응답 봇|채자봇]]에서만 지원하는 기능으로, 블록코딩과 유사한 환경에서 로직을 만들면, 그 로직에 대응되는 자바스크립트 소스를 생성하여, 라이노 엔진에서 구동하는 방식으로 작동한다. 처음에는 IceBlock.js라는 이름으로 추가되었었다. == [[커피스크립트]] == 이것도 오직 [[채팅 자동응답 봇|채자봇]]에서만 지원하는 언어이다. 채자봇 내부에 커피스크립트 컴파일러가 내장되어있으며, 해당 컴파일러를 통해 자바스크립트로 트랜스컴파일한 뒤에 라이노 엔진에서 실행한다. == [[Lua|루아]] == 이것도 오직 [[채팅 자동응답 봇|채자봇]]에서만 지원하는 언어이다. [[https://github.com/luaj/luaj|LuaJ]]라는 엔진을 통해 구동한다. == [[Visual Basic]] == 이것도 오직 [[채팅 자동응답 봇|채자봇]]에서만 지원하는 언어이다. [[https://github.com/NikhilS/vb2js|vb2js]]를 통해 자바스크립트로 트랜스컴파일 후 라이노 엔진에서 구동한다. == [[Python]] == 이떤 비공식봇 개발자가 만든 Python으로 카톡봇을 만드는 라이브러리이다. == 기타 == 물론 이것말고도 여러가지로 만들수 있다. '''만들어 지지 않았을뿐.''' 카톡봇의 원리를 이해하면 안드로이드 스튜디오 같은 IDE로 충분히 만들수 있다! == 기술 == === 로컬 [[데이터베이스|DB]] 접근 === 스마트폰의 루트 경로에 있는 카카오톡의 DB에 접근하여 정보를 가지고 오는 방식으로, 메세지를 보내는 것과 같이 어떠한 동작을 하는 방법이 아닌 오직 읽기만 하는(read-only) 기법이다. 카카오톡 DB에는 입퇴장 기록 및 누가 누구를 강퇴하였는지, 누가 보낸 메시지를 누가 가렸는지, 가려지거나 삭제된 채팅의 원본 메시지 등이 저장[* 채팅 삭제 기능은 실제로 채팅이 지워지는 것이 아닌, 보이지 않게 처리되는 것이다.]되기에 입퇴장 감지 및 강퇴 인식, 가리거나 지운 채팅(미디어 파일 포함[* 파일의 경우 바로가기 링크 형태로 저장된다.])이 무엇인지 확인하는 기능을 구현할 수 있다. 추가적으로, 유저아이디 분석이 가능한 점을 이용하여 들낙 감지가 가능하다. === 카카오링크 === 카카오링크는 원래 [[카카오(기업)|카카오]]에서 [[카카오톡#s-3.7.1|공식적으로 제공하는 API]] 중 하나로, 다음과 같이 생긴 것을 채팅방에 '''수동으로'''[* 카카오톡 앱 실행 후 친구 목록 또는 채팅방 목록에서 보낼 곳을 수동으로 선택] 전송하는 것이다. [[파일:카카오링크.jpg]] 위의 과정을 자동화시킨 모듈이 존재하며, 대부분 해당 모듈을 통해 카카오링크를 '''자동으로''' 전송하는 방법을 사용하며, 카카오링크에 이미지를 포함시킬 수 있기에 사진 전송 대용으로 사용되곤 한다. 엄밀히 말하면 이 기능은 공식적으로 제공하는 기능이 아니다. 카카오링크 자체는 공식 API가 맞지만, 봇이 자동으로 보내는 것은 어느 개발자가 보내는 걸 분석하여 만든 것 이다 이런 모듈들은 언어마다 존재하는데, python에는 [[https://pypi.org/project/kaling/|kaling]]이, javascript에는 kaling.js가 존재한다. === share-Kakao === 카카오톡의 공유기능을 사용하여 만들어진 모듈이다. '''무려 카카오링크와 달리 그냥 이미지를 보낼수 있다.'''[* 하지만 카카오톡 서버안에서 있는거만 가능하다.] 동영상, 지도 여러가지 타입을 보낼수 있으며, 맨션도 가능하다![* 이유는 이 방식 어테치멘트를 수정하여 보낼수 있기 때문이다.] 다만 답장은 불가능하다. 이 방법은 위에 설명한 카카오톡 로컬 DB 접근이 가능해야하며[* DB가 안되도 가능은 하지만 내부에서 사용하는 키가 매일매일 바뀐다.], 비교적 최근에 발견된 방법이기에 곧 막힐수도 있다. 모듈 링크는 여기다. [[https://github.com/EliF-ASeN/shareKakao|#]] === LOCO Protocol 호환 라이브러리 === 카카오톡에서 사용하는 [[카카오톡/업데이트#s-1.7|LOCO]] [[프로토콜]]을 분석하여, 정상적인 카카오톡 클라이언트인 척 카카오톡 서버와 통신하는 방식도 존재한다. '''절대로 이 문서에 카카오톡 [[리버스 엔지니어링]] 기반으로 작동하는 봇과 관련된 사용법 및 구현방법을 설명하지 않습니다.''' == PC로 카카오톡 봇 제작법 == 이 문단에서는 PC로 카카오톡 봇을 제작법을 설명한다. === ftp === ftp로 카카오톡 봇을 제작하는 법을 설명할꺼다, 이방법은 컴파일은 자기가 직접하고 소스만 pc에서 제작한다 이런 불편이 있지만 다른 방법보다 연결이나, 너무 쉽기에 많은 사람이 사용한다. 이방법으로 코딩하면 보통은 [[vscode]]를 사용한다. 아톰이나 다른 IDE도 가능은하지만 매우 불편하므로 패스하겠다. 먼저 안드로이드 스마트폰에 'Ftp 서버' 라는 앱을 다운받는다. 그리고 앱을 실행한뒤 빨간 버튼을 눌러라, 그러면 초록색으로 변할것이고 밑에는 서버 아이피:포트 형식과 유저네임과 비밀번호가 나올것이다. 이제 vscode로 이동한다. vscode에서도 확장프로그램으로 'ftp-simple'을 설치한다. 다 설치하면 F1키를 눌러 ftp를 검색한다, 누가봐도 설정이 있는걸 들어가면 json 형식으로 나오는데 이때 위 스마트폰에서 본 아이피와 포트, 닉네임, 비밀번호를 입력하고 저장한다음 다시 F1키를 눌러 ftp에 접속한다, 그러면 위에 메뉴으로 디렉토리를 정하고 봇 소스를 개발하면 된다.