노는게 좋은 뽀로로부부

작은 도전기들/카카오톡봇 만들어보기

03 카카오톡봇 코딩 시작 하도록 하겠습니다

효니쭈니 2024. 10. 30. 18:30

지금부터 코딩을 시작하지...

 

 

전체적인 소스 올려 드리고 내용 설명 들어가겠습니다~

 

 

 

전체적인 소스는 아래와 같습니다.

const scriptName = "고객확인봇";

const SQLiteDatabase = android.database.sqlite.SQLiteDatabase;
let db = null;

function updateDB(){
   db = SQLiteDatabase.openDatabase("/storage/emulated/0/Download/20240927_members.db",null,SQLiteDatabase.CREATE_IF_NECESSARY);  
}

updateDB();



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

let dash_chk = msg.charAt(0);
if (dash_chk!= "/"){
   return 0;
}


let remove_dash = msg.substr(1);

member_data = db.rawQuery("SELECT * FROM memberslist where m_name='"+remove_dash+"'",null);



while(member_data.moveToNext()){
 
  replier.reply(remove_dash+"님은 "+member_data.getString(1)+" 회원고객 입니다.///생년월일:"+member_data.getString(3)+"///휴대전화:"+member_data.getString(5)+"///집주소:"+member_data.getString(6));
  
}



let memcount = member_data.getCount();

if (memcount == 0){
  replier.reply(remove_dash+"님은 비고객 입니다.");
   }else {
     replier.reply(remove_dash+"고객은 총"+member_data.getCount()+"명 입니다.");
   }
}

 

 

 

 

하나하나 뜯어서 설명드릴게요.

 

일단 스마트폰 자체 내에 있는 db를 불러와야 하니까요

const scriptName = "고객확인봇";

const SQLiteDatabase = android.database.sqlite.SQLiteDatabase;
let db = null;  /*db 함수를 선언 합니다.*/



function updateDB(){
   db = SQLiteDatabase.openDatabase("/storage/emulated/0/Download/20240927_members.db",null,SQLiteDatabase.CREATE_IF_NECESSARY);  
}

/*db 라는 함수에 스마트폰 에 있는 만든 db 파일을 불러와 줍니다.*/


updateDB();

 

저 경로를 잘 찾을 수 없다면, 해당 파일을 다운로드하시고 위치를 확인하신 다음에 

 

/storage/emulated/0/ 뒷부분만 수정하시면 되더라고요 보통은 Download에 들어가니까 저 뒤에 해당 파일에 대한 파일명만 잘 작성해 주시면 될 것 같아요~~~~

 

아무튼 이렇게 updateDB라는 함수에 자료를 불러오고 나서

 

 

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

let dash_chk = msg.charAt(0); /* 입력 되어진 문차열의 첫번째 글자를 반환*/

if (dash_chk!= "/"){ /*만약 첫번째 글자가 / 가 아니면 */
   return 0;         /*강제로 프로그램 종료*/
}                    /* 그렇지 않으면 다음으로 진행*/

 

 

dash라고 "/"를 체크를 해줍니다.

 

이건 한 가지 안타까운 비화가 있는데요 ㅠㅠㅠㅠㅠ

 

처음에는 그냥 바로 이름만 치면 바로바로 그 사람 정보가 나오게 했더니

 

어느 날 제가 다른 고객님한테 자료 받을 게 있어서, 이 세컨드폰으로 카톡을 하라고 했더니, 그분이 저에게 톡을 한 것이었습니다.

 

근데 이 메신저봇 R이라는 게 상대방이 채팅을 해도 알림이 안되거든요... 그래서 당시상황은

 

 

 

 

"고객님 : 이렇게 자료 보내드리면 될까요?"

 

"본인 :  이렇게 자료 보내드리면 될까요? 는 비고객입니다."

 

"고객님 : 안 되나요?"

 

"본인 :  안되나요? 는 비고객입니다."

 

 

확인한 나 :......................................

 

 

아무튼 그 이후로 아... 저렇게 하면 안 되겠구나 싶어서 "/" 슬러쉬 기능으로 이름을 쳐야만 작동이 되도록 변경했는데요

 

간단하게 구현했습니다. 자바스크립트로 맨 첫 번째 문자열을 뽑아내고, 만약 "/"로 시작하면 함수를 진행하고 그렇지 않으면 강제 종료 하도록 했습니다. 

 

 

let remove_dash = msg.substr(1); 
/* "/" 로 이름이 카톡으로 오면 이제 / 를 제거하고 데이터 베이스에서 이름을 검색해야 하니까
먼저 remove_dash 에 msg 의 첫번째 문자('/' 슬러쉬)를 제거하고 그 다음문자부터 
remove_dash변수 에 담아 줍니다.*/



member_data = db.rawQuery("SELECT * FROM memberslist where m_name='"+remove_dash+"'",null);
/*member_data 변수에 데이터 베이스 자료 전체를 다 담습니다. memeberslist 는 db 테이블명 이고요
m_name은 그 해당 테이블의 컬럼명 입니다. sql 쿼리문 그대로 차용 했습니다.*/




while(member_data.moveToNext()){
  replier.reply(remove_dash+"님은 "+member_data.getString(1)+" 회원고객 입니다.///생년월일:"+member_data.getString(3)+"///휴대전화:"+member_data.getString(5)+"///집주소:"+member_data.getString(6));  
}
/*데이터 자료를 하나씩 뽑아올대 getString(0) 하면 첫번째칼럼, 1을 쓰면 두번째 칼럼 부터 뽑아올수가 있습니다.*/





let memcount = member_data.getCount(); /*이름을 치면 그이름에 대한 고객수를 불러옵니다.*/
/*해당 고객이 아니면 고객수가 0명으로 나올것이고 동명이인일 경우 그 숫자가 나오게 됩니다.*/



if (memcount == 0){
  replier.reply(remove_dash+"님은 비고객 입니다.");
   }else {
     replier.reply(remove_dash+"고객은 총"+member_data.getCount()+"명 입니다.");
   }
}

/*해당 고객수가0명이면 비고객입니다를 출력하고 만약 동명이인이 있을수 있기에 
총 고객수를 적어서 출려해줍니다.*/

 

 

너무 좋았던 점

 

이제는 PDF파일로 눈 아플 일이 없고, DB만 6개월에 한 번씩 업데이트해주면 편하게 카톡으로 고객을 알아볼 수 있습니다.

 

 

 

 

 

너무너무 아쉬운 점

 

고객명을 할 때  /// 로 문자를 나눈 건, 도저히 뭘 해도 엔터가 안 먹어서입니다...

 

/n, /\ , <br>, /원화표시 등등등.... 다 해보았는데 그냥 채팅창으로 그대로 나오더라고요...

 

언젠가 좀 더 고수가 된다면. 저것도 수정해보고 싶네요...

 

막상 써놓고 보니.. 어떻게 마무리해야 할지...??;;;

 

구현 모습 올리고 마무리 지겠습니다~! 즐거운 개발 하세요~

 

비고객일 경우

 

 

 

고객일 경우

 

 

 

728x90