Dies ist ein Artikel von @felixxx
Die Logik ist ziemlich einfach; Ich werde daran noch etwas mehr arbeiten.Hier ist das gesamte Programm, mit dem @deutschbot wählt.
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.
Dabei schaut er eigentlich nur einigen Nutzern beim Wählen zu und macht es ihnen nach.
Mit diesem Algorithmus wählt @deutschbot jetzt schon seit einiger Zeit von ganz allein.
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.
Wahrscheinlich ist das der wichtigste Artikel für den Einstieg, um selber mal einen Bot aufzusetzen! Vielen Dank für deine Pionier-Arbeit in diesem Feld @felixxx!
Kleine Tipp am Rande für alle, die es ausprobieren wollen:
Nicht entmutigen lassen. Irgendwann kriegt man es hin.
Es würde mich freuen, wenn noch mehr Leute beim Basteln mitmachen würden.
Vielleicht hilft der Text ja wirklich :)
Du koenntest ein github Projekt draus machen?
Ja, das war eigentlich der Plan.
gibt es mittlerweile eigentlich ein github repo?
Ja
Link? :P
Vielen Dank für deine Mühen und weiterhin viel Erflog beim verfeinern dieses wunderbaren Scriptes.
Sehr schönes Ding! Habe @deutschbot im aktuellen Artikel erwähnt und verwendet. Mal sehen :)
Und wie lässt man so was laufen, @felixx? Gibt es da eine Einführung?
Interessante Artikel, danke.
Gute Idee - obwohl ich die Programmsprache nicht verstehe. :-)
Dank für die Mühe.
Ich überlege schon seit Jahren, ob ich Python lernen sollte.
Habe es mal mit der Programmiersprache Lua versucht, lief ganz gut - jedoch wieder eingeschlafen, weil das als Einzelkämpfer keinen Spaß macht.
Klasse Idee und gut umgesetzt ! Python ist einfach eine großartige Programmiersprache
Hallo @deutschbot, ich habe gesehen, dass du heute ein post von mir gevoted hast.
Passierte das nun automatisch, so wie hier beschrieben? Ich muss so dumm nachfragen, weil ich die technischen Hintergründe noch wenig durchschaue.
In jedem Fall: meinen besten Dank!!!
Das passiert halbautomatisch :)
@deutschbot läuft mit einem Program von mir und wurde von mir und der deutschen Community aufgepowert :)
Hey @felixxx kurze Frage noch zum threshold:
ich habe den Bot jetzt mit 8 Kuratoren gefüttert, den threshold allerdings (noch) auf 100 weil ich da was mit % im Hinterkopf hatte. Ist der threshold denn abhängig von der Anzahl Curators?
Wieviele Kuratoren hast Du in Deutschbot laufen, damit man mal eine Vorstellung hat wieviele "Stimmen" er abgleicht.
Der post ist über 1 Jahr alt.
Inzwischen läuft der bot nach einem etwas anderen Muster.