update for beem: add community support

in HiveDevs4 years ago

Repository

https://github.com/holgern/beem


beem-logo

beem is a python library and command line tool for HIVE. The current version is 0.24.5.

There is also a discord channel for beem: https://discord.gg/4HM592V

The newest beem version can be installed by:

pip install -U beem

Check that you are using hive nodes. The following command

beempy updatenodes --hive

updates the nodelist and uses only hive nodes. After setting hive as default_chain, beempy updatenodes can be used.

The list of nodes can be checked with

beempy config

and

beempy currentnode

shows the currently connected node.

Changelog for versions 0.24.5

  • replace percent_hive_dollars by percent_hbd (to make beem HF24 ready)
  • Remove whaleshares related code
  • Fix adding of a wif in beempy
  • Remove SteemConnect
  • Fix set token in HiveSigner
  • Add Blurt
  • Add Community for community reladed requests and broadcasts
  • Improve community lookup for beempy createpost
  • Improved beempy history command output
  • Improved beempy stream

Community support

I added community support to beem. The following example shows the content of a community dict:

from beem.community import Community
from prettytable import PrettyTable
community = Community("hive-139531")
t = PrettyTable(["key", "value"])
t.align = "l"
t._max_width = {"value" : 60}
for key in community.json():
    t.add_row([key, community.json()[key]])
print(t)

returns

+-------------+--------------------------------------------------------------+
| key         | value                                                        |
+-------------+--------------------------------------------------------------+
| id          | 1357761                                                      |
| name        | hive-139531                                                  |
| title       | HiveDevs                                                     |
| about       | HiveDevs - A community of developers working on Hive related |
|             | projects. Visit our Discord at https://discord.gg/cvnByhu    |
| lang        | en                                                           |
| type_id     | 1                                                            |
| is_nsfw     | False                                                        |
| subscribers | 1005                                                         |
| sum_pending | 638                                                          |
| num_pending | 253                                                          |
| num_authors | 120                                                          |
| created_at  | 2020-01-23 16:27:39                                          |
| avatar_url  |                                                              |
| context     | {}                                                           |
| description |                                                              |
| flag_text   |                                                              |
| settings    | {}                                                           |
| team        | [['hive-139531', 'owner', ''], ['netuoso', 'admin', ''],     |
|             | ['abit', 'mod', ''], ['roadscape', 'mod', ''], ['acidyo',    |
|             | 'mod', ''], ['gtg', 'mod', ''], ['good-karma', 'mod',        |
|             | 'Founder of Esteem'], ['jesta', 'mod', ''], ['inertia',      |
|             | 'mod', '#1138'], ['arcange', 'mod', ''], ['someguy123',      |
|             | 'mod', ''], ['mahdiyari', 'mod', ''], ['blocktrades', 'mod', |
|             | ''], ['drakos', 'mod', ''], ['themarkymark', 'mod', ''],     |
|             | ['stoodkev', 'mod', ''], ['therealwolf', 'mod', ''],         |
|             | ['yabapmatt', 'mod', ''], ['eonwarped', 'mod', ''],          |
|             | ['emrebeyler', 'mod', ''], ['bobinson', 'mod', ''],          |
|             | ['asgarth', 'mod', ''], ['quochuy', 'mod', 'Witness'],       |
|             | ['crimsonclad', 'mod', ''], ['pharesim', 'mod', '']]         |
+-------------+--------------------------------------------------------------+

The following API functions have been implemented:

roles = community.get_community_roles()
print("len %d - first entry: %s" % (len(roles), str(roles[0])))
subscribers = community.get_subscribers()
print("len %d - first entry: %s" % (len(subscribers), str(subscribers[0])))
last_activity = community.get_activities(limit=100, last_id=None)
print("len %d - first entry: %s" % (len(last_activity), str(last_activity[0])))
latest_post = community.get_ranked_posts(limit=25)
print("len %d - first entry: %s" % (len(latest_post), str(latest_post[0])[:120]))

returns:

len 50 - first entry: ['hive-139531', 'owner', '']
len 250 - first entry: ['joshman', 'guest', None, '2020-07-14 16:16:15']
len 100 - first entry: {'id': 78159733, 'type': 'subscribe', 'score': 35, 'date': '2020-07-14T16:16:15', 'msg': '@joshman subscribed to HiveDevs', 'url': 'trending/hive-139531'}
len 25 - first entry: {'post_id': 83702748, 'author': 'netuoso', 'permlink': 'creation-of-steemdevs-community-information-about-steemdevs', 'c

get_subscribers() returns only 250 subscribers and it is currently not possible to receive all subscribers (hive-139531 has 1005 subscribers in total). A way to receive all subscribers could be parsing get_activities, as there is an entry for each new subscriber.

Communities

Communities returns a list of registred communities. The communities inside the list can be printed by printAsTable() and it is possible to search the community title for a match:

from beem.community import Communities
communities = Communities(limit=100)
communities.search_title("dev").printAsTable()

returns

+-----+-------------+----------+------+-------------+-------------+-------------+-------------+
| Nr. | Name        | Title    | lang | subscribers | sum_pending | num_pending | num_authors |
+-----+-------------+----------+------+-------------+-------------+-------------+-------------+
| 1   | hive-139531 | HiveDevs | en   | 1000        | 945         | 236         | 113         |
+-----+-------------+----------+------+-------------+-------------+-------------+-------------+

The limit of returned communities can be increased by using the limit parameter:

from beem.community import Communities
communities = Communities(limit=1000)
communities.search_title("dev").printAsTable()

returns

+-----+-------------+---------------+------+-------------+-------------+-------------+-------------+
| Nr. | Name        | Title         | lang | subscribers | sum_pending | num_pending | num_authors |
+-----+-------------+---------------+------+-------------+-------------+-------------+-------------+
| 1   | hive-139531 | HiveDevs      | en   | 1000        | 945         | 236         | 113         |
| 2   | hive-152825 | DEVCOIN       | en   | 2           | 0           | 5           | 2           |
| 3   | hive-199094 | Devotionals   | en   | 1           | 0           | 3           | 1           |
| 4   | hive-192808 | kr-dev-center | kr   | 20          | 0           | 0           | 0           |
| 5   | hive-150008 | Game Dev   | en   | 12          | 0           | 0           | 0           |
| 6   | hive-101482 | BeeWiki.Dev   | en   | 6           | 0           | 0           | 0           |
+-----+-------------+---------------+------+-------------+-------------+-------------+-------------+

Searching a community by its title was also added to beempy createpost

Currently a title is searched in the top 1000.

Broadcasting community related ops

The following shows all operation that can be broadcasted:

from beem.community import Community
community = Community("hive-111111")
community.set_role("account_a", "mod", "new mod")
community.set_user_title("account_b", "investor")
community.mute_post("author_a", "permlink_a", "spam", "mod_a")
community.unmute_post("author_a", "permlink_a", "no spam", "mod_a")
community.update_props("My Community", "Great community", False, "About me", "Not about me", "admin_a")
community.subscribe("user_c")
community.unsubscribe("user_c")
community.pin_post("author_a", "permlink_a", "mod_a")
community.unpin_post("author_a", "permlink_a", "mod_a")
community.flag_post("author_a", "permlink_a", "please check", "user_a")

HiveSigner / steemconnect

I removed the SteemConnect class from beem, as steemconnect.com is no longer working.

I fixed the token parameter in HiveSigner:

from beem.HiveSigner import HiveSigner
hs = HiveSigner(token=["32..."])
print(hs.me())

where 32... is a valid HiveSinger token.

Improved beempy stream

beempy stream -t -f

retuns now a table for each block:

+----------+---------+-------------+------------------------------------------------------+
| blocknum | trx_num | type        | content                                              |
+----------+---------+-------------+------------------------------------------------------+
| 45157440 | 0       | custom_json | sm_submit_team                                       |
| 45157440 | 1       | custom_json | sm_find_match                                        |
| 45157440 | 2       | vote        | 100.00% @mattsanthonyit/uty6wgup4ul - mattsanthonyit |
| 45157440 | 3       | custom_json | sm_find_match                                        |
| 45157440 | 4       | custom_json | sm_find_match                                        |
| 45157440 | 5       | custom_json | sm_find_match                                        |
| 45157440 | 6       | custom_json | sm_find_match                                        |
| 45157440 | 7       | custom_json | sm_find_match                                        |
| 45157440 | 8       | custom_json | sm_find_match                                        |
| 45157440 | 9       | custom_json | sm_submit_team                                       |
| 45157440 | 10      | custom_json | sm_submit_team                                       |
| 45157440 | 11      | custom_json | sm_find_match                                        |
| 45157440 | 12      | custom_json | sm_find_match                                        |
| 45157440 | 13      | custom_json | sm_find_match                                        |
| 45157440 | 14      | custom_json | scot_claim_token                                     |
| 45157440 | 15      | vote        | 5.00% @xr-hammergaming/52ktvx97870 - innerhive       |
| 45157440 | 16      | custom_json | sm_find_match                                        |
+----------+---------+-------------+------------------------------------------------------+

where custom_json, vote, transfer and transfer_to_vesting have a shortened output.

beempy stream -f

streams the output in raw format.

Blurt

As some beem users were interested in using beem on blurt, I added a Blurt class to beem. This adds support for blurt to beempy.
The following commands will change the nodes, and check if they are set

beempy updatenodes --blurt
beempy config

It is then possible to check the amount of powered up BLURT and to power it down by

beempy power holger80
beempy powerdown -a holger80 33244

The powerdown command will ask for your active keys.

You can check the activity on blurt by

beempy stream -t

you need to be patient, as there is currently not much activity...:

{'block_num': 306762,
 'op': ['withdraw_vesting',
        {'account': 'oth1',
         'vesting_shares': {'amount': '36699505048',
                            'nai': '@@000000037',
 'timestamp': '2020-07-14T21:53:57',
 'trx_num': 0}
{'block_num': 306765,
 'op': ['vote',
        {'author': 'discernente',
         'permlink': '0alhcnfp0r7dh2t',
         'voter': 'discernente',
         'weight': 10000}],
 'timestamp': '2020-07-14T21:54:06',
 'trx_num': 0}

You can switch back to hive with:

beempy updatenodes --hive

The Blurt class can be used to simplify the access to the Blurt blockchain:

from beem import Blurt
blurt = Blurt(node= ["https://rpc.blurt.world", "https://blurt-rpc.steem.buzz"])
print(blurt)

returns

<Blurt node=https://rpc.blurt.world, nobroadcast=False>

If you like what I do, consider casting a vote for me as witness on Hivesigner or on PeakD

Sort:  

Remove whaleshares related code

Is whaleshares project dead? Their website was down for a week, but now it is back.

The WLS chain id is still included into beem. I removed related code for broadcasting, as whaleshares differs to strongly from the current hive codebase and the current implementation was not clean.

Great job my friend @holger80, I was about to go to bed when I saw this notification pop up. You are a genius for short. Keep it up. We need people like you here more than ever. Greetings from Ilorin Nigeria 🇳🇬. Good night.

Hi @holger80, you have received a small bonus upvote from MAXUV.
This is to inform you that you now have new MPATH tokens in your Hive-Engine wallet.
Please read this post for more information.
Thanks for being a member of both MAXUV and MPATH!

Followed you few weeks ago 🙌

thanks for the update I'm gonna start working too

Congratulations @holger80! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s) :

Your post got the highest payout of the day

You can view your badges on your board And compare to others on the Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @hivebuzz:

Hive Whale - Make it spray and get your badge!
Support the HiveBuzz project. Vote for our proposal!