luckyluke.rb - Voting Bot Update
Lucky Luke is a reimplementation of Dr. Phil, but instead of voting for new articles, it votes for posts mentioned in the memo field of a transfer
operation. By default, it votes for any transfer
sent to @booster but you can configure any bot that receives pay-for-vote transfers (or even @null). You can also set a minimum transfer amount to ignore small amounts.
New Features
only_above_average_transfers
allows voters to only vote if the transfer is above average for that bot.history_limit
used whenonly_above_average_transfers
is true to set how far back to calculate an average.max_transfer
allows you to specify the maximum amount in thetransfer
to vote on, which is useful when running multiple instances with voting tiers.max_age
allows you to only upvote newer content, for example, avoiding posts that are about to become locked.
Features
- YAML config.
voting_rules
min_transfer
allows you to specify the minimum amount in thetransfer
to vote on.min_wait
andmax_wait
(in minutes) so that you can fine-tune voting delay.enable_comments
option to vote for post replies (default false).max_rep
option, useful for limiting votes to newer authors (default 99.9).vote_signals
account list.- Optionally allows multiple bot instances to cooperate by avoiding vote swarms.
- If enabled, this feature allows cooperation without sharing keys.
min_rep
can now accept either a static reputation or a dynamic property.- Existing static reputation still supported, e.g.:
25.0
- Dynamic reputation, e.g.:
dynamic:100
. This will occasionally query the top 100 trending posts and use the minimum author reputation. - Checking
vote_weight: 0.00 %
and skipping without broadcast.- This is useful for special configurations that only vote for favorites.
min_voting_power
to create a floor with will allow the voter to recharge over time without having to stop the script.
- Existing static reputation still supported, e.g.:
only_tags
(optional) which only votes on posts that include these tags.- Optionally configure
voters
as a separate filename. E.g:voters: voters.txt
- The format for the file is just:
account wif
(no leading dash, separated by space)
- The format for the file is just:
- Or continue to use the previous format.
- Also optional support for separate files in each (format one per line or separated by space or both):
skip_accounts
skip_tags
flag_signals
vote_signals
bots
is a list of bots to watchtransfer
operations for.- Skip posts with declined payout.
- Skip posts that already have votes from external scripts and posts that were edited.
- Argument called
replay:
allows a replay of n blocks allowing you to catch up to the present.- E.g.:
ruby luckyluke.rb replay:90
will replay the last 90 blocks (about 4.5 minutes).
- E.g.:
- Thread management
- Counter displayed so you know what kind of impact
^C
will have. - This also keeps the number of threads down when authors edit before Lucky Luke votes.
- Counter displayed so you know what kind of impact
- Streaming on Last Irreversible Block Number, just to be fancy.
- Checking for new HF18
cashout_time
value (if present).- This will skip voting when authors edit their old archived posts.
Overview
The goal is to vote before the pay-for-vote bot. To achieve this, Lucky Luke watches for transfer
operations.
You might configure the bot to only watch for transfers over 10.000 SBD
, for example. The bot will also use a few other rules like to avoid voting for declined payouts and automatically suspend voting if it needs to recharge.
Install
To use this Radiator bot:
Linux
$ sudo apt-get update
$ sudo apt-get install ruby-full git openssl libssl1.0.0 libssl-dev
$ sudo apt-get upgrade
$ gem install bundler
macOS
$ gem install bundler
You can try the system version of ruby
, but if you have issues with that, use this how-to, and come back to this installation at Step 4:
I've tested it on various versions of ruby. The oldest one I got it to work was:
ruby 2.0.0p645 (2015-04-13 revision 50299) [x86_64-darwin14.4.0]
Setup
First, clone this gist and install the dependencies:
$ git clone https://gist.github.com/07cfb044f625beb22724371b85cea0e4.git luckyluke
$ cd luckyluke
$ bundle install
Then run it:
$ ruby luckyluke.rb
Lucky Luke will now do it's thing. Check here to see an updated version of this bot:
https://gist.github.com/inertia186/07cfb044f625beb22724371b85cea0e4
Upgrade
Typically, you can upgrade to the latest version by this command, from the original directory you cloned into:
$ git pull
Usually, this works fine as long as you haven't modified anything. If you get an error, try this:
$ git stash --all
$ git pull --rebase
$ git stash pop
If you're still having problems, I suggest starting a new clone.
Troubleshooting
Problem: What does this error mean?
luckyluke.yml:1: syntax error, unexpected ':', expecting end-of-input
Solution: You ran ruby luckyluke.yml
but you should run ruby luckyluke.rb
.
Problem: Everything looks ok, but every time Lucky Luke tries to vote, I get this error:
Unable to vote with <account>. Invalid version
Solution: You're trying to vote with an invalid key.
Make sure the .yml
file voter
items have the account name, followed by a space, followed by the account's WIF posting key. Also make sure you have removed the example accounts (social
and bad.account
are just for testing).
Problem: The node I'm using is down.
Is there a list of nodes?
Solution: Yes, special thanks to @ripplerm.
https://ripplerm.github.io/steem-servers/
See my previous Ruby How To posts in: #radiator #ruby
Get in touch!
If you're using Lucky Luke, I'd love to hear from you. Drop me a line and tell me what you think! I'm @inertia on STEEM and SteemSpeak.
License
I don't believe in intellectual "property". If you do, consider Lucky Luke as licensed under a Creative Commons License.
Nice addition of the above average transfers... it's like you are a mind reader! I was attempting to do this manually while balancing voting power. You are the best. Thanks inertia
I was in the shower when I realized I needed to add this feature. Get out of my shower!
😂
Next feature... scaled voting percent that scales by a factor of the average bid
Thank You Inertia... one thing I noticed when I used to hang out in chat is... when You do say something ( like this post ) You are going to be correct...
Thanks 4 the "Heads-Up" and sharing...
Cheers !!
Wow thats a little too much code for me.
i ve started falling in love with you my friend lol well i have tried to follow your steps to get my posts history but there was a problem i think it is related to the node i am newbie with ruby and those thinks but i am a fast learner i will do my best thank you @inertia
This post has received a 100.00 % upvote from @steemdiffuser thanks to: @jbbasics. Steem on my friend!
Thanks for this update. I use lucky luke as a way to use my 'left over' voting power each day. The average transfer was a feature I was actually wishing for this morning!
I respect this man for what he has done & for what he is currently doing to improve our experience on the Blockchain and for what he is contributing to THE Blockchain itself!
I take my hat off to you inertia. I really do.
Upvoted
...oh dear...too much to wrap my brain around!