Dies ist ein Artikel von @felixxx
Hier ist das gesamte Programm, mit dem @deutschbot wählt.
Die Logik ist ziemlich einfach; Ich werde daran noch etwas mehr arbeiten.
So funktioniert @deutschbot
Code
from steem import Steem
from steem.blockchain import Blockchain
chain = Blockchain()
# Konten, die @deutschbot auf keinen Fall wählen soll; Schema ["konto1","konto2"]:
blacklist = [""]
# Konten, denen @deutschbot vertraut; (Aus Diskretionsgründen geheim):
trusted_voters = ["felixxx"]
# deutschbot's geheimer Schlüssel
pk = ["5AbS0luTg3h3im3R5cHlü553L"]
account = ["deutschbot"]
# Anzahl an 'vertrauenswürdigen' Votes, die @deutschbot genügen ( ist threshold = 1, genügen 2 Votes )
threshold = 1
# Spezieller Dank an @gtg für seine überlegene node
steem = Steem(keys=pk[0], node="wss://gtg.steem.house:8090")
########################################################################
# Schleife über alle Operationen in der Steem Klotzkette
for operation in chain.ops(
filter_by=["vote"]
):
op = operation["op"]
# Obwohl ich oben bereits nach 'votes' filtere, nochmal zur Sicherheit ...
if op[0] == "vote":
comment_voter = op[1]["voter"]
# Falls der 'voter' vertrauenswürdig ist ...
if comment_voter in trusted_voters:
# So schaut sich @deutschbot die Daten an ...
comment_link = op[1]["permlink"]
comment_author = op[1]["author"]
vote_weight = int(op[1]["weight"]/100)
timestamp = operation["timestamp"]
comment = steem.get_post("@" + comment_author + "/" + comment_link)
tags = (comment["json_metadata"].get("tags", []))
category = comment.category
# Prüfung, ob es ein Hauptartikel ist ( kein Kommentar )
if comment.is_main_post():
# Ob es in #deutsch geschrieben wurde ...
if "deutsch" in tags or "deutsch" in category:
# Sicherstellen, dass der Autor nicht auf meiner schwarzen Liste steht
if not comment_author in blacklist:
# Kurze Bildschirmausgabe ( damit ich auch nachsehen kann was @deutschbot eigentlich so macht )
print(timestamp + "vote by: " + comment_voter + " for " + comment_link + " weight:" + str(vote_weight))
counter = 0
# Hier zählt @deutschbot, wieviele vertrauenswürdige Konten den Artikel mochten ...
for avote in comment['active_votes']:
if avote['voter'] in trusted_voters and not avote['voter'] == comment_voter:
print(avote['voter'] + " also liked it")
counter = counter + 1
# Wenn genug vertrauenswürdige Leser den Artikel mochten ...
if counter > threshold:
# Eine Schleife über alle Konten, die wählen sollen ( derzeit nur @deutschbot )
for (k,v) in enumerate(account):
already_voted = False
# Noch eine Schleife über alle 'votes' ...
for avote in comment['active_votes']:
# damit ich nicht versehentlich eine vorherige Wahl überschreibe ...
if (avote['voter'] == v):
already_voted=True
if not already_voted == True:
# Jetzt wählt das jeweilige Konto ( endlich ) den Artikel
try:
steem = Steem(keys=pk[k], node="wss://gtg.steem.house:8090")
comment.vote(100, v)
print("... followed with " + v + " with 100%")
# Falls es Fehler oder Ausnahmen gab beim Wählen, sehe ich das so zu Hause
except Exception as e:
print("... NOT followed with " + v + " because:")
print(str(e))

Zur besseren Verständlichkeit, habe ich das Ganze auf deutsch kommentiert.
Mit diesem Algorithmus wählt @deutschbot jetzt schon seit einiger Zeit von ganz allein.
Dabei schaut er eigentlich nur einigen Nutzern beim Wählen zu und macht es ihnen nach.
Da es derzeit noch recht wenig auf #deutsch zu wählen gibt, ist @deutschbot selbst auch noch nicht sonderlich wählerisch.
Ein großer Vorteil ist, dass @deutschbot nicht schläft und 24 Stunden am Tag aufpasst.
Sinn und Zweck ist:
- Artikel auf #deutsch zu unterstützen
- Programmieren zu lernen und zu üben
- mehr Spaß und mehr Steem für alle
Spezieller Dank geht an @xeroc, der die Python Bibliothek für Steem geschrieben hat und wartet und an @gtg, dessen node ich benutze, um den anderen beim Wählen zuzusehen.