怎么用JS自动领取STEEM收益?

in #cn6 years ago

前几天瓜叔给了我几个小号,叫我帮他设置一下自动领取SCOT收益,如果可以,顺便也领取一下STEEM收益。

自动领取SCOT收益的程序已经正常运行了,但是还没有添加自动领取STEEM收益的功能,所以就趁这个机会,添加一下自动领取STEEM收益的功能。

看了一遍steemjs的开发手册,一如既往的简单并且无用。简单的搜索一下,需要使用一下2个函数:getAccounts和claimRewardBalance

获取账号信息

要领取收益,首先要知道需要领取多少的收益。要获得这些信息那要使用getAccounts函数。

steem.api.getAccounts([ACCOUNT_NAME], function(err, result){
    console.log(err,result);
})

通过getAccounts获取账号信息:

其中,我们只需要3个数值用于领取收益。他们是:
reward_sbd_balance
reward_steem_balance
reward_vesting_balance

从上图可以看到,账号有555461.145480 VESTS(27.925 SP)待领取。

读取3个数值:

function claimSteemRewards() {
    steem.api.getAccounts([ACCOUNT_NAME], function (err, result) {
        console.log(err, result)
        let sbdReward = result[0].reward_sbd_balance;
        let steemReward = result[0].reward_steem_balance;
        let spInVests = result[0].reward_vesting_balance;
    });
}


领取收益

已经知道需要领取多少收益后,就可以使用claimRewardBalance的函数领取收益了。

steem.broadcast.claimRewardBalance(ACCOUNT_KEY, ACCOUNT_NAME, steemReward, sbdReward, spInVests , function(err, result) {
    console.log(err, result);
});

结合上面的getAccounts,一个简单的领取收益程序就完成了:

function claimSteemRewards() {
    steem.api.getAccounts([ACCOUNT_NAME], function (err, result) {
        console.log(err, result)
        let sbdReward = result[0].reward_sbd_balance;
        let steemReward = result[0].reward_steem_balance;
        let spInVests = result[0].reward_vesting_balance;
        steem.broadcast.claimRewardBalance(ACCOUNT_KEY, ACCOUNT_NAME, steemReward, sbdReward, spInVests, function (err, result) {
            console.log(err, result);
        });
    });
}

但是这个程序还有一个小问题,那就是,如果待领取的收益为0时,就会报错。所以需要加个逻辑,如果待领取收益全部是0的时候,不领取收益。代码如下:

function claimSteemRewards() {
    steem.api.getAccounts([ACCOUNT_NAME], function (err, result) {
        let sbdReward = result[0].reward_sbd_balance;
        let steemReward = result[0].reward_steem_balance;
        let spInVests = result[0].reward_vesting_balance;
        if (sbdReward.split(' ')[0] > 0 || steemReward.split(' ')[0] > 0 || spInVests.split(' ')[0] > 0) {
            steem.broadcast.claimRewardBalance(ACCOUNT_KEY, ACCOUNT_NAME, steemReward, sbdReward, spInVests, function (err, result) {
                console.log(err, result);
            });
        }
    });
}


设置自动领取

程序基本完成,目前唯一的问题是,你需要每次运行这个程序来领取一次收益。如果你想每个小时自动领取一次的话,那就需要使用setInterval. 代码如下:

const INTERVAL = 60 * 60 * 1000; //60 minutes

setInterval(function () {
    claimSteemRewards()
}, INTERVAL);

完整代码:

const steem = require('steem');
const ACCOUNT_NAME = '';
const ACCOUNT_KEY = '';
const INTERVAL = 60 * 60 * 1000; //60 minutes

setInterval(function () {
    claimSteemRewards()
}, INTERVAL);

function claimSteemRewards() {
    steem.api.getAccounts([ACCOUNT_NAME], function (err, result) {
        let sbdReward = result[0].reward_sbd_balance;
        let steemReward = result[0].reward_steem_balance;
        let spInVests= result[0].reward_vesting_balance;
        if (sbdReward.split(' ')[0] > 0 || steemReward.split(' ')[0] > 0 || spInVests.split(' ')[0] > 0) {
            steem.broadcast.claimRewardBalance(ACCOUNT_KEY, ACCOUNT_NAME, steemReward, sbdReward, spInVests, function (err, result) {
                if (result && !err) {
                    console.log(`${ACCOUNT_NAME} claimed ${sbdReward}, ${steemReward} and ${spInVests}`);
                } else {
                    console.log(err);
                }
            });
        }
    });
}

这样一个完整的自动领取收益的程序就完成了~

完整代码也可以在我的github上找到:https://github.com/ericet/steemjs-fun/blob/master/claimRewardBalance.js


STEEM编程系列:

Sort:  

村长威武,期待更多应用!

你好鸭,村长!

@cnbuddy给您叫了一份外卖!

@honoru 米高 迎着沙尘暴 踩着滑板 给您送来
埃塞的奶昔

吃饱了吗?跟我猜拳吧! 石头,剪刀,布~

如果您对我的服务满意,请不要吝啬您的点赞~
@onepagex

Congratulations @theshaki, you are successfuly trended the post that shared by @ericet!
@ericet will receive 0.13005000 TRDO & @theshaki will get 0.08670000 TRDO curation in 3 Days from Post Created Date!

"Call TRDO, Your Comment Worth Something!"

To view or trade TRDO go to steem-engine.com
Join TRDO Discord Channel or Join TRDO Web Site

Support your post (by ACTNEARN Token)
Thank you for sharing, Nice post

帅哥/美女!来一份新手村小卖部的美食吧!@teamcn-shop假如我的留言打扰到你,请回复“取消”。

加油!@ericet
鸽子在mediaofficials支持你。

感谢代理500.15SP 给team-cn! 由于你使用CN作为你的首标签,额外获得2%点赞! 你的帖子获得team-cn 22% 点赞!(如果不想看到这个回复,请回复“取消”)

Support your post (by LEO Token)
Thank you for sharing, Nice post

加油!@ericet
来自鸽子在Marlians的支持。

Coin Marketplace

STEEM 0.13
TRX 0.35
JST 0.033
BTC 125424.25
ETH 4729.67
SBD 0.79