This is a program that votes for posts on Steem. It uses piston and thus requires Python 3.
The included script, steemvoter
, works by monitoring all comments on Steem.
If a comment is eligible for voting, it is stored in a database. The eligible comments
are periodically pulled from the database and voted on after they are a pre-set age.
$ sudo python3 setup.py install
The above command will install all required dependencies.
You can run steemvoter like so: steemvoter -c path/to/config.json
.
A configuration file specifies the authors to vote on, the key to sign votes with, etc.
Your configuration file can be supplied with a command-line argument (steemvoter -c path/to/config.json
).
If not supplied, steemvoter will look for the file steemvote-config.json
or steemvote-config.yaml
in the current directory.
Example configuration files are located in the example-configs directory.
The following config values are required:
authors
: A list of authors, and optional values for each (see below).voter_account_name
: The name of your account.vote_key
: The private key used to sign votes with (This should be your "Posting" key).
The authors
list in your config file contains a list of objects.
Each object needs a name
value, which is the name of the author.
Optional values for each author:
priority
: The priority (explained below) that the author has (Default:normal
).vote_replies
: Whether to vote on all replies the author makes, in addition to their regular posts (Default:false
).weight
: The weight to vote with.100.0
represents an upvote, and-100.0
represents a downvote (Default:100.0
).
NOTE that if you just want to add an author and use the default values, a string can be used instead of an object.
Delegates are other Steem accounts. Steemvoter will watch for votes that your delegates cast, and will vote for the comments that they vote on.
The delegates
config list is similar to the authors
list. However, delegates do not have a vote_replies
value.
Optional values for each delegate:
priority
: The priority (explained below) that comments this delegate votes for have (Default:normal
).weight
: The weight to vote with.100.0
represents an upvote, and-100.0
represents a downvote (Default:100.0
).
Also like authors, you can use a string instead of an object and the default optional values will be filled in for you.
These voting rules are optional, and specify how to vote.
The value blacklist_categories
can be specified with a list of categories. Comments in those categories will
never be voted for (Default: [spam]
). Likewise, the value blacklist_authors
can be specified with a list of author names.
Posts by those authors will never be voted for, even if delegates vote for them.
The following values can be specified as seconds or as human-readable strings (e.g. "max_post_age": "2 days"
):
max_post_age
: The maximum age a post can be for it to be voted on (Default:2 days
).min_post_age
: The age a post must be before it is voted on (Default:1 minute
).vote_interval
: The timespan that steemvoter waits between collecting and voting on eligible comments (Default:10 seconds
).
The following values can be specified as decimals or as human-readable percentages (e.g. "priority_high": "75%"
):
priority_high
: The minimum fraction of voting power that you must have to vote for high priority comments (Default:80%
).priority_normal
: The minimum fraction of voting power that you must have to vote for normal priority comments (Default:90%
).priority_low
: The minimum fraction of voting power that you must have to vote for low priority comments (Default:95%
).
Steemvoter uses a sqlite database to store data.
By default, the database will be a file called database.db
in the current directory.
This behavior can be changed using the database_path
config value.
If no RPC options are specified, a public node will be used.
Available RPC options:
rpc_node
: The URL of the node to connect to.rpc_user
: RPC username to use.rpc_pass
: RPC password to use.
Upvote every post by @klye, including his replies to other posts. Wait until posts are 30 seconds old to upvote them.
{
"authors": [
{"name": "klye", "vote_replies": true}
],
"vote_key": "5XX...",
"voter_account_name": "myname",
"min_post_age": 30
}
Upvote the posts by @klye, but not his replies to other posts. Do not vote if his post is more than 2 hours old.
{
"authors": [
"klye"
],
"max_post_age": "2 hours",
"vote_key": "5XX...",
"voter_account_name": "myname"
}