randowhale 보팅 봇(node.js) 설치 및 실행 방법steemCreated with Sketch.

in #kr7 years ago

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

randowhale 보팅 봇을 구현했습니다.
이번 포스트에서는 randowhale 보팅 봇 소개와 실행 방법에 대해 설명하겠습니다.

구현된 코드는 아래 링크에서 확인할 수 있습니다.
https://github.com/jongeunpark/node-steemit-randowhale-bot

코드를 공개한 이유는 기여하실 분이 필요합니다.
스티밋 API를 접한지 얼마 되지 않아서 구현 방식에 확신이 없습니다.
혹시, 도움을 주실 분이 있다면 코드 기여를 부탁드립니다.

설치와 실행 방법은 다음과 같습니다.

1. 설치

$ git clone https://github.com/jongeunpark/node-steemit-randowhale-bot.git
$ cd node-steemit-randowhale-bot/
$ npm install

명령어가 정상적으로 기입이 완료되면, 아래 스크린샷과 같이 npm가 필요한 모듈을 내려받습니다.

2. 설정 파일 수정

설치가 완료되면, 2가지 설정 파일을 수정해야 합니다.
설정 파일은 node-steemit-randowhale-bot/config 아래에 있는 2파일 입니다.

  • user.json: 보팅 및 리플을 작성할 사용자 정보
  • config.json: 보팅 파워, 폴링 주기, 보팅 가격

각 파일 속성 값
** user.json **

{
    "name": "YOUR_NAME",
    "password": "YOUR_PASSWORD"
}
  • name: 사용자 계정으로 jongeun 과 같은 값을 입력합니다.
  • password: 사용자 비밀번호로 로그인 시 사용되는 비밀번호 입니다.
    ** config.json **
{
    "monitoringPeriod": 5,
    "minVotingPower": 50,
    "maxVotingPower": 100,
    "price": "2.000 SBD",
    "lastVotingTimestamp": 1498888335000
}
  • monitoringPeriod: YOUR_NAME의 트렌젝션 목록을 조회하는 주기로 단위는 초입니다.
  • minVotingPower: 최소 보팅 파워값으로 단위는 % 입니다.
  • maxVotingPower: 최대 보팅 파워값으로 단위는 % 입니다.
  • price: 1 건의 보팅 당 필요한 금액입니다. "2.000 SBC", "1.000 SBD" 등으로 입력해야 합니다.(추후 수정 예정)
  • lastVotingTimestamp: 마지막 보팅 시간입니다. 마지막 보팅 시간을 기준으로 보팅 여부를 판단합니다. 초기에는 -1로 설정하거나 현재 시간으로 입력하세요. 프로그램이 동작하면서 보팅이 완료되면 변경되는 값입니다.

3. 실행

$ node randowhale-bot.js

백그라운로 동작시키리면 아래 명령어를 입력하세요.

$ nohup node randowhale-bot.js %

4. 실행 결과

원활한 동작 확인을 위하여 코드를 조금 수정하고 아래와 같은 조건을 후 실행을 해보았습니다.

  • 조건 1: randowhale 트렌젝션 목록을 조회하여 2.000 SDB가 입금되면, 메모에 적힌 포스트에 보팅한다. (제 계정으론 돈이 없어서 테스트를 못했습니다. ㅠㅠ)
  • 조건 2: 50~100% 보팅 파워로 보팅하고, 리플을 작성한다.
    실행 결과는 아래 스크린샷처럼 randowhale처럼 보팅하고, 리플도 작성합니다.

5. 한계 및 추후 계획

  • 수시로 트렌젝션 목록을 폴링으로 조회하는 것은 효율적이지 못합니다. 특정 계정에 트렌젝션이 발생하면, 이벤트를 전달하는 리스너가 있는지 파악하고 리스터를 구현할 계힉입니다.
  • 보팅 여부를 config 파일의 lastVotingTimestamp만으로 확인하고 있습니다. 낮은 확률이지만 누락되는 거래가 존재할 것으로 예상됩니다. 몇 시간 단위로 거래내역 및, 나의 보팅 내역 등을 확인하여 누락된 거래가 있는지 확인이 필요합니다. 이 부분도 개선할 예정입니다.
  • 테스트가 부족하여 어떤 에러가 발생하는지 예측하기 어렵습니다. 예를 들어 네트워크 문제, 스티밋 문제 등이 있을 것 같은데, 이 때 어떻게 동작하는지 살펴볼 필요가 있습니다.

** 질문 있으면 받겠습니다. 피드백도 많이주세요. **
이상으로 포스팅을 마치겠습니다.
또 재밌는 프로젝트가 있으면 진행하겠습니다.

Sort:  

좋은 프로그램입니다^^. 저도 이런부분을 만들고자 했으나.. 파워약한 관계로 누가쓸지 생각했는데 다른 기능이 추가되면 괜찮을수 있겠네요 ㅎㅎ

다음에 참여하겠습니다! 개발에 ㅎㅎ

감사합니다!. 좋은 거 같이 만들어봐요!!!

와 신기하네요~
자동으로 보팅해주는 거에요?
보팅 팔로우 꾹 눌렀어용~

네. 맞습니다. 특정 조건이 되었을 때, 특정 포스트에 보팅 가능합니다. 응용하면 다양한 용도로 활용 가능 할 것 같습니다.

와우 저도 간단한 프로그램 개발을 의뢰하고 싶은데요, 혹시 누군가 나를 멘션 mention 했을때 알림이 오고 체크 할 수 있는 프로그램도 개발이 가능한가요? 지금 공개 의뢰도 생각하고 있습니다 ㅎㅎ

혹시, 말씀하신 프로그램이 현재 없나요? 저는 누군가가 멘션하면 모바일로 알람이 오더군요.
모바일은 안드로이드 사용중이고, eSteem앱을 설치했고, 크롬으로 로그인중 하여 사용중입니다. 알림은 누가 주는지는 정확하진 않지만, 알림이 오더라구요. 그리고 개발은 가능합니다.

제가 관련하여 포스팅을 한번 했었고 완벽히 해결이 되진 않았어요 이스팀앱의 경우 50%정도의 확률로 해당 포스트로 이동하기도 하고 그렇지 않기도 합니다. 그리고 클레옵님이 개발한 툴도 역시 100% 완전히 커버하지 못하고 있어요. 현재는 이스팀앱으로 알림이 오는 것을 보고 해당아이디로 찾아들어가서 보는 것이 전부인데 이것도 때로는 쉽지 않을때가 있습니다.
관련해서 포스팅을 한번더 할 예정입니다.

https://steemit.com/kr-qna/@successtrainer/kr-qna-mentioned

감사합나다 . 글 꼼꼼히 살펴보겠습니다.

정말 대단하신거 같아요~!
아직 초보이지만 조금씩 참여해보고 싶어요 ㅎ
일단 소스부터 파악해봐야겠어요.
저는 회사에서 형상관리쪽을 하고있어요. 개발쪽도 해보고 싶어서 요즘 이것저것 찾아보고 있답니다.
.gitigrore에 configs에 파일들을 추가하는건 어떨까요?
실수로 자기 개인정보도 올릴 수 있겠다 싶어서요 ㅎㅎ

좋은 아이디어 감사합니다. .gitigrore 추가해야지 해야지.. 하며 까먹고 있었네요.

질문이 하나 더 있습니다 ㅎ
getAvailableTransaction 함수가 돌아가면서 start에 data.indexOf("transfer")
데이터 객체에서 transfer를 찾는데 그걸 못찾아서 계속 안돌더라고요

[117,{"trx_id":"9de8fa252c2e99f5755974b3f6f218347a27a505","block":13330783,"trx_in_block":1,"op_in_trx":0,"virtual_op":0,"timestamp":"2017-07-02T12:24:00","op":
["comment",{"parent_author":"lku","parent_permlink":"re-hyesung-4x-20170702t122055962z","author":"hyesung","permlink":"re-lku-re-hyesung-4x-20170702t122358707z","title":"","body":"잔상은 G5도 엄청심해요 ...\n잔
상은 어쩔수가없나봐요 삼성,LG똑같이 대처하더라구요.\n그래도 아몰레드화면보다 눈이 편하던데ㅎㅎㅎ 다른정보 원하시면 말씀해주세요!","json_metadata":"{\"tags\":[\"kr-newbie\"],\"app\":\"steemit/0.1\"}"}]}]

저의 data객체 데이터 입니다. 한번 확인부탁드려요 ㅎㅎ

안녕하세요.
아래는 저의 트렌젝션에서 op: 값이 transfer 인 데이터 입니다. op 뒤에 있는 값은 comment 등이 붙을 수 있으나, transfer가 아니라면 돈 입금 관련 트렌젝션이 아니라고 판단하고 무시하시면 됩니다.

아 ㅎ 그럼 보통 transfer 관련된 데이터는 얼마마다 한번씩 일어나나요?
십분정도 작동시켰는데 아무런 반응이 없는거 같아서요 ㅎ

보내는 사람이 받는 사람을 지정해서 SBD를 전송하면 발생합니다.
가령, 제가 lju 님에게 SBD를 전송하면 transfer 거래이 생깁니다.

질문이 2가지가 생겼습니다 ㅎ
1번째는 이 프로그램은 @randowhale 계정보다 빨리 vote하기 위한거라고 알고있었는데 나오는 data를 살펴보면 @lku 제 계정에 대한 정보만 나오는것 같더라고요.
그렇다면 저에게 다른사람이 SBD는 전송해야 하는건가요?
--> getAccountHistory함수의 매개변수를 변경하였더니 정상적으로 작동했어요 ㅎ
아래와 같이 comment가 남겨지던데 업보트가 99퍼센트 받는다는건 무슨의미인가요??
This post received a 99.97% upvote from @lku thanks to @steemornot! For more information, click here!
2번째는 방금 작성했던comment중 data의 예시로 든 댓글에서 json 파서가 에러나는것을 확인했습니다 ㅎ

답변 드립니다. 1. 이 프로그램은 randowhale 계정보다 빨리 vote 하는 것이 아니라, randowhale 계정처럼 특정 스팀달러를 받고, 원하는 포스트에 vote 하는 것입니다.
업보트를 99% 준다는 것은 보팅파워를 랜덤으로 주기 위함입니다.

  1. json 파싱 에러는 확인해보겠습니다. 감사합니다.

2번 에러는 수정했습니다.
원인은 트렌젝션의 op가 transfer인 아이템을 추출하도록 의도했는데, 포스트 및 댓글에서 transfer이 포함되어 있으면 그 부분부터 아이템을 추출하네요.
수정은 파싱 문구를 더 정확하게 작성하여 에러 발생을 막았습니다. 수정 내용이 임시방편이라, 추후에 더 완벽하게 수정해야 되겠네요. 좋은 아이디어 있으면 알려주세요.

어렵습니다 하지만 정말 괜찮은것 같습니다 스팀파워를 기부엔테이크를 한다는 의미에서 접근방식이 매우 흥미롭습니다
윈도우용으로 나온다면 큰인기를 끌것같습니다 윈도우용으로 아이디 셋팅해서 실행된다면 제가 투자좀하고 싶습니다

좋은 생각입니다. 전 스티밋관련 프로젝트를 지속적으로 해볼 생각입니다. 피드백 감사합니다. 관심있게 지캬봐주세요. 아무래도 웹 기반은 보안에 취약하니, 데스크톱 기반이 좋겠죠?

IT를 잘 모르는 제가 볼때에는 너무 복잡해 보이네요ㅠ
그래도 이런 신기한 시스템이 있다는 사실 놀랍네요! 잘보고 갑니다!

우와 정말 대단하십니다. 시간날때 소스받아서 공부좀 해봐야겠습니다. 정말 좋은자료 감사합니다.

ㅎㅎ 보안관 봇 다음은 randowhale이라고 생각하고 있었는데, 한발자국 늦었군요 ㅋㅋ 하지만 소스를 오픈하셨으니! 감사히 잘먹겠습니다 ㅎㅎㅎㅎ

네. 더 발전시켜주세요!!. 응원합니다.

ㅎㅎ 허락도 얻었겠다. 이제 달리기만 하면 되나요 ㅋㅋ

우와 좋은 정보인 것 같습니다.
업보팅 드립니다.

Coin Marketplace

STEEM 0.20
TRX 0.13
JST 0.030
BTC 65306.74
ETH 3488.89
USDT 1.00
SBD 2.51