kakao bot 이전닉네임 확인
- 목차
반응형
- 구동 환경
- OS : Android7
- 루팅여부 : O
- 사용 프로그램 : 카카오봇 ( 메신저R ) - 구동방식
- 모바일내 DB 구축후 카카오톡 오픈톡에 접근하는 모든 계정의 닉네임,접속시간,CODE 를 저장
- 변동이 되지않는 CODE 를 기준으로 닉네임 변동여부, 이전 들어왔던 이력을 조회하여 출력합니다.
- 테스트는 오픈톡에서 진행되었으며, 봇이 동작하는 핸드폰이 루팅되어있어야 가능합니다. - 일부 코드
들낙봇 테스트 오픈채팅방 : https://open.kakao.com/o/g6kWBswe
const scriptName = "#봇 스크립트명";
const talk_package_Name = "com.kakao.talk";//com.kakao.talk이나 com.kakao.tall 일껍니다
const DB_update_Time = 1000;//1000 == 1초
const Context = android.content.Context;
const SQLiteDatabase = android.database.sqlite.SQLiteDatabase;
const DatabaseUtils = android.database.DatabaseUtils;
const PowerManager = android.os.PowerManager;
const Base64 = android.util.Base64;
const ProcessBuilder = java.lang.ProcessBuilder;
const Process = java.lang.Process;
const InputStreamReader = java.io.InputStreamReader;
const OutputStreamReader = java.io.OutputStreamReader;
const BufferedReader = java.io.BufferedReader;
const ArrayList = java.util.ArrayList;
const _Array = java.lang.reflect.Array;
const _Byte = java.lang.Byte;
const _Integer = java.lang.Integer;
const Runtime = java.lang.Runtime;
const _String = java.lang.String;
const Timer = java.util.Timer;
const TimerTask = java.util.TimerTask;
const Cipher = javax.crypto.Cipher;
const IvParameterSpec = javax.crypto.spec.IvParameterSpec;
const System = java.lang.System;
const PBEKeySpec = javax.crypto.spec.PBEKeySpec;
const SecretKeyFactory = javax.crypto.SecretKeyFactory;
const SecretKeySpec = javax.crypto.spec.SecretKeySpec;
const JSONObject = org.json.JSONObject;
const MY_KEY = " #MY_KEY ";// MYKEY 위치 : KakaoTalk2.db->open_profile->user_id
DatabaseWatcher.prototype = {
start: function() {
if (this.looper == null) {
Log.debug("looper is null");
this.looper = new Timer();
this.looper.scheduleAtFixedRate(new TimerTask({
run: function() {
try {
if (!Api.isOn(scriptName)) {
watcher.stop();
return;
}
let count = DatabaseUtils.queryNumEntries(db, "chat_logs", null);
if (this.pre == null) {
Log.d("정상적으로 작동중 입니다.");
this.pre = count;
} else {
let change = count - this.pre;
this.pre = count;
if (change > 0) {
let stack = getRecentChatData(change);
while (stack.length > 0) {
let obj = stack.pop();
obj.message = decrypt(obj.user_id, obj.v.enc, obj.message);
var dateq = new Date();
var nowyearq = dateq.getFullYear();
var nowmonthq = dateq.getMonth()+1;
var nowdateq = dateq.getDate();
var nowhourq = dateq.getHours();
var nowminq = dateq.getMinutes();
var nowsecq = dateq.getSeconds();
let send_username = getUserInfo(obj.user_id, "name");
let room = getRoomName(obj.chat_id);
let send_userid = getUserInfo(obj.user_id, "id");
Log.d(obj.message);
DataBase.appendDataBase("( "+room+" )_( "+nowyearq+" 년 "+nowmonthq+" 월 "+nowdateq+" 일 )_message_log",',{"type":"[채팅]","name":"'+send_username+'","id":"'+send_userid+'","chat":"'+obj.message+'","time":"'+nowyearq+'년'+nowmonthq+'월'+nowdateq+'일'+nowhourq+'시'+nowminq+'분'+nowsecq+'초"}\n');
if (send_username == null)
send_username = "";
else if (obj.v.origin == "KICKMEM")
send_username = send_username + "님이 ";
else
send_username = send_username + "님 ";
if (obj.v.origin == "NEWMEM")
{
var date = new Date();
var nowyear = date.getFullYear();
var nowmonth = date.getMonth()+1;
var nowdate = date.getDate();
var nowhour = date.getHours();
var nowmin = date.getMinutes();
var nowsec = date.getSeconds();
Api.replyRoom(room,"[ 현재닉네임 ]\n[ "+ send_username +" ]\n[ ID : 개인정보 ]\n\n[입장]\n[ time ]\n"+nowyear+"년"+nowmonth+"월"+nowdate+"일"+nowhour+"시"+nowmin+"분"+nowsec+"초");
var databa = DataBase.getDataBase(room +".txt");
var datab = "["+ databa +"]";
var logchk = JSON.parse(datab);
var log_chk = new Array();
var id_count = 0;
for (var idx =0; idx < logchk.length; idx++ )
{
ids = logchk[idx].id.toString();
typesa = logchk[idx].type.toString();
userids = send_userid.toString();
if (ids == userids)
{
log_chk.push("구분: "+ logchk[idx].type +"\n이전 이름 : " + logchk[idx].name + " \n날짜\n"+ logchk[idx].time +" \n\n");
if ("[입장]" == logchk[idx].type)
{
id_count = id_count + 1 ;
}
}
}
if (log_chk != "")
{
Api.replyRoom(room,"[ 현재닉네임 : "+ send_username +" ]\n[ 총 "+ id_count +"건 확인 ]\n[이전입장 기록]\n"+ log_chk);
}
DataBase.appendDataBase(room,',{"type":"[입장]","name":"'+send_username+'","id":"'+send_userid+'","time":"'+nowyear+'년'+nowmonth+'월'+nowdate+'일'+nowhour+'시'+nowmin+'분'+nowsec+'초"}');
}
else if (obj.v.origin == "DELMEM" && JSONObject(obj.message).get("feedType") == 2){
var dates = new Date();
var nowyears = dates.getFullYear();
var nowmonths = dates.getMonth()+1;
var nowdates = dates.getDate();
var nowhours = dates.getHours();
var nowmins = dates.getMinutes();
var nowsecs = dates.getSeconds();
DataBase.appendDataBase(room,',{"type":"[퇴장]","name":"'+send_username+'","id":"'+send_userid+'","time":"'+nowyears+'년'+nowmonths+'월'+nowdates+'일'+nowhours+'시'+nowmins+'분'+nowsecs+'초"}');
Api.replyRoom(room, " [퇴장]\n"+send_username + "안녕히가세요!");
}
else if (obj.v.origin == "KICKMEM" || obj.v.origin == "DELMEM") {
obj.message = new JSONObject(obj.message);
let by = getUserInfo(obj.message.get("member").getString("userId"), "name");
if (by == null)
by = "";
else
by = by + "님을 ";
if (by == "" && send_username == ""){
var datess = new Date();
var nowyearss = datess.getFullYear();
var nowmonthss = datess.getMonth()+1;
var nowdatess = datess.getDate();
var nowhourss = datess.getHours();
var nowminss = datess.getMinutes();
var nowsecss = datess.getSeconds();
DataBase.appendDataBase(room,',{"type":"[퇴장]","name":"'+send_username+'","id":"'+send_userid+'","time":"'+nowyearss+'년'+nowmonthss+'월'+nowdatess+'일'+nowhourss+'시'+nowminss+'분'+nowsecss+'초"}');
Api.replyRoom(room," [퇴장]\n"+ "안녕히 가세요~!");
}
else
{
var datesss = new Date();
var nowyearsss = datesss.getFullYear();
var nowmonthsss = datesss.getMonth()+1;
var nowdatesss = datesss.getDate();
var nowhoursss = datesss.getHours();
var nowminsss = datesss.getMinutes();
var nowsecsss = datesss.getSeconds();
DataBase.appendDataBase(room,',{"type":"[강퇴]","name":"'+send_username+'","id":"'+send_userid+'","time":"'+nowyearsss+'년'+nowmonthsss+'월'+nowdatesss+'일'+nowhoursss+'시'+nowminsss+'분'+nowsecsss+'초"}');
Api.replyRoom(room, send_username + by + "강퇴하였습니다.");
}
} else if (obj.type == 26 && obj.message == "who") {
obj.attachment = new JSONObject(decrypt(obj.user_id, obj.v.enc, obj.attachment));
let userid = obj.attachment.getString("src_userId");
Api.replyRoom(room, "이름: " + getUserInfo(userid, "name") + "\n프로필 사진: " + getUserInfo(userid, "original_profile_image_url") + "\n상태 메시지: " + getUserInfo(userid, "status_message"));
} else if (obj.type == 26 && obj.message == "photolink") {
obj.attachment = new JSONObject(decrypt(obj.user_id, obj.v.enc, obj.attachment));
let chat_id = obj.attachment.get("src_logId");
let cursor = db.rawQuery("SELECT * FROM chat_logs WHERE id=" + chat_id, null);
cursor.moveToNext();
let userId1 = cursor.getString(4), msg1 = cursor.getString(6);
cursor.close();
let photo = decrypt(userId1, getUserInfo(userId1, "enc"), msg1);
photo = new JSONObject(photo);
Api.replyRoom(room, "링크: " + photo.get("url"));
}
}
}
}
} catch (e) {
Log.error(e.lineNumber + ": " + e);
}
- 2022-09-08 일부코드 삭제
들낙봇 테스트 오픈채팅방 : https://open.kakao.com/o/g6kWBswe
반응형
'포트폴리오' 카테고리의 다른 글
N사 블로그 로직파악을 좀더 편하게 도와드리는 프로그램 (베타) (0) | 2022.08.03 |
---|---|
실행사,대행사,마케팅 신규 업체 선발&발굴 (0) | 2022.08.03 |
마케팅 회사에서 꼭! 필요한 N사 댓글 자동화 ( 체험단 , 기자단 구인 ) (0) | 2022.08.03 |
마케팅으로 사용한다는 유효타 테스트 ( 연습용 ) (3) | 2022.08.03 |
N 사 Cafe 댓글작업 프로그램 (2) | 2021.06.22 |