If you feel like trusting your keys to external sites is not a great way to curate content, I've got a 35 dollar lifetime solution for you. Not that many people know that steemit curation bots can even be built on your mobile phones, since singing transactions takes little to no computational power.
Raspberry Pi - https://www.amazon.com/Raspberry-Pi-RASP-PI-3-Model-Motherboard/dp/B01CD5VC92
Wifi dongle - https://www.amazon.com/FotoFo-USB-WiFi-Adapter-Raspberry/dp/B01I191N48
Micro SD card - https://www.amazon.com/SanDisk-microSD-High-Capacity-microSDHC/dp/B00488G6P8
Micro SD card reader - https://www.amazon.com/IOGEAR-MicroSD-Reader-Writer-GFR204SD/dp/B0046TJG1U
A copy of raspian(any other linux based operating system will work as well) - https://www.raspberrypi.org/downloads/raspbian/
Make sure to download the pixel version.
If you have larger than 8gb sd card I'd reccommend Ubuntu mate located here - https://ubuntu-mate.org/raspberry-pi/
You might even consider rokos OS if you want to stake your favorite altcoins meantime - http://rokos.space/core.html
SDFormatter - https://www.sdcard.org/downloads/formatter_4/index.html
etcher - https://etcher.io/
Bitwise SSH client - https://www.bitvise.com/ssh-client-download
Get and install SDFormatter, when that is done insert your Micro SD card to the reader, open up SDFormatter and make sure format size adjustment is swiched on. Then format the SD card.
We're going to use Etcher for this process. Burning the image on the SD card is fairly simple and straight forward.
Installing rasbian is done automatically, you just have to wait until it boots up. After it's done booting, just log into your wifi and write down your local ip for the device. You'll be using this ip to ssh into the device.
bitvise will open up a terminal along with a ftp tunnel, paste the following commands into the terminal to install piston
sudo apt-get install screen
sudo apt-get install python3
sudo apt-get install python3-dev
sudo apt-get install python3-pip
sudo apt-get install git make automake cmake g++ libssl-dev autoconf libtool
sudo apt-get install libboost-thread-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libboost-signals-dev libboost-serialization-dev libboost-chrono-dev libboost-test-dev libboost-context-dev libboost-locale-dev libboost-coroutine-dev libboost-iostreams-dev
sudo apt-get install doxygen perl libreadline-dev libncurses5-dev
sudo pip3 install steem-piston
Just paste all of theese commands into your terminal one by one to intsall piston with all of the prerequisites
Make a new folder on your desktop called bot, then create 2 files in that folder called bot.py and votelist.txt
so it would look like this
from steem.steem import Steem
from steem.steem import BroadcastingError
import threading
import time
import random
import csv
my_subscriptions = []
with open('votelist.txt', mode='r') as infile:
reader = csv.reader(infile)
for rows in reader:
v = rows[0]
my_subscriptions.append(v)
# accounts and passwords
account = ["account_goes_here"]
posting_key = ["password_goes_here"]
# delay in seconds when the bot votes
vote_delay = random.randrange(1200,1800)
upvote_history = []
def feed():
print("Waiting for new posts by %s\n\n\nGo Oprah!\nGo Winfrey!" % my_subscriptions)
steem = Steem(wif=posting_key[0])
for comment in steem.stream_comments():
if comment.author in my_subscriptions:
# Comments don't have titles. This is how we can know if we have a post or a comment.
if len(comment.title) > 0:
# check if we already upvoted this. Sometimes the feed will give duplicates.
if comment.identifier in upvote_history:
continue
print("New post by @%s %s" % (comment.author, url_builder(comment)))
workerThread = threading.Thread(name=comment.identifier, target=worker, args=(comment,))
workerThread.start()
def url_builder(comment):
return "https://steemit.com/%s/%s" % (comment.category, comment.identifier)
def worker(worker_comment):
time.sleep(vote_delay)
try:
for (k,v) in enumerate(account):
worker_steem = Steem(wif=posting_key[k])
upvote_comment = worker_steem.get_content(worker_comment.identifier)
# vote weight 100 full power vote -100 full power flag
upvote_comment.vote(100, v)
print("@%s====> ^Upvoted^" % upvote_comment.author)
upvote_history.append(upvote_comment.identifier)
except BroadcastingError as e:
print("@%s<- failed" % upvote_comment.author)
print(str(e))
if __name__ == "__main__":
while True:
try:
feed()
except (KeyboardInterrupt, SystemExit):
print("Quitting...")
break
except Exception as e:
traceback.print_exc()
print("### Exception Occurred: Restarting...")
add your account to "your_account_goes_here"
add your password to "your_password_goes_here"
account = ["account1", "account2"]
posting_key = ["key1", "key2"]
vote_delay = random.randrange(1200,1800)
upvote_comment.vote(100, v)
open up your votelist.txt and add users you want to vote on, each line contains a new user for the bot to vote on
ubg
fyrstikken
furion
contentjunkie
xeroc
steempowertwins
After you're done adding accounts to your curation list just via bitvise ftp tunnel like so
To run your bot, you first need to navigate to the bots folder
cd bot
screen python3 bot.py
By using that command you're attaching the python script to a screen. So you can close your terminal and log out.
screen -r
Big thanks to @fyrstikken for releasing the source code for the winfrey bot.
You can find the original code for the winfrey bot here: https://steemit.com/socialist-bot/@fyrstikken/the-anonymous-winfrey-bot-upvotes-for-everyone-download-here-easy-steps-for-n00bs
Also if you have any questions regarding setting up your own bot, just ask in the comments or contact @ubg in rocket chat. Also a huge thanks to
@noganoo for providing me the piston prerequisites.