ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카카오톡 오픈채팅 봇 소스코드
    카카오톡 오픈채팅 봇관련 2019. 8. 29. 14:12

    2020/03/14 - [카카오톡 오픈채팅 봇관련] - 0.카카오톡 오픈채팅 봇 만드는 방법

     

    기본 사용법은 상단링크를 참조해주세요

     

     


    그냥 개인적으로 줏어줏어 모아모아 만들어본 테스트용..자바스크립트

     

    대충 써보시면 감잡힐거에여..

     

     

     

     

     

     

    const scriptName="테스트.js";

    var preMsg = {};

    function response(room, msg, sender, isGroupChat, replier, ImageDB, packageName, threadId){
    /*(이 내용은 길잡이일 뿐이니 지우셔도 무방합니다)
    *(String) room: 메시지를 받은 방 이름
    *(String) msg: 메시지 내용
    *(String) sender: 전송자 닉네임
    *(boolean) isGroupChat: 단체/오픈채팅 여부
    *replier: 응답용 객체. replier.reply("메시지") 또는 replier.reply("방이름","메시지")로 전송
    *(String) ImageDB.getProfileImage(): 전송자의 프로필 이미지를 Base64로 인코딩하여 반환
    *(String) packageName: 메시지를 받은 메신저의 패키지 이름. (카카오톡: com.kakao.talk, 페메: com.facebook.orca, 라인: jp.naver.line.android
    *(int) threadId: 현재 쓰레드의 순번(스크립트별로 따로 매김) *Api,Utils객체에 대해서는 설정의 도움말 참조*/

    /*도배방지
    *if (preMsg[room] == msg) return;
    *preMsg[room] = msg
    *msg = msg.trim();*/
       

        if(room == "방이름" || room == "테스트용방이름"){

            msg = msg.trim();
       

            if (preMsg[room] == null){
                preMsg[room] = 0;
            }
            preMsg[room] = parseInt(preMsg[room]) + 1;

            if (preMsg[room] > 300){
                preMsg[room] = 7;
                replier.reply("설명서입니다.\n@1\n프로필\n점심\n저녁\n@롤\n/검색 검색할단어\n/배터리\n/롤전적 닉네임\n/나무 검색어\n/날씨\n/명령어\n/업데이트");
            }

            if(msg.indexOf("안녕하세요") != -1||msg.indexOf("어서오세요") != -1||msg.indexOf("반갑습니다") != -1){
                if (preMsg[room] < 7) return;
                replier.reply("환영합니다~");
                preMsg[room] = 0;
                return;
            }

            else if(msg.indexOf("@1") != -1){
                replier.reply("환영합니다~ ");
            }
            else if(msg.indexOf("@2") != -1){
                replier.reply("https://discord.gg/");
            }
            else if(msg.indexOf("프로필") != -1){
                replier.reply("카톡방 내에서 카카오톡 프로필, 번호 공개 금지입니다\n- 방장 부방장을 제외한 분들은 개인적인 연락이 필요할 시 디스코드 개인 메세지로 보내주세요!");
            }
            else if(msg.trim() == "점심" || msg.trim() == "저녁"){
                var list = ["청국장찌개", "순두부찌개", "고추장찌개","부대찌개","김치찌개","된장찌개","비지찌개","전찌개","동태찌개","갈비찜","닭볶음탕","스테이크","아귀찜","삼계탕","수육","월날쌈","불고기","찜닭","제육덮밥","비빔밥","오므라이스","카레덮밥","김치볶음밥","오징어덮밥","짜장밥","야채볶음밥","간장밥","육개장","떡국","미역국","콩나물국","북엇국","소고기무국","시래깃국","된장국","감잣국","튀김","소시지야채볶음","골뱅이소면","부침개","어묵탕","닭똥집볶음","순대볶음","토스트","또띠아","떡꼬치","쿠키","떡볶이","호떡","샌드위치","시리얼","팝시클","라면","토마토스파게티","크림스파게티","봉골레스파게티","잔치국수","비빔국수","칼국수","우동","볶음우동","콩국수","전복죽","추어탕","장어구이","낙지연포탕","갈비탕","훈제오리","닭죽","삼계탕","더덕구이","오니기리","캘리포니아롤","스시","유부초밥","밥버거","스팸","볶음밥","투움바파스타","김밥","알로하김밥","호두크림치즈김밥","바나나쉐이크","닭가슴살샐러드","리코타치즈","단호박스프","양배추스프","두부스테이크","연어덮밥","오차즈케","불고기브리또","샐러드파스타","크로크무슈","몬테크리스토","팬케이크","치킨마요덮밥","오믈렛","프렌치토스트","조개스프","에그베네딕트","만둣국","떡국","라자냐","칠리새우","잡채","누룽지","고추장찌개","포테이토피자","냉채라면","짜파구리","진라면","달걀","야채볶음","프리타타","계란말이","계란찜","스카치에그","스터프드에그","깐풍기","탕수육","두루치기","제육볶음","동파육","중국집볶음밥","잡채밥","짬뽕밥","짬뽕","삼선짜장","삼선짬뽕","쟁반짜장","닭갈비","치킨까스","돈까스","치즈돈까스","고구마치즈돈까스","주먹밥","리조또","크로켓","덴푸라","가츠동","하이라이스","오코노미야끼","미소시루","우동","규동","라멘","마파두부","고추잡채","곱창","막창","대창","해물파전","파전","쌈밥","칼국수","수제비","팥죽","그라탕","뇨끼","나폴리피자","페투치니알프레도","파니니","팟타이","카오팟","나시고랭","쌀국수","연유라떼","분짜","짜조","반미(바게트샌드위치)","허머스","팔라펠","케밥","삭슈카","페투쉬","필라프","쿠스쿠스","피타","무사카","맥앤치즈","클램차우더","핫도그","햄버거","불고기버거","빅맥","상하이버거","미트로프","후라이드치킨","양념치킨","간장치킨","닭강정","잠발라야","바비큐","라타투이","프렌치토스트","뵈프부르기뇽","뱅쇼","크로크무슈","마카롱","부야베스","끼슈","코코뱅","가리가리군", "가리비", "거북알", "거북이", "고드름", "구구콘", "깐도리", "꽃게랑", "누가바", "대롱대롱", "더블비얀코", "더위사냥", "돼지바", "마카롱아이스바", "말랑카우", "메로나", "바밤바", "보석바", "부라보콘", "붕어싸만코", "비비빅", "빅바", "빙빙바", "빠삐코", "빵또아", "빵빠레", "뽕따", "설레임", "셀렉션", "슈퍼콘", "쌍쌍바", "아맛나", "아시나요", "아이스파인", "엑설런트", "엔초", "요맘때", "옥메와까", "옥동자", "메가톤바", "와일드바디", "까마쿤", "와(아이스크림)", "와삭바", "울퉁불퉁", "월드콘", "조안나", "죠크박", "죠스바", "스크류바", "수박바", "쮸쮸바", "찬호박", "찰떡아이스", "캔디바", "쿠앤크", "쿠키오", "탱크보이", "테트리스", "토끼", "투게더", "티코", "폴라포", "하겐다즈", "호두마루", "홈런볼 아이스", "하겐다즈", "레드망고", "나뚜루", "구스띠모", "베스킨라빈스31","롯데리아","맥도날드","치즈버거","버거킹","족발","백숙","삼겹살","보쌈","육회","육사시미","육회비빔밥","순대","홍어회","물회","굴비","매운탕","북엇국","해물찜","오징어볶음","아귀찜","골뱅이무침","빈대떡","호박전","육전","동래파전","수제비","떡국","떡만둣국","시래기국","선지국","순댓국","소머리국밥","콩나물국밥","화채","토란국","재첩국","곰탕","닭곰탕","설렁탕","연포탕","닭도리탕","고기국수","막국수","비빔국수","김치말이국수","칼국수","초계국수","도토리묵","밀면","냉면","찹쌀도넛","회오리감자","너비아니","뒷고기","전복죽","야채죽"];
                var rannum = Math.floor(Math.random()*list.length);
                replier.reply(list[rannum]);
            }

            else if(msg.trim() == "@롤"){
                var list2 = ["AI전","솔랭","듀랭","자랭","일반","롤토체스"];
                var rannum2 = Math.floor(Math.random()*list2.length);
                replier.reply(list2[rannum2]);
            }


            else if(msg.indexOf("/검색 ") == 0 ){
                replier.reply("https://m.search.naver.com/search.naver?query="+msg.replace("/검색 ","")+"&where=m&sm=mtp_hty");
            }

            else if(msg.indexOf("/롤전적 ") == 0 ){
                replier.reply("https://www.op.gg/summoner/userName="+msg.replace("/롤전적 ","")+"");
            }

            else if (msg.trim() =="/배터리"){
                var fill=["알수없음","충전중","충전중 아님","충전완료 후 충전중 아님","충전 완료"]; 
                var ifilter = new android.content.IntentFilter(android.content.Intent.ACTION_BATTERY_CHANGED);
                var batteryStatus = Api.getContext().registerReceiver(null, ifilter);
                var battery=batteryStatus.getIntExtra(android.os.BatteryManager.EXTRA_STATUS, -1);
                var voltage=batteryStatus.getIntExtra(android.os.BatteryManager.EXTRA_VOLTAGE, -1);
                var level = batteryStatus.getIntExtra(android.os.BatteryManager.EXTRA_LEVEL, -1);
                var scale = batteryStatus.getIntExtra(android.os.BatteryManager.EXTRA_SCALE, -1);
                var am = Api.getContext().getSystemService(Api.getContext().ACTIVITY_SERVICE);
                var mem = new android.app.ActivityManager.MemoryInfo();
                am.getMemoryInfo(mem);
                var temp = batteryStatus.getIntExtra(android.os.BatteryManager.EXTRA_TEMPERATURE, -1);
                var ms1=java.lang.System.currentTimeMillis();
                var ms2=java.lang.System.currentTimeMillis();
                var ps=(((ms2-ms1)/1000)+"초");
                replier.reply ("전원 : 켜짐\n현재상태 : "+fill[battery-1]+"\n램 : " + (mem.availMem/mem.totalMem*100).toFixed(2) + "% 남음\n배터리 : " + Math.round(level/scale*100) + "%\n온도 : " + Math.round(temp)/10 + "°C\n전압 : "+voltage+"mv");
            }


            else if (msg.trim() == "/날씨") { 
                var data = Utils.getWebText("https://m.search.naver.com/search.naver?query=날씨"); 
                var data2 = data.split("전국날씨"); 
                var data3 = data2[1].split("특보"); 
                var data4 = data3[0].replace(/(<([^>]+)>)/g, ""); 
                data4 = data4.trim(); 
                data4 = data4.replace(/ /g, ""); 
                data4 = data4.replace(/도씨/g, "℃"); 
                data4 = data4.replace(/ /g, ", "); 
                replier.reply("[현재 날씨]\n" + data4); 
            }

            else if(msg.indexOf("ㅅㅂ") != -1||msg.indexOf("ㅄ") != -1||msg.indexOf("씨발") != -1||msg.indexOf("시발") != -1||msg.indexOf("ㅂㅅ") != -1||msg.indexOf("병신") != -1||msg.indexOf("ㅈㄹ") != -1||msg.indexOf("지랄") != -1||msg.indexOf("ㄴㅇㅁ") != -1||msg.indexOf("니엄마") != -1||msg.indexOf("너검마") != -1||msg.indexOf("니애미") != -1){
                replier.reply("욕을 감지했습니다.");
            }


            else if(msg.trim() == "/명령어"){
                replier.reply("@1\n프로필\n점심\n저녁\n@롤\n/검색 검색할단어\n/배터리\n/롤전적 닉네임\n/나무 검색어\n/날씨\n/명령어\n/업데이트");
            }


            else if(msg.trim() == "/업데이트"){
                replier.reply("2019년 7월 22일에 마지막으로 수정 했습니다.");
            }
            else if(msg.trim() == "/test"){
                replier.reply(preMsg[room]);
            }
        } 
    }

    function onStartCompile(){
    /*컴파일 또는 Api.reload호출시, 컴파일 되기 이전에 호출되는 함수입니다.
    *제안하는 용도: 리로드시 자동 백업*/

    }

    //아래 4개의 메소드는 액티비티 화면을 수정할때 사용됩니다.
    function onCreate(savedInstanceState,activity) {
    var layout=new android.widget.LinearLayout(activity);
    layout.setOrientation(android.widget.LinearLayout.HORIZONTAL);
    var txt=new android.widget.TextView(activity);
    txt.setText("액티비티 사용 예시입니다.");
    layout.addView(txt);
    activity.setContentView(layout);
    }
    function onResume(activity) {}
    function onPause(activity) {}
    function onStop(activity) {}

     

     

    댓글

Designed by Tistory.