세라봇 & Web

채팅내역 저장/출력 (FileStream) 본문

카톡봇 프로그래밍/소스

채팅내역 저장/출력 (FileStream)

Kkyuya 2020. 9. 20. 02:20
+ 설명 : 각 방의 채팅내용을 자동으로 저장
- 채팅목록 표시
- 채팅감지 On/Off 가능
- 채팅전부삭제
- 채팅 쓴 사람의 이름으로 검색가능
- 채팅내용으로 검색가능
@ 사용방법

1. 채팅내용파일이 저장될 경로를 수정하고 컴파일 해주세요.

(해당 스크립트파일이 있는곳의 Data폴더 아래를 추천합니다)
(끝에 /(슬래시) 꼭 붙여야해요)

2. 채팅창에 ..hash 를 입력하여 나온 해시코드를 복사하세요.
(해시코드 사용 후에는 주석처리 해주세요)
3. 복사한 해시코드를 소스에 넣으세요.
4. 명령어부분들을 자신이 쓸 명령어로 바꾸고 컴파일 해주세요.

5. 사용할 방에서 채팅창에 ..채팅설치 를 입력하세요.

(파일생성 완료 메시지가 뜨면 성공!)

(설치된 방에선 더이상 파일생성이 되지않으니 안심하세요)

6. 설치된 방에서 설정하신 채팅on 명령어를 입력하세요.

(최초 설치 시 저장기능이 꺼진상태입니다)

 

/*
- 2020. 09. 12 - https://kkyuya.tistory.com
- 모든 기능은 방마다 따로 작동됨.
- 각 방마다 최초 1회 설치명령어(..채팅설치) 작동 필수
*/
const scriptName = "T..채팅저장";
const li= "\n---------------------------------------------\n"; //문단나누기
const more ="\u200b".repeat(500); //유니코드 띄어쓰기 500개 추가
const FS = FileStream; //파일스트림
var save=[]; //채팅내역 임시저장하는 곳
var search=[]; //검색된 채팅내역 임시저장하는 곳
var a={}; //채팅내역 객체 (key = name, content, time)
var On=''; //저장기능 on/off 변수

//----------------------
//        세팅값
//----------------------
const path = "/sdcard/메신저봇폴더/Bots/스크립트네임/Data/"; //데이타 경로(끝에 "/" 필수)
const myHash=[해시코드넣는곳]; //해시코드 (모를 경우 카톡에 "..hash" 명령어를 입력하여 확인)
const chatNum=300; //저장할 채팅 갯수

//----------------------
//        명령어
//----------------------
// (변경해서 쓰기를 권장)
const help='..채팅내역'; //도움말 출력
const on='..채팅On'; //채팅저장기능 켜기 (해쉬코드 적용된 사람만 적용)
const off='..채팅Off'; //채팅저장기능 끄기 (해쉬코드 적용된 사람만 적용)
const result='..채팅'; //채팅내역 출력
const del='..채팅초기화'; //채팅내역 모두 삭제 (해쉬코드 적용된 사람만 적용)
const search_name='..채팅이름 '; //이름 기준으로 검색. (startsWith 적용)
const search_content='..채팅내용 '; //채팅내용 기준으로 검색. (startsWith 적용)

function response(room, msg, sender, isGroupChat, replier, imageDB, packageName) {
var Hash = java.lang.String(imageDB.getProfileImage()).hashCode();
if (msg=="..hash") replier.reply(Hash);

// 설치하기 (각 방마다 최초 1회 실행)
if(msg=='..채팅설치'){
    let data=[]; //빈배열 생성
    let check = JSON.parse(FS.read(path+room+"/data.txt")); //채팅내역파일 불러오기
    if(check==null){ //경로에 파일이 없으면
        let a=0; //저장기능 on/off 확인용. (on:1, off:0)
        FS.write(path+room+"/data.txt", JSON.stringify(data)); //채팅내역파일에 빈배열만 담고 저장
        FS.write(path+room+"/On.txt", JSON.stringify(a)); //저장기능활성 확인파일을 off상태로 저장
        replier.reply("[!] 채팅내역 기본파일 생성 완료!\n[!] 방 : "+room);
    } else replier.reply("[!] 이미 설치된 방이예요!"); //경로에 파일이 있을시 실행
}


// 도움말 출력
if(msg==help) replier.reply('💬 채팅내역 도움말'+more+li+
result+' : 최근 채팅내역을 '+chatNum+'개까지 보여줘요\n'+
search_name+' (이름) : 지정한 사람의 최근 채팅내역을 모두 보여줘요\n'+
search_content+' (내용) : 특정내용이 포함된 최근 채팅내역을 모두 보여줘요');

// 채팅저장기능 On
if(msg==on && myHash.indexOf(Hash)!=-1){
	let a=1;
 FS.write(path+room+"/On.txt", JSON.stringify(a));
	replier.reply("- Chat Record : On\n- Room : "+room);
}

// 채팅저장기능 Off
if(msg==off && myHash.indexOf(Hash)!=-1){
    let a=0;
	FS.write(path+room+"/On.txt", JSON.stringify(a));
	replier.reply("- Chat Record : Off\n- Room : "+room);
}

// 채팅저장갯수를 초과시 오래된 채팅 버리기
try{
    save = JSON.parse(FS.read(path+room+"/data.txt"));
    if(save.length>chatNum) save.length=chatNum;
    FS.write(path+room+"/data.txt", JSON.stringify(save));
} catch(e){}

// 채팅내역 객체화하여 저장
if(!msg.startsWith(result)){ //채팅내역출력 명령어로 시작하는 단어는 저장하지 않음
    On = FS.read(path+room+"/On.txt");
    if(On==1){
	var mainTime=Date.now(); //현재시간 선언
	var date=new java.text.SimpleDateFormat("[yyyy-MM-dd, hh:mm:ss]").format(new Date()); //현재시간 커스텀
    save = JSON.parse(FS.read(path+room+"/data.txt"));
	a={'name':sender, 'content':msg, 'time':date}; //저장할 내용 객체화
	save.unshift(a); //채팅내역의 맨앞으로 저장
    FS.write(path+room+"/data.txt", JSON.stringify(save));
    }
}

// 채팅내역 삭제
if(msg==del && myHash.indexOf(Hash)!=-1){
try{
    save = JSON.parse(FS.read(path+room+"/data.txt"));
    save=[];
    FS.write(path+room+"/data.txt", JSON.stringify(save));
    replier.reply("[!] 채팅내역을 모두 삭제했어요!");
} catch(e){}
}

// 채팅내역 출력
if(msg==result){
try{
    On = FS.read(path+room+"/On.txt");
	   if(On==0) replier.reply('[!] 채팅저장 기능이 꺼져 있어요!');
    else{
        save = JSON.parse(FS.read(path+room+"/data.txt"));
        let z='';
        for(let i=0; i<save.length; i++){
            var input='• '+save[i].name+' '+save[i].time+'\n• '+save[i].content+'\n\n';
            z+=input;
        }
        replier.reply("💬 채팅 내역"+more+li+z);
    }
} catch(e){}
}

// 이름별 채팅내역 출력
if(msg.startsWith(search_name)){
try{
    On = FS.read(path+room+"/On.txt");
    if(On==0) replier.reply('[!] 채팅저장 기능이 꺼져 있어요!');
    else{
        save = JSON.parse(FS.read(path+room+"/data.txt"));
        let user=msg.substr(search_name.length);
        let lt=user.length-1;
        z='';
        for(let i=0; i<save.length; i++){
            if(save[i].name.indexOf(user)!=-1) search.push(save[i]);
        }
        for(let i=0; i<search.length; i++){
            input='• '+search[i].name+' '+search[i].time+'\n• '+search[i].content+'\n\n';
            z+=input;
        }        
        if(user[lt].normalize("NFD").length==3) replier.reply("💬 채팅 내역"+more+li+' "'+user+'"이 포함된 분의 최근 발신내역\n\n'+z);
        else replier.reply("💬 채팅 내역"+more+li+' "'+user+'"가 포함된 분의 최근 발신내역\n\n'+z);
        search=[];
    }
} catch(e){}
}

// 내용별 채팅내역 출력
if(msg.startsWith(search_content)){
try{
    On = FS.read(path+room+"/On.txt");
    if(On==0) replier.reply('[!] 채팅저장 기능이 꺼져 있어요!');
    else{
        save = JSON.parse(FS.read(path+room+"/data.txt"));
        let con=msg.substr(search_content.length);
        z='';
        for(let i=0; i<save.length; i++){
            if(save[i].content.indexOf(con)!=-1) search.push(save[i]);
        }
        for(let i=0; i<search.length; i++){
            input='• '+search[i].name+' '+search[i].time+'\n• '+search[i].content+'\n\n';
            z+=input;
        }
        replier.reply("💬 채팅 내역"+more+li+' "'+con+'.."의 검색결과\n\n'+z);
        search=[];
    }
} catch(e){}
}
}

- 사용화면 예시 1 -
- 사용화면 예시 2 -

'카톡봇 프로그래밍 > 소스' 카테고리의 다른 글

낚시게임  (13) 2021.01.04
수동학습 소스 (FileStream)  (1) 2020.09.20
Comments