Ein Vote-Bot mit Python als SteemAuto Ersatz

avatar

Hallo Leute

Habe in letzter Zeit des öfteren gelesen das es auf Steem keinen Bot mehr gibt für das Voten, es heißt immer händisch voten ist am besten , dem stimme ich auch zu jedoch hat man nicht immer die Zeit und da ist ein Vote-Bot doch praktisch. Habe selber einen Bot auf Hive und Steem laufen , auch viel Händisch vote aber wie schon gesagt leider hat man nicht immer die Zeit und es ja doch schade ist wenn die VP auf 100% ist und nicht genutzt werden kann. Habe hier einen Code welcher gern genutzt werden kann. Es soll das händisch Voten nicht ersetzen sondern nur unterstützen.

Achtung bei Installation von Programmen können Probleme auftreten und auch Schaden an einem laufenden System anrichten , jede Installation erfolgt auf eigene Gefahr !!

Hier in paar Schritten dazu :

  1. Schritt : Als erstes muss man Python und Beem lt. dieser Seite installieren. Wenn man ein Betriebssystem auf Linux passieren verwendet gibt es normalerweise keine Probleme bei der Installation jedoch auf Windows können Probleme bei der Installation auftreten es kommt darauf an ob man einen C - Compiler installiert hat und da vor allem welchen. Da es da verschiedene Fehlermeldungen geben kann gibt es keine allgemeine Lösung hier muss man im Net suchen, es gibt für alle Fehlermeldung zu 95% eine Lösung.
  2. Schritt : Mit Python eine neue Datei anlegen und diesen Code kopieren.
  3. Schritt : So nun müssen im Code noch einige Parameter angepasst werden
    1. Der post_key muss angegeben werden , jedoch darf " " nicht entfernt werden da es sich hierbei um einen String handelt , dieser ist durch " " gekennzeichnet.
    2. Nun muss noch der Pfad für die Datei angegeben werden auch hierbei handelt es ich um einen String daher " " nicht löschen
    3. So nun muss auch noch der user_account angegeben werden mit welchen gevotet wird , auch hierbei handelt es sich um einen String also " " nicht löschen.
  4. Schritt : Nun muss der Code noch ausgeführt werden, hierbei werden nun 3 Dateien im Verzeichnis lt. Pfad angelegt :
    1. votelist.csv : Hier werden jene User angelegt welchen du folgst mit folgeneden Parameter :
      • User Name
      • True : gibt an ob der User gevotet werden soll , ändert man den Wert True auf False dann wird dieser User nicht mehr gevotet , dieser Wert bleibt solange auf False bis er wieder händisch geändert wird , Format ---- user;True;30; ---- nicht änder, wichtig ist das letzte " ; " wird es nicht angegeben funktioniert das Programm nicht .
      • 30 : Diese Zahl gibt an mit wieviel VP der User gevotet werden soll , kann bei jedem User individuell angepasst werden .
    2. timer.csv : Hier wird der Startpunkt ab wann jeder User gevotet werden soll angelegt, auch hier ist wichtig das Format ---31.05.2020 12:32;1;----- darf nicht geändert werden. Wobei die letzte Ziffer für die Tage steht wie oft ein User gevotet werden soll , kann im Programm bei der Variablen day = 1 geändert werden
    3. gevotet.csv : Hier kann man nachlesen welche User bereits gevotet worden sind .

Code:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fr 29.05.2020

@author: tom
"""

from pathlib import Path
from beem.comment import Comment
from beem.instance import set_shared_steem_instance
from beem.discussions import Discussions_by_author_before_date
from beem import Steem
from beem.account import Account
from datetime import datetime , timedelta
import time

post_key = "posting_key"
node = ['https://api.steemit.com',"api.justyy.coom",]
stm = Steem(node, keys=post_key, use_condenser=True)
set_shared_steem_instance(stm)

#angebe vom Pfad wo Datei liegt
my_path = Path("Verzeichnis Pfad")
user_account = "dein Accountname"

#hier wird gevotet
def vote_post(permlink,vp):
    print(permlink,vp)   # Anzeige von Post-Link und VP 
    c = Comment(permlink)
    c.upvote(vp,"user_account")
    user = permalink.split("/")[0]
    #wenn gevotet wurde dann wird es in gevotet.csv festgehalten 
    with open(f"{my_path}/gevotet.csv","a") as file:
        file.write(f"{user};")
    time.sleep(5)

#Funktion liefert zurück ob letztes Post von User gevotet werden soll 
def post_info(follower):
    gevotet = False 
    d = (Discussions_by_author_before_date(limit=1, author=follower))
    #abfrage ob ein Post vorhanden ist 
    if len(d) > 0:
        d = str(Discussions_by_author_before_date(limit=1, author=follower)[0])
        d = d[10:-1]
        c = Comment(d)
        # abfrage gibt an ob schon einen Auszahlung erfolgt ist
        votes = c["active_votes"]  # gibt die Anzahl der Votes retour
        date1 = (c["created"]).toordinal()
        date2 = datetime.today().toordinal()
        day = date2 - date1

        temp_count = len(votes) 
        if temp_count > 15: # 15 votes für vote erforderlich
            for info in votes:
                # abfrage ob investinthefutur schon gevotet hat
                temp_voter = str(info["voter"])
                if "cervisia" in temp_voter:
                    # print(str(info["voter"]))
                    gevotet = True
        #abfrage ob Post nicht älter als 5 Tage ist
        if (day <= 5) and (gevotet == False) and temp_count > 15:
            status = d
        else:
            status = False
    else:
        status = False
    return status


def create_followlist(follow):
    temp_userlist = []
    with open (f"{my_path}/votelist.csv","r")as file:
        for line in file:
            if len(line)>4:
                temp_text = line.split(";")
                temp_text[3] = True
                temp_text = (f"{temp_text[0]};{temp_text[1]};{temp_text[2]};\n")
                temp_userlist.append(temp_text)
        temp_helplist = temp_userlist
    for info in follow:
        temp_status = True
        for temp_info in temp_userlist:
            if info in temp_info:
                temp_status = False
                break
        if temp_status == True:
            temp_helplist.append(f"{info};True;30;\n")

    with open(f"{my_path}/votelist.csv","w") as file:
        for info in temp_helplist:
            file.write(str(info))
    temp_helplist.pop(0)
    return temp_helplist


def zeituhr():
    with open(f"{my_path}/timer.csv","r") as file:
        for line in file:
            if len(line)>5:
                zeit_erstellt = line
    return zeit_erstellt

#hier werden die benötigten Dateien erstellt -----------
temp_path = Path(f"{my_path}/gevotet.csv")
if not temp_path.is_file():
    with open(temp_path,"w") as file:
        file.write("new ; ")

temp_path = Path(f"{my_path}/timer.csv")
if not temp_path.is_file():
    with open(temp_path,"w") as file:
        file.write("Datum User gevotet neu; Zeit wie lange es laufen soll;\n"
                    + "25.01.2020 18:15;4;\n")

temp_path = Path(f"{my_path}/votelist.csv")
if not temp_path.is_file():
    with open(temp_path,"w") as file:
        file.write("user;voten;VP;\n")
#Dateien können auch händsich erstellt werden -----------

zeit_erstellt = zeituhr()
zeit_erstellt = zeit_erstellt.split(";")
beginn = datetime.strptime(zeit_erstellt[0],"%d.%m.%Y %H:%M")
todaytime = datetime.today()
diff = todaytime - beginn

acc = Account(user_account)
follow = acc.get_following()
#day bestimmt die Tage wie oft ein User gevotet werden soll. 
#day = 1 bedeutet das der User jeden Tag gevotet wird 
day = 1
if diff >= timedelta(days = int(zeit_erstellt[1])):
    with open(f"{my_path}/gevotet.csv","w") as file:
        file.write("new;")
    todaytime = datetime.strftime(todaytime,"%d.%m.%Y %H:%M")
    with open (f"{my_path}/timer.csv","a") as file:
        file.write(f"{todaytime};{day};\n")


votepower = acc.get_voting_power()
grenze = 85  

if votepower > grenze:
    follower_list = create_followlist(follow)
    with open(f"{my_path}/gevotet.csv","r") as file:
        temp_user = file.readlines()
    #print(temp_user)
    for info in follower_list:
        if (str(info).split(";")[1]) == "False" or  (str(info).split(";")[0]) in temp_user[0]:
            continue
        else:
            permalink = post_info(str(info).split(";")[0])

        if permalink != False:
            vote_post(permalink, int(str(info).split(";")[2]))
            votepower = acc.get_voting_power()
            if votepower < grenze:
                break

Vielleicht kann es jemand brauchen den ich glaube die Nachfrage nach einen Steem - Autovote ist da. Sollte irgend wo Fragen oder Probleme auftauchen am besten einfach hier posten, wenn ich es kann helfe ich gerne weiter.



0
0
0.000
1 comments