※ 이 강좌는 메신저봇R 기준으로 제작되었습니다 ※
먼저 파일 스트림 함수를 알아봅시다.
FileStream.read("/sdcard/경로"); //경로에 있는 파일을 읽습니다.
FileStream.write("/sdcard/경로", 데이터); //경로에 데이터를 씁니다.
FileStream.append("/sdcard/경로", "데이터") //경로에 데이터를 이어 씁니다.
FileStream.remove("/sdcard/경로") //경로를 삭제합니다.
이제 어느 정도 아시겠죠?
이걸로 어떻게 데이터를 쓰는가요?
저희가 전에 만들었던 RPG JSON 있죠?
그거 말고 저희는 오늘 프로필 이미지 해시 코드만 저장해보겠습니다.
그거를
let data = {
"ProfileImageHashCode":java.lang.String(ImageDB.getProfileImage()).hashCode()
};
FileStream.write("/sdcard/DataBase/", JSON.stringify(data))
이런 식으로 저장할 수 있습니다.
불러오는 방법은 저번에도 말씀드렸겠죠..?(아마도..?)
더 쉽게 설명해드리자면,
상자가 있어요 그 상자는 JSON에서 이렇게 표현됩니다. => {}
그 상자 안에 "와우"라는 이름을 가진 상자가 또 있어요 그 상자는 JSON에서 이렇게 표현됩니다. => {"와우":{}}
그 상자 안에 "와우"라는 이름을 가진 상자가 있고, "와이"라는 이름을 가진 상자가 있어요, 그 상자는 JSON에서 이렇게 표현됩니다 => {"와우":{}, "와이":{}}
그 상자 안에 "와우"라는 이름을 가진 상자와 "와이"라는 이름을 가진 상자 중 "와우"라는 상자 안에 이름이 "하후하" 라는 종이가 있어요 그 종이에는 "하하하"라는 문자열이 적혀있어요. 그 상자는 JSON에서 이렇게 표현됩니다.
=> {"와우":{"하후하":"하하하"}, "와이":{}}
그 상자 안에 "와우"라는 이름을 가진 상자와 "와이"라는 이름을 가진 상자 중 "와우"라는 상자 안에 이름이 "하후하" 라는 종이가 있고, 이름이 "가나다라마바사"라는 스코어 보드판이 있어요, 그 스코어보드 판에는 3이 적혀있어요, 그리고 "하후하"라는 이름의 종이에는 "하하하"라는 문자열이 적혀있어요. 그 상자는 JSON에서 이렇게 표현됩니다.
=> {"와우":{"하후하":"하하하", "가나다라마바사":3}, "와이":{}}
이해가 되셨나요?
이렇게 {} , : " " ' '를 왜 이렇게 복잡하게 쓰는지 이해가 되셨겠죠?
JSON에 "그 상자 안에 "와우"라는 이름을 가진 상자와 "와이"라는 이름을 가진 상자 중 "와우"라는 상자 안에 이름이 "하후하" 라는 종이가 있고, 이름이 "가나다라마바사"라는 스코어 보드판이 있어요, 그 스코어보드 판에는 3이 적혀있어요, 그리고 "하후하"라는 이름의 종이에는 "하하하"라는 문자열이 적혀있어요." 이렇게 적을 수는 없잖아요..ㅠㅠ
나중에 BINSON이라고 해서 저렇게 만들겁니ㄷ..
음.. 그런데 JSON에도 종이, 스코어보드,, 이거 말고 하나 더 있는데 뭘까요? 맞춰보세요오~
바로~ False, True입니다! 참과 거짓이에요
이렇게
스코어보드 => Number
종이 => String
참과 거짓(?) => Boolean
이라고 합니다.
자, 이제 "1"은 Number일까요? 아닐까요?
아닙니다! 왜냐면 앞에 " 따옴표나 큰따옴표가 있으면, 종이(String)이라는 뜻이에요
자, 그럼 1은 Number일까요?
네 맞아요, 왜냐면 큰따옴표나 따옴표 없이 그냥 숫자만 있으니까요!
근데 이러면 String을 Number로 어떻게 바꿀까요?, 바로 Number("스트링") 함수로 바꿀 수 있습니다!
이제 데이터를 저장해볼게요.
FileStream.write("자신이 데이터를 저장하고 싶은 장소와 파일명", 저장할 데이터);
이렇게 하면 됩니다. 그런데, 자신이 저장하고 싶은 장소와 파일명은 구별할 수 있는 이름으로 해야 하지 않을까요?
저는 DB를 쓰지만 전에는 DB를 쓰지 않았어요, 그러니, 프로필 해시 코드를 사용하면 됩니다.
let data = {
"ProfileImageHashCode":java.lang.String(ImageDB.getProfileImage()).hashCode()
};
FileStream.write("/sdcard/DataBase/", JSON.stringify(data))
아까 말씀드린 것처럼 이렇게 하면 됩니다.
이걸 커맨드로 바꿔보면
function response(room, msg, sender, isGroupChat, replier, imageDB, packageName) {
if (msg.startsWith("!")) {//자신의 명령어 접두사 쓰세요
let Hashcode = java.lang.String(ImageDB.getProfileImage()).hashCode();
let data = {
"ProfileImageHashCode":Hashcode
};
if (msg=="!계정생성) {
FileStream.write("/sdcard/DataBase/" + Hashcode + ".json", JSON.stringify(data));
}
if (msg=="!계정삭제) {
FileStream.remove("/sdcard/DataBase/" + Hashcode + ".json");
}
if (msg=="!계정정보") {
let userdata = JSON.parse(FileStream.read("/sdcard/DataBase/" + Hashcode + ".json"));
replier.reply("당신의 프로필 해시코드 : " userdata.ProfileImageHashCode);
}
}
}
어우.. 이렇게 해봤는데 귀찮아서 실험을 안 해봤네요 참고용으로 사용하시면 좋을 것 같아요. 따로 저장하는 데이터는 바꾸셔도 됩니다.
잘못됐거나 위 소스에 오류가 있다면 빨리 고치겠습니다. 댓글 남겨주세요~!!
다음 강좌가 올라오면 아래 바로가기를 추가해드릴게요!
'카톡봇 🤖 > 강좌 👨🏫' 카테고리의 다른 글
카톡봇 13분만에 성능 늘리고 최적화 하기 (0) | 2021.02.11 |
---|---|
[ 강좌 ] 카카오링크 강좌(API를 사용하여 봇으로 전송하기!) #1 (1) | 2021.02.11 |
[ 강좌 ] 가상 전화번호 만들어서 카카오톡 부계정 만들기(2021) (0) | 2021.01.10 |
[ 강좌 ] 2. RPG 계정 정보를 JSON으로 알아보기 (0) | 2021.01.09 |
[ 강좌 ] 1. JSON에 대해 (2) | 2021.01.06 |