@deutschbot automatisiert

in #deutsch8 years ago (edited)

Nach diversen gescheiterten Versuchen, ist es mir nun gelungen:

@deutschbot wählt von allein !

Und zwar nicht einfach alles, sondern mit ein wenig mehr Verstand.
Das ganze ist nur angelehnt an meine ursprüngliche Idee, denn ich musste improvisieren.

Was der Bot jetzt macht:

  • @deutschbot überwacht alle Einträge auf Steemit.
  • Hat der Eintrag die Kategorie #deutsch, startet @deutschbot einen neuen thread für diesen Beitrag.
  • Im thread wird überwacht (intervallartig, derzeit alle 30 Minuten), ob bestimmte Accounts*, bereits einen upvote auf diesen Beitrag vergeben haben.
  • Haben genug bestimmt Accounts* auf den Beitrag gewählt, wählt @deutschbot diesen Beitrag auch.

*bestimmte Accounts:

Eine Gruppe von vertrauenswürdigen, aktiven, deutschsprachigen Autoren.
( Bewerbungen erwünscht !)


Nächste Schritte:

Als nächstes werde ich versuchen, die Beiträge nicht alle als einzelne Threads zu laden, sondern zu einer Warteliste hinzuzufügen.
Diese Lösung wäre eindeutig eleganter.
Es wäre auch stabiler und einfacher, wenn ich statt der stream_comments
Dafür muss ich noch ein bißchen suchen.
Außerdem wäre es schön, wenn ich 'deutsch' als hashtag erkennen könnte, nicht nur als Kategorie. funktion von #piston ( Danke @xeroc ), stattdessen einfach intervallartig eine Datenbank aller neuen posts absuchen könnte.


Das ganze basiert auf diesem bot hier.
Hier die relevanten Codeschnipsel:

def feed():
    steem = Steem(wif=posting_key)
    for comment in steem.stream_comments():
        if 'deutsch' in comment.category:
            if len(comment.title) > 0:
                if comment.identifier in upvote_history: 
                    continue                              
                upvote_history.append(comment.identifier)
                list_save('upvotehistory.txt', upvote_history)
                print(timestamp_builder(), url_builder(comment), ": thread started")
                workerThread = threading.Thread(name=comment.identifier, \
                    target=worker, args=(comment,))
                workerThread.start()

def worker(worker_comment):
    checkcounter = 0
    while not(vote_check(worker_comment, curators, 0.3) == True or checkcounter >=10):
      checkcounter = checkcounter + 1
      print(timestamp_builder(), url_builder(worker_comment), "... try:", checkcounter, " not enough votes") 
      time.sleep(vote_delay)
    if checkcounter < 10: 
      try:
        for (k,v) in enumerate(account):
          print(timestamp_builder(), url_builder(worker_comment), " <--- voted ",v)
          worker_steem = Steem(wif=posting_key[k])
          upvote_comment = worker_steem.get_content(worker_comment.identifier)
          upvote_comment.vote(100, v)
      except BroadcastingError as e:
        print(str(E)) 
    else: 
      print(timestamp_builder(), url_builder(worker_comment), "<--- NOT voted")

Und hier meine eigene (amateurhafte) Funktion:

def vote_check(c_comment, curators, threshold):
    votercount = 0
    checked = False
    check_steem = Steem(wif=posting_key)
    check_comment = check_steem.get_content(c_comment.identifier)
    for avote in check_comment['active_votes']:
        if (avote['voter'] in curators and avote['percent'] > 0):
            votercount = votercount + 1            
    vote_ratio = (votercount / len(curators))
    if vote_ratio >= threshold:
        checked = True
return checked

Funktioniert !


Der code ist auch unkommentiert, da ich mit den Begrifflichkeiten nicht mehr so auf Zack bin und nichts völlig falsches schreiben möchte.
Ich bin froh, dass es so erstmal funktioniert.
Für den Rest muss ich - wie oben erwähnt - erst noch üben.Das Ganze ist etwas umständlich und ich habe wahrscheinlich diverse #python Konventionen verletzt - Es tut mir leid.


Wer das hier mag, kann gerne kommentieren oder mich im chat kontaktieren.

Gruß @felixxx

Sort:  

Bin ich vertrauenswürdig? Btw ne coole sache danke man!

Bist Du vertrauenswürdig ? - Ich weiß es nicht :D
Wichtig wäre mir für den Anfang, dass du aktiv bist und häufig wählst - sonst ist die - leider etwas simple - Logik meines bots nämlich schon ausgehebelt.

:D ich versuch mein bestes

normaluser, please show my @elyaque -badges !

follower-badge:

following_badge
http://i.imgur.com/GYXXpRy.png

reputation-badge:

rep_badge
http://i.imgur.com/6R76RAD.png

postcount-badge:

![postcount_badge](less than 25 posts)
less than 25 posts

@normaluser, please show my @elyaque -badges !

@opmonis, your @elyaque -badges:

follower-badge:

following_badge
http://i.imgur.com/GYXXpRy.png

reputation-badge:

rep_badge
http://i.imgur.com/6R76RAD.png

curation-badge:

![curation_badge](less than 100 curation)
less than 100 curation

postcount-badge:

![postcount_badge](less than 25 posts)
less than 25 posts

steempower-badge:

sp_badge
http://i.imgur.com/mWpDhR6.png

here.Find all @elyaque -badges

sehr cool. danke für den code =)