[Python] MassPNsend + SimpleThreadView

Dieses Thema im Forum "Projekte / Codes" wurde erstellt von Beginner35, 1. April 2007 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 1. April 2007
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    MassPNsend + SimpleThreadView

    Das Funktioniert nicht mehr wegen .ws-Umstellung verwendet stattdessen die RRTools da ist das MassPNsend mit drin.

    MassPNsend

    Hab im auftrag von vantheman n Tool geschrieben das an mehrere User die gleiche PN sendet. Und da es sicher auch andere brauchen können veröffentlich ichs hier mal.

    Neu in der 0.1beta:
    • integrierter Threadviewer
    • Button zum Löschen des Postausgangs
    • Versenden von PNs als BCC
    • interne änderungen usw.




    Download:
    • 0.1alpha als exe
    • 0.1beta als exe

    einfach den ordner entpacken und MassPNsend.exe starten.

    //Edit: Weil vantheman fragte: Man kann ids oder usernamen eingeben oder beides aber man muss von den usern nicht beides eingeben.

    Source: Source mit Syntay Hilighting
    Spoiler
    Code:
    #!/usr/bin/env python
    # -*- coding: iso-8859-15 -*-
    # masspnsend geschrieben von Beginner
    # beginner aT frubar DOT net 
    # irc.xchannel.org/kolaleech
    # Lizensiert unter der GPL-2
    # Published under the GPL-2
    # irc://irc.xchannel.org/kolaleech
    
    import Tkinter as tk
    from sys import exit
    try:
     from rrboardlib import rrboard
    except:
     print "Lade das Modul RRBoardLib nach"
     from urllib import urlretrieve
     try:
     urlretrieve("http://xxxbeginner35xxx.xx.funpic.de/data/scripte/rrboardlib.py", "rrboardlib.py")
     from rrboardlib import rrboard
     except:
     print "Konnte RRBoardLib nicht laden, beende"
     exit(1)
    import time
    
    usernam = ""
    passwd = ""
    message = ""
    subject = ""
    try:
     f = file("pnsend.conf", "r")
     confstr = f.read()
     f.close()
     opts = confstr.split(";")
     for o in opts:
     if "passwort=" in o:
     passwd = o.split("=")[1]
     elif "username=" in o:
     usernam = o.split("=")[1]
     elif "message=" in o:
     message = o.split("=")[1]
     elif "subject=" in o:
     subject = o.split("=")[1]
     del opts, f
    except:
     print "Keine Config Datei gefunden, kein Problem ;)"
    
    class gui:
     def __init__(self, master):
     
     self.masterw = master
     frame1 = tk.Frame(master)
     frame1.pack() 
     self.text1 = tk.Label(frame1, text="Usernamen")
     self.text1.pack()
     self.nameeingabe = tk.Text(frame1, width=50, height=4)
     self.nameeingabe.pack()
     self.text2 = tk.Label(frame1, text="Trennzeichen(fÃŒr Leerzeichen einfach frei lassen)")
     self.text2.pack(side=tk.LEFT)
     self.trennzeichen1 = tk.Entry(frame1, width=1)
     self.trennzeichen1.insert(tk.END, ";")
     self.trennzeichen1.pack(side=tk.RIGHT)
     
     frame2 = tk.Frame(master)
     frame2.pack()
     self.text3 = tk.Label(frame2, text="UserIDs")
     self.text3.pack()
     self.ideingabe = tk.Text(frame2, width=50, height=4)
     self.ideingabe.pack()
     self.text4 = tk.Label(frame2, text="Trennzeichen(fÃŒr Leerzeichen einfach frei lassen)")
     self.text4.pack(side=tk.LEFT)
     self.trennzeichen2 = tk.Entry(frame2, width=1)
     self.trennzeichen2.insert(tk.END, ";")
     self.trennzeichen2.pack(side=tk.RIGHT)
     
     frame3 = tk.Frame(master)
     frame3.pack()
     self.text5 = tk.Label(frame3, text="Betreff")
     self.text5.pack()
     self.betreff = tk.Entry(frame3, width=50)
     self.betreff.pack()
     self.text6 = tk.Label(frame3, text="Nachricht")
     self.text6.pack()
     self.nachricht = tk.Text(frame3, width=50, height=4)
     self.nachricht.pack()
     self.text7 = tk.Label(frame3, text="Username")
     self.text7.pack()
     self.username = tk.Entry(frame3)
     self.username.pack()
     self.text8 = tk.Label(frame3, text="Passwort")
     self.text8.pack()
     self.password = tk.Entry(frame3, show="*")
     self.password.pack()
     self.bcc = False
     self.bcccheck = tk.Checkbutton(frame3, text="als BCC senden", variable=self.bcc, onvalue=True, offvalue=False)
     self.bcccheck.pack()
     self.postausgang = False
     
     #self.postausgangcheck = tk.Checkbutton(frame3, text="Nachrichten im Postausgang speichern", variable=self.postausgang, onvalue=True, offvalue=False)
     #self.postausgangcheck.pack()
     
     
     frame5 = tk.Frame(master)
     frame5.pack()
     self.start = tk.Button(frame5, text="Senden", command=self.start)
     self.start.grid(row=0, column=0)
     self.loeschen = tk.Button(frame5, text="Löschen", command=self.delete)
     self.loeschen.grid(row=1, column=0)
     self.abbrechen = tk.Button(frame5, text="abbrechen", command=self.abort)
     self.abbrechen.grid(row=0, column=1)
     self.delsend = tk.Button(frame5, text="Postausgang löschen", command=self.delausgang)
     self.delsend.grid(row=0, column=2)
     self.openthreadview = tk.Button(frame5, text="Threadviewer öffnen", command=self.threadview)
     self.openthreadview.grid(row=1, column=2)
     
     frame4 = tk.Frame(master)
     frame4.pack()
     self.messages = tk.Text(frame4, width=50, height=4)
     self.messages.pack()
     self.status1 = tk.Label(frame4)
     self.status1.pack()
     self.status2 = tk.Label(frame4)
     self.status2.pack()
     
     if usernam:
     self.username.insert(tk.INDEX, usernam)
     if passwd:
     self.password.insert(tk.INDEX, passwd)
     if message:
     self.nachricht.insert(tk.INDEX, message)
     if subject:
     self.betreff.insert(tk.INDEX, subject)
     
     def start(self):
     self.messages.pack()
     try: 
     if self.rrb:
     pass
     except:
     if not self.login():
     return 1
     ids = [i.replace("\n", "") for i in self.ideingabe.get(1.0, tk.END).split(self.trennzeichen2.get())]
     user = [i.replace("\n", "") for i in self.nameeingabe.get(1.0, tk.END).split(self.trennzeichen1.get())]
     if ids[0]:
     for i in ids:
     user.append(self.rrb.uidtoname(i))
     self.messages.insert(tk.END, "[+] Usernames eingelesen und IDs zu Usernames konvertiert\n")
     anzahlusr = len(user)
     self.status1["text"] = "0 von " + str(anzahlusr) + " gesendet"
     gesendet = 0
     betreff = self.betreff.get()
     text = self.nachricht.get(1.0, tk.END)
     self.messages.insert(tk.END, "[ ] Starte mit der Sendeschleife\n")
     while user:
     startzeit = time.time()
     self.rrb.sendpn(user[0:3], betreff, text, self.bcc)
     gesendet += len(user[0:3])
     del user[0:3]
     self.status1["text"] = str(gesendet) + " von " + str(anzahlusr) + " gesendet"
     restzeit = (41 + (time.time() - startzeit)) * (anzahlusr - gesendet)
     i = 0
     while i < 41:
     self.status2["text"] = "geschÀtzte Restzeit: " + str((restzeit - i)/60.0) + " Minuten"
     i += 1
     time.sleep(1)
     self.messages.insert(tk.END, "[+] Sendeschleife beendet\n")
     
     def delete(self):
     self.messages.delete(1.0, tk.END)
     self.ideingabe.delete(1.0, tk.END)
     self.nameeingabe.delete(1.0, tk.END)
     self.betreff.delete(0, tk.END)
     self.nachricht.delete(1.0, tk.END)
     
     def abort(self):
     pass
     
     def delausgang(self):
     try: 
     if self.rrb:
     pass
     except:
     if not self.login():
     return 1
     self.rrb.rmallpn("Postausgang")
    
     def threadview(self):
     self.tvf = tk.Toplevel(self.masterw)
     self.tvf.title("SimpleThreadView")
     self.tvt1 = tk.Label(self.tvf, text="ThreadID")
     self.tvtid = tk.Entry(self.tvf)
     self.tvt1.grid(row=0, column=0)
     self.tvtid.grid(row=0, column=1)
     self.tvt3 = tk.Label(self.tvf, text="Trennzeichen")
     self.tvtz = tk.Entry(self.tvf, width=1)
     self.tvtz.insert(tk.END, ";")
     self.tvt3.grid(row=1, column=0)
     self.tvtz.grid(row=1, column=1)
     self.tvb1 = tk.Button(self.tvf, text="Start", command=self.tvstart)
     self.tvb1.grid(row=2, column=0, columnspan=2)
     
     self.tvf1 = tk.Frame(self.tvf)
     self.tvf1.grid(row=3, column=0, columnspan=2)
     self.tvt2 = tk.Label(self.tvf1, text="Usernamen der Nicht-Poster")
     self.tvt4 = tk.Text(self.tvf1, width=50, height=4)
     self.tvt2.pack()
     self.tvt4.pack()
     self.tvt5 = tk.Label(self.tvf1, text="UserIDs der Nicht-Poster")
     self.tvt5.pack()
     self.tvt6 = tk.Text(self.tvf1, width=50, height=4)
     self.tvt6.pack()
     self.tvtb2 = tk.Button(self.tvf1, text="Usernamen in MassPNsend einfÃŒgen", command=self.insertuids)
     self.tvtb2.pack()
     
     def tvstart(self):
     self.tvt4.delete(1.0, tk.END)
     self.tvt6.delete(1.0, tk.END)
     try: 
     if self.rrb:
     pass
     except:
     if not self.login():
     return 1
     thread = int(self.tvtid.get())
     thanked = self.rrb.getthreaddata(thread)["thx"]
     posted = self.rrb.getposters(thread)
     self.notposted = []
     for t in thanked:
     if not t[0] in posted:
     self.notposted.append(t)
     self.tvt4.insert(tk.END, self.tvtz.get().join([i[1] for i in self.notposted]))
     self.tvt6.insert(tk.END, self.tvtz.get().join([str(i[0]) for i in self.notposted]))
     self.tvtid.delete(0, tk.END)
     
     def insertuids(self):
     self.nameeingabe.insert(tk.END, self.trennzeichen1.get().join([i[1] for i in self.notposted]))
     
     def login(self):
     self.rrb = rrboard()
     if self.rrb.login(self.username.get(), self.password.get()):
     self.messages.insert(tk.END, "[+] Erfolgreich auf RR eingeloggt\n")
     return True
     else:
     self.messages.insert(tk.END, "[!] Login fehlgeschlagen\n")
     return False
     
    root = tk.Tk()
    root.title("MassPNsend")
    app = gui(root)
    root.mainloop()
    

    Screenshot:
    {bild-down: https://www0.xup.in/exec/ximg.php?fid=11284945}


    Ich Freu mich immer über Feedback

    Beginner
     
  2. 1. April 2007
    AW: MassPNsend

    Neue PN:
    Hum?
     
  3. 1. April 2007
    AW: MassPNsend

    ja und jetzt?
    Vieleicht läuft das Programm ja in ner Schleife und sendet nur alle 41sec
     
  4. 1. April 2007
    AW: MassPNsend

    Wer sendet eine PN an mehr als 3 Leute?
    Kann leicht als Spammer benutzt werden.
     
  5. 6. April 2007
    So Speedyerinnerungen
    Wenn jemand damit Spammt wird er gebannt denk ich.
    ---

    Ich hab n paar neue Sachen eingebaut und n bischen was umgeschrieben und da draus jetzt 0.1beta gemacht. Da ich es recht schnell hingeklatscht hab ist es wenig getestet.
    Die wichtigsten Neuerungen sind der Threadviewer und das Versenden per BCC, wenn ihr noch Ideen habt postet.
     
  6. 27. Juli 2007
    AW: MassPNsend + SimpleThreadView

    Will ja nicht dumm kommen aber der funktioniert nicht ?( Der schickt keine PMs.. Oder wie genau mach ich das? Ich mein das Programm ist ja kinderleicht aber da steht "Gesendet 0 von 3"
     
  7. 27. Juli 2007
    AW: MassPNsend

    natürlich tut man das..... wenn z.b. ganze viele Leute ein Filme/Spiel/Programm suchen un dich hab dieses Teil und upp es, dann schreib ich an alle die das gesucht haben ne PN damit die wissen das es jetzt on is ^^

    btt: habs mir mal gezogen udn werds austesten =)
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.