세라봇 & Web
수동학습 소스 (FileStream) 본문
+ 설명 : 봇에게 학습내용을 적어서 학습시키는 소스 |
- 명령어 -> 할말 -> 대답할말 순서로 간단히 학습가능 |
- 학습목록 출력 |
- 학습내용 선택삭제 |
- 학습내용 전부삭제 (해쉬코드가 없는 유저는 자신의 학습내용만 삭제) |
- 학습내용 검색가능 (작성자, 할말, 대답할말 기준 각각 검색가능) |
@ 사용방법 |
1. 채팅내용파일이 저장될 경로를 수정하고 컴파일 해주세요. (본문의 한글경로 수정을 추천합니다) |
2. 채팅창에 ..hash 를 입력하여 나온 해시코드를 복사하세요. (해시코드 적용 후 해시코드 명령어 라인은 주석처리 해주세요) |
3. 복사한 해시코드를 소스에 넣으세요. |
4. 명령어부분들을 자신이 쓸 명령어로 바꾸고 컴파일 해주세요. |
5. 채팅창에 ..수동학습설치 를 입력하세요. (파일생성 완료 메시지가 뜨면 성공!) |
6. 설정한 학습시작 명령어를 입력하고 사용. (최초 설치 시 저장기능이 꺼진상태입니다) |
/*
- 2020. 09. 20 - https://kkyuya.tistory.com
- 세팅값의 데이타경로를 가장먼저 수정해주세요
- 최초 1회 설치명령어(..수동학습설치) 작동 필수
*/
//-----------------------
// 고정값 (변경금지)
//-----------------------
const li= "\n---------------------------------------------\n"; //문단경계선
const more ="\u200b".repeat(500); //..더보기
const FS = FileStream; //파일스트림 단축
var word='';
var step=[];
var a=[], b=[], c=[], user=[];
//-------------------------
// 세팅값 (반드시 수정)
//-------------------------
const myHash=[해시코드넣는곳]; //해시코드 (모를 경우 카톡에 "..hash" 명령어를 입력하여 확인
//해시코드가 여러개일 경우 ,로 구분해서 넣음 (예: [123456,456789])
const path = "/sdcard/메신저봇폴더/Bots/스크립트네임/Data/data.txt"; //데이타 경로
//----------------------
// 명령어
//----------------------
// (변경해서 쓰기를 권장)
const help='..수동학습' // 수동학습 도움말 출력
const start='..학습' // 수동학습 시작
const cancel='..취소' // 수동학습 취소 (학습중일때만 작동함)
const list='..학습목록' // 학습목록 출력
const del='..학습삭제 ' // 학습삭제 명령 접두어
const allDel='..학습초기화' // 자신의 학습내용 모두 삭제 (해시코드를 넣은사람이 사용 시 모든학습내용 삭제)
const Q='..학습Q ' // 학습목록 Q에 해당하는내용 검색 명령 접두어
const A='..학습A ' // 학습목록 A에 해당하는내용 검색 명령 접두어
const N='..학습이름 ' // 작성자의 이름 검색 명령 접두어
function response(room, msg, sender, iGC, replier, imageDB,) {
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)); //채팅내역파일 불러오기
if(check==null){ //경로에 파일이 없으면
FS.write(path, JSON.stringify(data)); //채팅내역파일에 빈배열만 담고 저장
replier.reply("[!] 수동학습 기본파일 생성 완료!");
} else replier.reply("[!] 이미 설치되었어요!"); //경로에 파일이 있을시 실행
}
// 도움말 출력
if(msg==help) replier.reply("💭 수동학습 도움말"+more+li+
start+' : 학습을 시작합니다\n'+
cancel+' : 학습을 취소합니다\n'+
list+' : 학습한 말을 모두 출력합니다\n'+
del+' (번호) : 목록에서 해당번호의 내용을 삭제합니다\n'+
allDel+' : 자신이 학습시킨 내용을 모두 삭제합니다\n\n'+
Q+' (검색단어) : 목록의 Q에 해당하는 내용을 검색합니다\n'+
A+' (검색단어) : 목록의 A에 해당하는 내용을 검색합니다\n'+
N+' (검색단어) : 작성자의 이름으로 검색합니다\n\n\
- 사용법\n\
1. "'+start+'" 명령어로 수동학습 시작.\n\
2. 봇이 반응할 말을 적습니다.\n\
3. 봇이 대답할 말을 적습니다.\n\n\
[!] 학습삭제와 초기화는 자신이 학습시킨 내용만 지울 수 있습니다.');
// 수동학습 시작
if(msg==start){
replier.reply("[!] 봇이 반응할 말을 입력하세요!");
step[sender]=1;
return;
}
// 수동학습 step1.
if(step[sender]==1){
if(msg){
word=JSON.parse(FS.read(path));
for(let i=0; i<word.length; i++){
if(msg==word[i][0]){
replier.reply("[!] 같은 말이 이미 있어요!\n 다른 말을 입력해 주세요!");
return;
}
}
if(msg.startsWith('..')||msg.startsWith('/')){ // 사용불가능 접두어 설정(유저가 할 말)
replier.reply("사용할 수 없는 접두어가 포함되었어요!");
return;
}
a[sender]=[msg];
replier.reply("[!] 봇이 할 말을 입력하세요!");
step[sender]=2;
return;
}
}
// 수동학습 step2.
if(step[sender]==2){
if(msg){
if(msg==cancel){
step[sender]=0;
a[sender]=[]; b[sender]=[]; c[sender]=[];
user=[]; word='';
replier.reply("[!] 학습을 취소했어요!");
return;
}
if(msg.startsWith('..')||msg.startsWith('/')){ // 사용불가능 접두어 설정(봇이 할 말)
replier.reply("[!] 사용할수 없는 접두어가 포함되었어요!");
return;
}
word=JSON.parse(FS.read(path));
b[sender]=[msg];
user=[sender];
c[sender]=[];
c[sender].push(a[sender]);
c[sender].push(b[sender]);
c[sender].push(user);
word.unshift(c[sender]);
replier.reply('• Q : '+c[sender][0]+'\n• A : '+c[sender][1]);
FS.write(path, JSON.stringify(word));
step[sender]=0;
a[sender]=[]; b[sender]=[]; c[sender]=[];
user=[];
return;
}
}
// 학습 취소
if(msg==calcel && step[sender]==1){
step[sender]=0;
a[sender]=[]; b[sender]=[]; c[sender]=[];
user=[]; word='';
replier.reply("[!] 학습을 취소했어요!");
return;
}
// 리스트 출력
if(msg==list){
word=JSON.parse(FS.read(path));
let z='';
for(let i=0; i<word.length; i++){
let j=i+1;
let x=j+'. 작성자 : '+word[i][2]+'\n Q : '+word[i][0]+'\n A : '+word[i][1]+'\n\n';
z+=x;
}
replier.reply('💭 학습목록'+more+li+z);
}
// Q 기준 검색
if(msg.startsWith(Q)){
word=JSON.parse(FS.read(path));
let q=msg.substr(Q.length);
let y=[];
for(let i=0; i<word.length; i++){
let j=i+1;
if(word[i][0].some(e=>e.indexOf(q)!=-1)==true) y.push(j+'. 작성자 : '+word[i][2]+'\n Q : '+word[i][0]+'\n A : '+word[i][1]);
}
if(y.length==0) replier.reply("[!] 검색결과가 없어요!");
else{
let z='';
for(let i=0; i<y.length; i++){
let r=y[i]+'\n\n';
z += r;
}
replier.reply('💭 Q. "'+q+'.." 검색결과'+more+li+z);
}
}
// A 기준 검색
if(msg.startsWith(A)){
word=JSON.parse(FS.read(path));
let q=msg.substr(A.length);
let y=[];
for(let i=0; i<word.length; i++){
let j=i+1;
if(word[i][1].some(e=>e.indexOf(q)!=-1)==true) y.push(j+'. 작성자 : '+word[i][2]+'\n Q : '+word[i][0]+'\n A : '+word[i][1]);
}
if(y.length==0) replier.reply("[!] 검색결과가 없어요!");
else{
let z='';
for(let i=0; i<y.length; i++){
let r=y[i]+'\n\n';
z += r;
}
replier.reply('💭 A. "'+q+'.." 검색결과'+more+li+z);
}
}
// 작성자 기준 검색
if(msg.startsWith(N)){
word=JSON.parse(FS.read(path));
let q=msg.substr(N.length);
let y=[];
for(let i=0; i<word.length; i++){
let j=i+1;
if(word[i][2].some(e=>e.indexOf(q)!=-1)==true) y.push(j+'. 작성자 : '+word[i][2]+'\n Q : '+word[i][0]+'\n A : '+word[i][1]);
}
if(y.length==0) replier.reply("[!] 검색결과가 없어요!");
else{
let z='';
for(let i=0; i<y.length; i++){
let r=y[i]+'\n\n';
z += r;
}
replier.reply('💭 작성자. "'+q+'.." 검색결과'+more+li+z);
}
}
// 학습 삭제
if(msg.startsWith(del)){
try{
word=JSON.parse(FS.read(path));
var no=Number(msg.substr(del.length))-1;
if(myHash.includes(Hash)){
replier.reply('Q. '+word[no][0]+'\nA. '+word[no][1]+'\n[!] 학습내용 삭제 완료!');
word.splice(no,1);
}
else if(sender!=word[no][2]) replier.reply('[!] 자신이 작성한 것만 지울수 있어요!');
else {
replier.reply('Q. '+word[no][0]+'\nA. '+word[no][1]+'\n[!] 학습내용 삭제 완료!');
word.splice(no,1);
}
FS.write(path, JSON.stringify(word));
} catch(e){}
}
// 학습 초기화
if(msg==allDel){
word=JSON.parse(FS.read(path));
if(myHash.includes(Hash)){
word=[];
FS.write(path, JSONstringify(word));
replier.reply("[!] 학습내용을 모두 삭제했어요!");
}
else{
for(let i=0; i<word.length; i++){
if(word[i][2]==sender) word.splice(i,1);
}
FS.write(path, JSONstringify(word));
replier.reply("[!] "+sender+"님의 학습내용을 모두 삭제했어요!");
}
}
// 학습내용 감지소스
word=JSON.parse(FS.read(path));
for(let i=0; i<word.length; i++){
if(msg==word[i][0]) replier.reply(word[i][1]);
}
}
'카톡봇 프로그래밍 > 소스' 카테고리의 다른 글
낚시게임 (13) | 2021.01.04 |
---|---|
채팅내역 저장/출력 (FileStream) (0) | 2020.09.20 |
Comments