봇 개발을 하다보면 유저가 공백을 포함한 명령어를 입력해서 봇이 인식하지 못하는경우가 많습니다.
예를들어
if(msg == "/명령어"){...}
인데, 앞에 한칸을 띄운다거나, 뒤에 공백을 붙이면 msg가 "/명령어"와 완벽히 일치하지않아
당연하게도 인식이 안됩니다.
if(msg.trim() == "/명령어"){...}
<string>.trim() 은 해당 문자열에 있는 공백을 전부 제거해줍니다.
또 추가적인 기능을 개발하다보면 메세지를 여러갈래로 나눠야 할 때가 있습니다.
예를들어 "/날씨 서울" , "/날씨 부산" 과 같이 특정 명령어 뒤에
추가적인 명령을 입력해야하는 경우입니다 (봇 기능의 절반이상을 차지하기때문에, 문자열 가공은 필수적입니다)
여러가지 방법들이 있겠지만, 저는 명령어의 종류에 따라서 카테고리를 나눈 후, 배열에 따로따로 저장하여 관리를 편하게 했습니다.
/* 명령어 저장 */
function dict_init(dict_nat, dict_cmd, dict_inc){
/* 단순명령어 저장부 */
dict_cmd["/컴파일"] = dict_cmd["/compile"] = dict_cmd["/cc"] = "/compile";
dict_cmd["/info"] = dict_cmd["/정보"] = dict_cmd["/상태"] = "/info";
dict_cmd["/help"] = dict_cmd["/도움"] = dict_cmd["/명령어"] = "/help";
dict_cmd["/time"] = dict_cmd["/시간"] = dict_cmd["/현재시간"] = dict_cmd["/현재시각"] = "/time";
...
/* 혼합 명령어 저장부 */
dict_cmd["/한영"] = "/한영 (번역할 문장)";
dict_cmd["/영한"] = "/영한 (번역할 문장)";
dict_cmd["/한일"] = "/한일 (번역할 문장)";
dict_cmd["/일한"] = "/일한 (번역할 문장)";
dict_cmd["/검색"] = dict_cmd["/search"] = dict_cmd["/네이버검색"] = dict_cmd["/naver"] = dict_cmd["/네이버"] = "/네이버 (검색할 문장)";
dict_cmd["/구글검색"] = dict_cmd["/google"] = dict_cmd["/구글"] = "/구글 (검색할 문장)";
dict_cmd["/랜덤"] = "/랜덤 (옵션1) (옵션2) (옵션3)...";
dict_cmd["/날씨"] = dict_cmd["/미세먼지"] = "/날씨 (지역)";
dict_cmd["/업비트"] = dict_cmd["/upbit"] = "/업비트 (코인심볼)";
...
/* 자연어 저장부 */
dict_nat["자러감"] = dict_nat["잘게"] = dict_nat["자야지"] = "잘자";
dict_nat["퇴근"] = "ㅊㅊ~";
...
}
프로그램 시작시, 각각의 배열들을 선언한후 dict_init()을 실행시킵니다.
그러면 저기있는 명령어들이 인덱스/값 형태로 저장됩니다.
명령어를 실행시킬때는
if(dict_cmd[msg] == "/compile"){...}
와 같이, 사전에서 꺼내쓰기만 하면 됩니다.
동일 작업에 대해 여러가지 명령을 추가하고싶을때도 유용합니다.
다음은 메세지자르기 입니다
str_split_Arr = [];
str_split_Arr = msg.split(" ");
<string>.split() 함수는 string을 인자단위로 쪼개줍니다.
뭔뜻이냐면,
"/명령 1 2 3" 이렇게 입력이 들어왔다고 치면
str_split_Arr[0] -> "/명령"
str_split_Arr[1] -> "1"
str_split_Arr[2] -> "2"
str_split_Arr[3] -> "3"
이런식으로 저장이 된다
if(str_split_Arr[0] == "/날씨"){...}
이렇게 적으면,
'공백까지 들어온 맨 처음 단어가 "/날씨" 일경우'
if문을 실행하는것이다
'카카오톡 봇 [KAKAO BOT]' 카테고리의 다른 글
카카오톡 봇 제작 - 8) 정적 웹에서 데이터 가져오기 (웹크롤링) (0) | 2021.07.22 |
---|---|
카카오톡 봇 제작 - 7) 랜덤 출력하기 (0) | 2021.07.22 |
카카오톡 봇 제작 - 5) 봇 정보 출력하기 (0) | 2021.06.16 |
카카오톡 봇 제작 - 4) 원격으로 코딩 + 봇 컴파일 하기 (0) | 2021.06.13 |
카카오톡 봇 제작 - 3) 현재 시간 출력하기 (0) | 2021.06.13 |