스크립트 작성

카카오톡봇 프로젝트의 기본 스크립트를 분석하고 소스코드를 작성하는 방법을 소개합니다.

스크립트 열기

이전 문서에서 프로젝트를 생성하는 방법을 소개했습니다. 이제 코드를 살펴볼 차레입니다.

  1. 생성한 프로젝트를 클릭하세요.
  2. 연필 모양의 버튼을 클릭해 코드 편집 화면을 여세요.

카카오톡봇을 프로그래밍하는 화면입니다. 아래와 같이 기본적으로 작성된 코드가 존재합니다.

const bot = BotManager.getCurrentBot();

/**
* (string) msg.content: 메시지의 내용
* (string) msg.room: 메시지를 받은 방 이름
* (User) msg.author: 메시지 전송자
* (string) msg.author.name: 메시지 전송자 이름
* (Image) msg.author.avatar: 메시지 전송자 프로필 사진
* (string) msg.author.avatar.getBase64()
* (string | null) msg.author.userHash: 사용자의 고유 id
* (boolean) msg.isGroupChat: 단체/오픈채팅 여부
* (boolean) msg.isDebugRoom: 디버그룸에서 받은 메시지일 시 true
* (string) msg.packageName: 메시지를 받은 메신저의 패키지명
* (void) msg.reply(string): 답장하기
* (boolean) msg.isMention: 메세지 맨션 포함 여부
* (bigint) msg.logId: 각 메세지의 고유 id
* (bigint) msg.channelId: 각 방의 고유 id
*/
function onMessage(msg) {}
bot.addListener(Event.MESSAGE, onMessage);


/**
* (string) msg.content: 메시지의 내용
* (string) msg.room: 메시지를 받은 방 이름
* (User) msg.author: 메시지 전송자
* (string) msg.author.name: 메시지 전송자 이름
* (Image) msg.author.avatar: 메시지 전송자 프로필 사진
* (string) msg.author.avatar.getBase64()
* (boolean) msg.isDebugRoom: 디버그룸에서 받은 메시지일 시 true
* (boolean) msg.isGroupChat: 단체/오픈채팅 여부
* (string) msg.packageName: 메시지를 받은 메신저의 패키지명
* (void) msg.reply(string): 답장하기
* (string) msg.command: 명령어 이름
* (Array) msg.args: 명령어 인자 배열
*/
function onCommand(msg) {}
bot.setCommandPrefix("@"); //@로 시작하는 메시지를 command로 판단
bot.addListener(Event.COMMAND, onCommand);


function onCreate(savedInstanceState, activity) {
    var textView = new android.widget.TextView(activity);
    textView.setText("Hello, World!");
    textView.setTextColor(android.graphics.Color.DKGRAY);
    activity.setContentView(textView);
}

function onStart(activity) {}

function onResume(activity) {}

function onPause(activity) {}

function onStop(activity) {}

function onRestart(activity) {}

function onDestroy(activity) {}

function onBackPressed(activity) {}

bot.addListener(Event.Activity.CREATE, onCreate);
bot.addListener(Event.Activity.START, onStart);
bot.addListener(Event.Activity.RESUME, onResume);
bot.addListener(Event.Activity.PAUSE, onPause);
bot.addListener(Event.Activity.STOP, onStop);
bot.addListener(Event.Activity.RESTART, onRestart);
bot.addListener(Event.Activity.DESTROY, onDestroy);
bot.addListener(Event.Activity.BACK_PRESSED, onBackPressed);

스크립트 분석

기본적으로 작성되어있는 스크립트에서 기초적인 수준에서 필요한 코드는 아래와 같습니다. 해당 코드로 수정하세요.

const bot = BotManager.getCurrentBot();

function onMessage(msg) {}
bot.addListener(Event.MESSAGE, onMessage);

function onCommand(msg) {}
bot.setCommandPrefix("@");
bot.addListener(Event.COMMAND, onCommand);

위 스크립트에 작성된 코드들의 의미를 소개합니다.

  • 3번 줄 function onMessage(msg) {}: 메시지가 올 때마다 중괄호 안의 코드를 작동합니다.
  • 6번 줄 function onCommand(msg) {}: 명령어가 올 때마다 중괄호 안의 코드를 작동합니다.
  • 7번 줄 bot.setCommandPrefix("@");: '@'로 시작하는 메시지를 명령어로 정의하기 위한 코드입니다. 예를 들어, 'hello'는 명령어로 인식하지 않고 '@help'는 명령어로 인식합니다.

스크립트 작성: 메시지 보내기

메시지를 보내는 코드는 msg.reply()이며, 아래와 같이 function onMessage(msg) {}function onCommand(msg) {}의 중괄호 안에 작성해야 합니다. 코드를 작성할 때 가독성을 위해 중괄호 내부의 코드는 들여쓰기를 하고 작성하는 것을 권장합니다.

주의

아래 예제 코드는 실제 채팅방에서 작동할 경우 채팅방에 피해를 줄 수 있습니다.

const bot = BotManager.getCurrentBot();

function onMessage(msg) {
    msg.reply("Hello, world!");
}
bot.addListener(Event.MESSAGE, onMessage);

function onCommand(msg) {}
bot.setCommandPrefix("@");
bot.addListener(Event.COMMAND, onCommand);

해당 코드는 메시지를 감지할 때마다 'Hello, world!'라는 메시지를 보냅니다. 메시지를 보내는 코드를 작성할 때 텍스트를 큰따옴표나 작은따옴표로 감싸야합니다.

msg.reply("Hello, world!"); // 정상 작동
msg.reply('Hello, world!'); // 정상 작동
msg.reply(Hello, world!); // 에러 발생

코드를 작성한 후, 변경사항을 저장하고 카카오톡봇을 작동시킬 준비를 하는 컴파일을 해야합니다.

  1. 코드 편집 화면에서 폴더 모양 버튼을 클릭하세요.
  2. "저장하고 컴파일" 버튼을 클릭하세요.

만약 '저장되었습니다' 메시지가 출력된 후 에러 메시지가 출력되었다면 올바르게 코드를 작성했는지 확인하세요.

테스트해보기: 디버깅룸

실제 채팅방에 적용하기 곤란하거나 미리 카카오톡봇을 테스트하고자 할 경우, 디버깅룸에서 테스트할 수 있습니다. 디버깅룸은 카카오톡 채팅방을 모방한 가상의 채팅방입니다.

  1. 코드 편집 화면에서 나가세요.
  2. 프로젝트 클릭 후 3번째 버튼(메시지 모양 버튼)을 클릭하세요.

이제 디버깅룸에 아무 메시지나 전송해보세요. 메시지를 전송할 때마다 'Hello, world!'라는 메시지가 오게 됩니다.