So funktioniert @deutschbot

in #deutsch7 years ago (edited)

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.

Weiterhin viel Spaß auf Steemit !

@felixxx

Sort:  

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 :)

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?

Loading...

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.

Coin Marketplace

STEEM 0.32
TRX 0.11
JST 0.034
BTC 66569.64
ETH 3235.92
USDT 1.00
SBD 4.31