[w-steemjs] #001 이벤트 할 때 ~ 손쉽게 한번에 왕창 송금하기 !!

wonsama(71)
Published in
#kr
Words
129
Reading
1 min
Listen
Play
8y

안녕하세요 wonsama@wonsama 입니다.

이벤트 하실때, 이벤트 당첨자 여러분들께 왕창 송금하시는 거 힘드시죠 ? 그래서 준비해 봤습니다. 한큐 송금 !

222.png


주의사항

  • nodejs 버전이지만 html에서도 약간 수정해서도 바로 사용 가능합니다.
  • 소스코드를 보시면 아시겠지만 'steemjs'를 활용하며 일체 보안 유출 없음
  • 사용시, 반드시 집 또는 개인 PC에서만 사용하기 바랍니다. (게임방, 학교... 하지말기)
  • 사용 시, 반드시 어느정도 프로그램을 숙지하신 이후 송금을 하기 바랍니다.
  • 송금에 대한 책임은 본인에게 있음을 미리 명시합니다.

반드시 위 주의사항을 숙지하신 이후 사용 바랍니다.


활용 예시

  • batchTrasfer 함수만 잘 쓰셔도 아이디 목록만 입력하여 대량 송금처리가 가능 합니다.

글 경로만 입력하면 댓글 목록 정보를 출력 확인 후 제외할 사용자의 아이디를 추가한 이후 해당 대상자에게만 일정 금액을 한번에 송금 처리 !!

C:\Users\wonsama\Desktop\tranfer_steem>node tran.js

ARTICLE_LINK :
 https://steemit.com/kr-diary/@wonsama/18-05-08-5
PERM_LINK :
 18-05-08-5

REPLY LIST :
ganzi /       !
piggypet /       !
smigol /    .      .  
xdaddygn / 1.     . 2.     

total : 4
@ganzi  0.001 SBD   . at ::: Wed May 09 2018 00:40:06 GMT+0900 ( )
@piggypet  0.001 SBD   . at ::: Wed May 09 2018 00:40:12 GMT+0900 ( )
@smigol  0.001 SBD   . at ::: Wed May 09 2018 00:40:18 GMT+0900 ( )
@xdaddygn  0.001 SBD   . at ::: Wed May 09 2018 00:40:24 GMT+0900 ( )
 4    .

소스코드 - 설정

const AUTHOR = '본인계정명'; //@이 빼고 본인 계정명 입력
const PRIVATE_KEY = '본인계정의private키'; // 본인 계정의 private 키 P5어쩌구저쩌구로 시작할 것임.
const SEND_MONEY = '0.001 SBD'; // 보내려는 금액, 자릿수 형태를 x.xxx SBD 또는 x.xxx STEEM 형태로 맞춰야 됨
const IS_SEND_MODE = false; // 송금실행 여부 ( 반드시 확인 후 송금 바랍니다.  true : 송금실행,  false : 확인만 )
const ARTICLE_LINK = 'https://steemit.com/kr-diary/@wonsama/18-05-08-5'; // 글 주소 
const BAN_AUTHOR = ['fadliestem']; // 제외하고자 하는 아이디

memo : `테스트송금 ::: @${arrSend[arrIdx].author} 님에게 ${SEND_MONEY} 를 보내 드립니다.(FREE)`

위 내용을 각자의 환경에 알맞게 바꿔주신 이후 테스트 하시면 됩니다.


소스코드

const steem = require('steem');

const AUTHOR = '본인계정명'; //@이 빼고 본인 계정명 입력
const PRIVATE_KEY = '본인계정의private키'; // 본인 계정의 private 키 P5어쩌구저쩌구로 시작할 것임.
const WIF = steem.auth.toWif( AUTHOR, PRIVATE_KEY, 'active'); // 송금이므로 active 권한을 요구함
const SEND_MONEY = '0.001 SBD'; // 보내려는 금액, 자릿수 형태를 x.xxx SBD 또는 x.xxx STEEM 형태로 맞춰야 됨
const IS_SEND_MODE = false; // 송금실행 여부 ( 반드시 확인 후 송금 바랍니다.  true : 송금실행,  false : 확인만 )
const ARTICLE_LINK = 'https://steemit.com/kr-diary/@wonsama/18-05-08-5'; // 글 주소 
const PERM_LINK = ARTICLE_LINK.substr( ARTICLE_LINK.lastIndexOf('/') + 1 );
const BAN_AUTHOR = ['fadliestem']; // 제외하고자 하는 아이디

// 대량 송금을 수행
// arrSend 보내고자 하는 정보가 담긴 배열목록
let batchTrasfer = (arrSend, arrIdx=0) =>{
    let p = {
        wif : WIF,
        from : AUTHOR,
        to : arrSend[arrIdx].author,
        amount : SEND_MONEY,
        memo : `테스트송금 ::: @${arrSend[arrIdx].author} 님에게 ${SEND_MONEY} 를 보내 드립니다.(FREE)`
    };
    steem.broadcast.transfer(p.wif, p.from, p.to, p.amount, p.memo, function(err, result) {
        if(err==null){
            console.log(`@${p.to} 님에게 ${p.amount} 전송을 완료 했습니다. at ::: ${new Date()}`);
            arrIdx++;
            if(arrIdx<arrSend.length){
                batchTrasfer(arrSend, arrIdx);
            }else{
                console.log(`총 ${arrSend.length} 분께 전송을 완료 했습니다.`);
            }
            
        }else{
            console.log(`전송실패 ::: 사유 ==> ${err}`);
        }
    });
}

// 컨텐츠 경로 기준 댓글 목록을 가져온다
let getContent = (pPermlink) => {return new Promise((resolve, reject)=>{
    let p = {
        author : AUTHOR,
        permlink : pPermlink
    };
    steem.api.getContentReplies(p.author, p.permlink, function(err, result) {
        if(err==null){
            resolve(result);
        }else{
            reject(err);
        }
    }); 
})};

// 댓글 목록을 가져와 후처리를 수행한다
getContent( PERM_LINK ).then(res=>{

    console.log();
    console.log('ARTICLE_LINK :\n', ARTICLE_LINK);
    console.log('PERM_LINK :\n', PERM_LINK);
    console.log();

    // 알파벳 순서로 아이디 정렬
    console.log('REPLY LIST :');
    res.sort((a,b)=>{
        if(a.author.toUpperCase() < b.author.toUpperCase())
            return -1;
        else if(a.author.toUpperCase() > b.author.toUpperCase())
            return 1;
        return 0;
    });

    // 제외하고 싶은 아이디 필터링 
    
    res = res.filter(x=>!BAN_AUTHOR.includes(x.author));

    for(item of res){
        console.log( `${item.author} / ${item.body.replace(/\n/gi,' ').substr(0,50)}` );
    }
    console.log( `\ntotal : ${res.length}` );

    // 대량 송금처리 :: 반드시 확인 후 송금 요망 !!
    if(IS_SEND_MODE){
        batchTrasfer(res);
    }

}).catch(console.log);
[w-steemjs] #001 이벤트 할 때 ~ 손쉽게 한번에 왕창 송금하기 !! | Ecency