Esempio n. 1
0
 def test_offline(self):
     bts = Steem(node=self.nodelist.get_nodes(),
                 offline=True,
                 data_refresh_time_seconds=900,
                 keys={
                     "active": wif,
                     "owner": wif,
                     "memo": wif
                 })
     bts.refresh_data()
     self.assertTrue(bts.get_feed_history(use_stored_data=False) is None)
     self.assertTrue(bts.get_feed_history(use_stored_data=True) is None)
     self.assertTrue(bts.get_reward_funds(use_stored_data=False) is None)
     self.assertTrue(bts.get_reward_funds(use_stored_data=True) is None)
     self.assertTrue(
         bts.get_current_median_history(use_stored_data=False) is None)
     self.assertTrue(
         bts.get_current_median_history(use_stored_data=True) is None)
     self.assertTrue(
         bts.get_hardfork_properties(use_stored_data=False) is None)
     self.assertTrue(
         bts.get_hardfork_properties(use_stored_data=True) is None)
     self.assertTrue(bts.get_network(use_stored_data=False) is None)
     self.assertTrue(bts.get_network(use_stored_data=True) is None)
     self.assertTrue(
         bts.get_witness_schedule(use_stored_data=False) is None)
     self.assertTrue(bts.get_witness_schedule(use_stored_data=True) is None)
     self.assertTrue(bts.get_config(use_stored_data=False) is None)
     self.assertTrue(bts.get_config(use_stored_data=True) is None)
     self.assertEqual(bts.get_block_interval(), 3)
     self.assertEqual(bts.get_blockchain_version(), '0.0.0')
Esempio n. 2
0
 def test_properties(self, node_param):
     if node_param == "normal":
         bts = Steem(node=self.nodelist.get_nodes(),
                     nobroadcast=True,
                     data_refresh_time_seconds=900,
                     keys={
                         "active": wif,
                         "owner": wif,
                         "memo": wif
                     },
                     num_retries=10)
     elif node_param == "testnet":
         bts = Steem(node="https://testnet.steemitdev.com",
                     nobroadcast=True,
                     data_refresh_time_seconds=900,
                     keys={
                         "active": wif,
                         "owner": wif,
                         "memo": wif
                     },
                     num_retries=10)
     self.assertTrue(
         bts.get_feed_history(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_reward_funds(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_current_median_history(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_hardfork_properties(use_stored_data=False) is not None)
     self.assertTrue(bts.get_network(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_witness_schedule(use_stored_data=False) is not None)
     self.assertTrue(bts.get_config(use_stored_data=False) is not None)
     self.assertTrue(bts.get_block_interval() is not None)
     self.assertTrue(bts.get_blockchain_version() is not None)
Esempio n. 3
0
 def test_properties(self):
     bts = Steem(node=self.nodelist.get_steem_nodes(),
                 nobroadcast=True,
                 data_refresh_time_seconds=900,
                 keys={
                     "active": wif,
                     "owner": wif,
                     "memo": wif
                 },
                 num_retries=10)
     self.assertTrue(
         bts.get_feed_history(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_reward_funds(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_current_median_history(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_hardfork_properties(use_stored_data=False) is not None)
     self.assertTrue(bts.get_network(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_witness_schedule(use_stored_data=False) is not None)
     self.assertTrue(bts.get_config(use_stored_data=False) is not None)
     self.assertTrue(bts.get_block_interval() is not None)
     self.assertTrue(bts.get_blockchain_version() is not None)
     self.assertTrue(bts.get_blockchain_name() == "steem")
     self.assertFalse(bts.is_hive)
     self.assertTrue(bts.is_steem)
Esempio n. 4
0
 def test_properties(self, node_param):
     nodelist = NodeList()
     if node_param == "non_appbase":
         bts = Steem(node=nodelist.get_nodes(appbase=False),
                     nobroadcast=True,
                     data_refresh_time_seconds=900,
                     keys={
                         "active": wif,
                         "owner": wif,
                         "memo": wif
                     },
                     num_retries=10)
     elif node_param == "appbase":
         bts = Steem(node=nodelist.get_nodes(normal=False, appbase=True),
                     nobroadcast=True,
                     data_refresh_time_seconds=900,
                     keys={
                         "active": wif,
                         "owner": wif,
                         "memo": wif
                     },
                     num_retries=10)
     self.assertTrue(
         bts.get_reserve_ratio(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_feed_history(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_reward_funds(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_current_median_history(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_hardfork_properties(use_stored_data=False) is not None)
     self.assertTrue(bts.get_network(use_stored_data=False) is not None)
     self.assertTrue(
         bts.get_witness_schedule(use_stored_data=False) is not None)
     self.assertTrue(bts.get_config(use_stored_data=False) is not None)
     self.assertTrue(bts.get_block_interval() is not None)
     self.assertTrue(bts.get_blockchain_version() is not None)
Esempio n. 5
0
class Beem:
    def __init__(self, bot, settings):
        self.bot = bot
        self.settings = settings
        self.stm = Steem()

    def _is_admin(self, member, channel, guild):
        # Check for admin/bot-admin
        isAdmin = member.permissions_in(channel).administrator
        if not isAdmin:
            checkAdmin = self.settings.getServerStat(guild, "AdminArray")
            for role in member.roles:
                for aRole in checkAdmin:
                    # Get the role that corresponds to the id
                    if str(aRole['ID']) == str(role.id):
                        isAdmin = True
        return isAdmin

    @commands.command(pass_context=True)
    async def account(self, ctx, *, account: str = None):
        """Retuns information about an account"""
        if account is None:
            regAccount = self.settings.getUserStat(ctx.message.author,
                                                   ctx.message.guild,
                                                   "SteemAccount")
            if regAccount is not None and regAccount != "":
                account = regAccount
            else:
                account = ctx.message.author
                account = str(account).split('#')[0]
        a = Account(account, steem_instance=self.stm)
        response = a.print_info(return_str=True)
        await ctx.channel.send("```" + response + "```")

    @commands.command(pass_context=True)
    async def register(self, ctx, *, account: str = None):
        """Register your steemit name"""
        if account is None:
            await ctx.channel.send("I do nothing!")
            return
        try:
            Account(account, steem_instance=self.stm)
        except:
            await ctx.channel.send("Could not register %s!" % account)
            return
        self.settings.setUserStat(ctx.message.author, ctx.message.guild,
                                  "SteemAccount", account)
        await ctx.channel.send("Registered!")

    @commands.command(pass_context=True)
    async def updatenodes(self, ctx):
        """Retuns information about the current node"""
        t = PrettyTable(["node", "Version", "score"])
        t.align = "l"
        nodelist = NodeList()
        nodelist.update_nodes(steem_instance=self.stm)
        nodes = nodelist.get_nodes()
        sorted_nodes = sorted(nodelist,
                              key=lambda node: node["score"],
                              reverse=True)
        for node in sorted_nodes:
            if node["url"] in nodes:
                score = float("{0:.1f}".format(node["score"]))
                t.add_row([node["url"], node["version"], score])
        response = t.get_string()
        self.stm.set_default_nodes(nodes)

        await ctx.channel.send("```" + response + "```")

    @commands.command(pass_context=True)
    async def pricehistory(self, ctx, width: int = 75):
        """Retuns information about the current steem price"""

        feed_history = self.stm.get_feed_history()
        current_base = Amount(feed_history['current_median_history']["base"],
                              steem_instance=self.stm)
        current_quote = Amount(feed_history['current_median_history']["quote"],
                               steem_instance=self.stm)
        price_history = feed_history["price_history"]
        price = []
        for h in price_history:
            base = Amount(h["base"], steem_instance=self.stm)
            quote = Amount(h["quote"], steem_instance=self.stm)
            price.append(base.amount / quote.amount)
        # charset = u'ascii'
        charset = u'utf8'
        chart = AsciiChart(height=10,
                           width=width,
                           offset=4,
                           placeholder='{:6.2f} $',
                           charset=charset)
        response = "Price history for STEEM (median price %4.2f $)\n" % (
            float(current_base) / float(current_quote))

        chart.adapt_on_series(price)
        chart.new_chart()
        chart.add_axis()
        chart._draw_h_line(chart._map_y(
            float(current_base) / float(current_quote)),
                           1,
                           int(chart.n / chart.skip),
                           line=chart.char_set["curve_hl_dot"])
        chart.add_curve(price)
        response += str(chart)
        await ctx.channel.send("```" + response + "```")

    @commands.command(pass_context=True)
    async def curation(self, ctx, *, authorperm: str):

        show_all_voter = False

        all_posts = False
        t = PrettyTable([
            "Voter", "Voting time", "Vote", "Early vote loss", "Curation",
            "Performance"
        ])
        t.align = "l"
        index = 0

        index += 1
        comment = Comment(authorperm, steem_instance=self.stm)
        payout = None
        curation_rewards_SBD = comment.get_curation_rewards(
            pending_payout_SBD=True, pending_payout_value=payout)
        curation_rewards_SP = comment.get_curation_rewards(
            pending_payout_SBD=False, pending_payout_value=payout)
        rows = []
        sum_curation = [0, 0, 0, 0]
        max_curation = [0, 0, 0, 0, 0, 0]
        highest_vote = [0, 0, 0, 0, 0, 0]
        for vote in comment["active_votes"]:
            vote_SBD = self.stm.rshares_to_sbd(int(vote["rshares"]))
            curation_SBD = curation_rewards_SBD["active_votes"][vote["voter"]]
            curation_SP = curation_rewards_SP["active_votes"][vote["voter"]]
            if vote_SBD > 0:
                penalty = (
                    (comment.get_curation_penalty(vote_time=vote["time"])) *
                    vote_SBD)
                performance = (float(curation_SBD) / vote_SBD * 100)
            else:
                performance = 0
                penalty = 0
            vote_befor_min = ((
                (vote["time"]) - comment["created"]).total_seconds() / 60)
            sum_curation[0] += vote_SBD
            sum_curation[1] += penalty
            sum_curation[2] += float(curation_SP)
            sum_curation[3] += float(curation_SBD)
            row = [
                vote["voter"], vote_befor_min, vote_SBD, penalty,
                float(curation_SP), performance
            ]
            if row[-1] > max_curation[-1]:
                max_curation = row
            if row[2] > highest_vote[2]:
                highest_vote = row
            rows.append(row)
        sortedList = sorted(rows, key=lambda row: (row[1]), reverse=False)
        new_row = []
        new_row2 = []
        voter = []
        voter2 = []

        voter = [""]
        voter2 = [""]
        for row in sortedList:
            if show_all_voter:
                if not all_posts:
                    voter = [row[0]]
                if all_posts:
                    new_row[0] = "%d. %s" % (index, comment.author)
                t.add_row(new_row + voter + [
                    "%.1f min" % row[1],
                    "%.3f SBD" % float(row[2]),
                    "%.3f SBD" % float(row[3]),
                    "%.3f SP" % (row[4]),
                    "%.1f %%" % (row[5])
                ])

                new_row = new_row2
        t.add_row(new_row2 + voter2 + ["", "", "", "", ""])
        if sum_curation[0] > 0:
            curation_sum_percentage = sum_curation[3] / sum_curation[0] * 100
        else:
            curation_sum_percentage = 0
        sum_line = new_row2 + voter2
        sum_line[-1] = "High. vote"

        t.add_row(sum_line + [
            "%.1f min" % highest_vote[1],
            "%.3f SBD" % float(highest_vote[2]),
            "%.3f SBD" % float(highest_vote[3]),
            "%.3f SP" % (highest_vote[4]),
            "%.1f %%" % (highest_vote[5])
        ])
        sum_line[-1] = "High. Cur."
        t.add_row(sum_line + [
            "%.1f min" % max_curation[1],
            "%.3f SBD" % float(max_curation[2]),
            "%.3f SBD" % float(max_curation[3]),
            "%.3f SP" % (max_curation[4]),
            "%.1f %%" % (max_curation[5])
        ])
        sum_line[-1] = "Sum"
        t.add_row(sum_line + [
            "-",
            "%.3f SBD" % (sum_curation[0]),
            "%.3f SBD" % (sum_curation[1]),
            "%.3f SP" % (sum_curation[2]),
            "%.2f %%" % curation_sum_percentage
        ])
        response = "curation for %s\n" % (authorperm)
        response += t.get_string()
        await ctx.channel.send("```" + response + "```")