Guest User

Untitled

a guest
Oct 18th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.78 KB | None | 0 0
  1. import time
  2. import sys
  3. import os
  4. from twisted.words.protocols import irc
  5. from twisted.internet import protocol
  6.  
  7. filename = "threads.lst"
  8. adminslist = []
  9. botpass = "mu3ll4bfuhrb0t"
  10. chan = sys.argv[1]
  11.  
  12.  
  13. class TBot(irc.IRCClient):
  14.     def _get_nickname(self):
  15.         return self.factory.nickname
  16.     nickname = property(_get_nickname)
  17.    
  18.     def signedOn(self):
  19.         self.join(self.factory.channel)
  20.         print "Signed on as %s." % (self.nickname)
  21.    
  22.     def joined(self, channel):
  23.         print "Joined %s." % (channel)
  24.         self.sendLine("NAMES %s" % (channel))
  25.    
  26.     def irc_RPL_NAMREPLY(self, prefix, params):
  27.         channel = params[2]
  28.         names = params[3].split()
  29.         for name in names :
  30.             if (name[0] == "@") and (name != "@Q") :
  31.                 self.addadmin(name.strip("@"))
  32.  
  33.     def privmsg(self,user, channel, msg):
  34.         user = user.split("!")[0]
  35.         if (msg == "!list") and (msg.startswith("!list")):
  36.             self.listthreads(channel)  
  37.         if self.nickname in channel:
  38.             '''if msg.startswith("!auth"):
  39.                 try:
  40.                     password = msg.split(" ")[1]
  41.                     self.userauth(user,password)
  42.                 except:
  43.                     print "Error in auth"'''       
  44.             if msg.startswith("!add"):
  45.                 try:
  46.                     tmp = msg.split("!add")[1]
  47.                     url = tmp.split("|")[0]
  48.                                 reason = tmp.split("|")[1]
  49.                                 self.addthread(url,reason,user)
  50.                 except:
  51.                     print "Error in Addthread"
  52.             if msg.startswith("!close"):
  53.                 try:
  54.                     number = msg.split(" ")[1]
  55.                     self.closethread(number,user)
  56.                 except:
  57.                     print "Error in Close"
  58.             if msg.startswith("!clink"):
  59.                 try:
  60.                     url = msg.split(" ")[1]
  61.                     self.clink(url,user)
  62.                 except:
  63.                     print "Error in clink"
  64.  
  65.     def userLeft(self,user,channel):
  66.         try:
  67.             self.removeadmin(user)
  68.         except:
  69.             print "Error in userLeft"
  70.  
  71.     def userQuit(self,user,quitMessage):
  72.         try:
  73.             self.removeadmin(user)
  74.         except:
  75.             print "Error in userQuit"
  76.    
  77.     def userRenamed(self, oldname, newname):
  78.         self.updateadmins(oldname,newname) 
  79.  
  80.     def irc_MODE(self,user,params):
  81.         try:
  82.             mode = params[1]
  83.             user = params[2]
  84.             if mode == "-o":
  85.                 self.removeadmin(user)
  86.             if mode == "+o":
  87.                 self.addadmin(user)
  88.         except:
  89.             print "Error in Modechange"
  90.  
  91.     def listthreads(self,channel):
  92.                 count = 1
  93.                 if os.path.getsize(filename) > 0 :
  94.                         fh = open(filename,"rb")
  95.                         self.msg(channel," : Noch offene Threads")
  96.             lineCount=0
  97.                         for line in fh:
  98.                 lineCount +=1
  99.                                 if lineCount <= 7 :
  100.                     for line in fh
  101.                     url = line.split("|")[0]
  102.                     reason = line.split("|")[1]
  103.                     self.msg(channel,str(count)+" : "+url+" Grund: "+reason.rstrip("\n"))
  104.                     count += 1
  105.                 else:
  106.                     self.msg(channel, "Mehr als 8 Threads in der Liste, Ausgabe im QRY.")
  107.                     for line in fh
  108.                     url = line.split("|")[0]
  109.                     reason = line.split("|")[1]
  110.                     self.msg(user,str(count)+" : "+url+" Grund: "+reason.rstrip("\n"))
  111.                     count += 1
  112.                 else:
  113.                         self.msg(channel,"Keine Threads die geschlossen werden muessen")
  114.            
  115.     def addadmin(self,user):
  116.             if user not in adminslist:
  117.                     self.msg(user,"Hallo Meister, bitte befehlige mich.Threads mit !add <url|Grund> hinzufuegen. Threads mit !close <nummer> oder !clink <url> entfernen")
  118.                         adminslist.append(user)
  119.  
  120.     def userauth(self,user,password):
  121.         if password == botpass:
  122.                 if user not in adminslist:
  123.                             self.msg(user,"Sie wurden erfolgreich authentifiziert!")
  124.                             adminslist.append(user)
  125.  
  126.     def removeadmin(self, user):
  127.             try:
  128.                     adminslist.remove(user)
  129.             except:
  130.                     print "Error in removeadmin"
  131.  
  132.     def updateadmins(self,oldnick,newnick):
  133.             if oldnick in adminslist:
  134.                     try:
  135.                             adminslist.remove(oldnick)
  136.                             adminslist.append(newnick)
  137.                     except:
  138.                             print "Error in adminupdate"
  139.  
  140.     def addthread(self,url,reason,user):
  141.             if user in adminslist:
  142.                     try:
  143.                             found = 0
  144.                                 frh = open(filename,"r")
  145.                 try:
  146.                                     for line in frh:
  147.                                         lineurl = line.split("|")[0]
  148.                                             if (lineurl == url):
  149.                                                 found = 1
  150.                                         frh.close()
  151.                 except:
  152.                     found = 0
  153.                                 if (found == 0):
  154.                                     fh = open(filename,"a")
  155.                                         fh.write(url+"|"+reason+"\n")
  156.                                         fh.close()
  157.                     print chan, url, reason
  158.                                         self.msg("#" + chan,"Thread "+url+" wurde aufgenommen. Grund: "+reason)
  159.                     except:
  160.                             print "Error when adding"
  161.     def closethread(self,number,user):
  162.             if user in adminslist:
  163.                     fro = open(filename,"rb")
  164.                     current_line = 1
  165.                     while current_line < int(number):
  166.                             fro.readline()
  167.                             current_line +=1
  168.                     seekpoint = fro.tell()
  169.                     frw = open (filename, "r+b")
  170.                     frw.seek(seekpoint,0)
  171.                     fro.readline()
  172.                     chars = fro.readline()
  173.                     while chars:
  174.                             frw.writelines(chars)
  175.                             chars = fro.readline()
  176.                     fro.close()
  177.                     frw.truncate()
  178.                     frw.close()
  179.                     self.msg("#"+ chan, " Thread "+number+" wurde geschlossen, ein hoch auf uns!")
  180.  
  181.     def clink(self,url,user):
  182.             if user in adminslist:
  183.                     fro = open(filename,"rb")
  184.                     current_line = 1
  185.                     number = 0
  186.                     for line in fro:
  187.                             if url in line:
  188.                                     number = current_line
  189.                             else:
  190.                                     current_line +=1
  191.  
  192.                     if number > 0:
  193.                             self.closethread(str(number),user)
  194.  
  195.  
  196. class TBotFactory(protocol.ClientFactory):
  197.  
  198.     protocol = TBot
  199.    
  200.     def __init__(self, channel, nickname = 'MA-Bot'):
  201.         self.channel = channel
  202.         self.nickname = nickname
  203.        
  204.     def clientConnectionLost(self,connector,reason):
  205.         print "Lost connection (%s),reconnecting" % (reason)
  206.         connector.connect()
  207.        
  208.     def clientConnectionFailed(self,connector,reason):
  209.         print "Could not connect: %s" % (reason)
  210.        
  211. from twisted.internet import reactor
  212.  
  213. if __name__ == "__main__":
  214.     chan = sys.argv[1]
  215.     reactor.connectTCP('irc.quakenet.org', 6667, TBotFactory('#' + chan))
  216.     reactor.run()
Add Comment
Please, Sign In to add comment