덱은 하나(40장)만 사용합니다. 나눠줄 카드가 모두 떨어지게 되면(0장) 다시 새로운 덱을 사용합니다.
const {getLocalTime} = require('./util/wdate');
const {getInfoFromLink} = require('./util/wsteem');
const steem = require('steem');
const dateFormat = require('dateformat');
let getAuthor = source=>{
return source.split(' ')[0].substr(1);
}
let getCards = source=>{
let results = [];
let startIdx = 0;
let f;
while((f = source.indexOf('![', startIdx))>0){
results.push( source.substr(f+2, 3) );
startIdx = f + 1;
}
return results;
}
let getNum = (c1, c2) =>{
c1 = Number(c1.substr(1));
c2 = Number(c2.substr(1));
if(c1==c2){
return c1*2+10;
}
return (c1+c2)%10;
}
let findCard = arr=>{
// init arr
let marks = ['c','h','s','d']; // 클로버, 하트, 스페이드, 다이아몬드
let cards = {};
for(let i=1;i<=10;i++){
for(let m of marks){
cards[`${m}${i.toString().padStart(2, "0")}`] = 0;
}
}
// marking
for(let item of arr){
delete cards[item.c1];
delete cards[item.c2];
// cards[item.c1] = Number(cards[item.c1])+1;
// cards[item.c2] = Number(cards[item.c2])+1;
}
// show card info
console.log(`카드정보 :`);
console.log(cards);
}
async function load(a, p){
return await steem.api.getContentRepliesAsync(a, p);
}
async function loadAll(link){
let info = getInfoFromLink(link);
let a = info.data.author; // author
let p = info.data.permlink; // permlink
let results = await load(a, p);
let p2;
let p3 = [];
for(let result of results){
if(result.author=='pairplay'){
p2 = result.permlink;
}else if(result.children>0){
p3.push({author:result.author, permlink:result.permlink});
}
}
let cards = []; // {author, created, c1, c2}
// p2 계산 ( depth 1 )
let p2results = await load(a, p2);
for(let result2 of p2results){
// 대댓글은 pairplay1 작성한 1개만 존재, 하지만 하나에 여러줄을 포함할 수 있음
let bodies = result2.body.split('\n');
let created = getLocalTime(result2.created);
for(let body of bodies){
if(body.length>0){
let card = getCards(body);
let author = getAuthor(body);
cards.push({author:author, created:created, c1:card[0], c2:card[1], num:getNum(card[0],card[1]) });
}
}
}
// p3 계산 ( depth 2 )
let p3arr = [];
for(let c of p3){
p3arr.push(load(c.author,c.permlink));
}
let p3results = await Promise.all(p3arr);
for(let result3 of p3results){
// 대댓글은 pairplay 작성한 1개만 존재
let r3 = result3[0];
if(r3.body.indexOf('Changed')>=0){
let card = getCards(r3.body);
let author = getAuthor(r3.body);
cards.push({author:author, created:getLocalTime(r3.created), c1:card[0], c2:card[1], num:getNum(card[0],card[1]) });
}
}
// 정렬
cards.sort((a,b)=>{
return a.created.getTime() - b.created.getTime();
})
// 인덱스 추가
let i = 1;
for(let c of cards){
c.idx = i;
i++;
}
// 19번까지만 추출
let cuts = cards.slice(0,19);
// console.log(cuts);
findCard(cuts);
// 모든 카드 확인용 csv 출력
for(let c of cards){
console.log(`${c.idx},${c.author},${c.c1},${c.c2},${c.num},${dateFormat(c.created,'yyyy-mm-dd HH:MM:ss')}`);
}
}
let link = 'https://steemit.com/pairplay/@pairplay/20180620t045704772z-post';
loadAll(link);
카드 카운팅 해도 별 의미는 없는거 같네여 -_-;