Guest User

Untitled

a guest
Oct 18th, 2017
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.49 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.                     for line in fh:
  97.                             url = line.split("|")[0]
  98.                             reason = line.split("|")[1]
  99.                             self.msg(channel,str(count)+" : "+url+" Grund: "+reason.rstrip("\n"))
  100.                                 if count % 4 = 0 :
  101.                     time.sleep(2)
  102.                 count += 1
  103.             else:
  104.                     self.msg(channel,"Keine Threads die geschlossen werden muessen")
  105.            
  106.     def addadmin(self,user):
  107.             if user not in adminslist:
  108.                     self.msg(user,"Hallo Meister, bitte befehlige mich.Threads mit !add <url|Grund> hinzufuegen. Threads mit !close <nummer> oder !clink <url> entfernen")
  109.                         adminslist.append(user)
  110.  
  111.     def userauth(self,user,password):
  112.         if password == botpass:
  113.                 if user not in adminslist:
  114.                             self.msg(user,"Sie wurden erfolgreich authentifiziert!")
  115.                             adminslist.append(user)
  116.  
  117.     def removeadmin(self, user):
  118.             try:
  119.                     adminslist.remove(user)
  120.             except:
  121.                     print "Error in removeadmin"
  122.  
  123.     def updateadmins(self,oldnick,newnick):
  124.             if oldnick in adminslist:
  125.                     try:
  126.                             adminslist.remove(oldnick)
  127.                             adminslist.append(newnick)
  128.                     except:
  129.                             print "Error in adminupdate"
  130.  
  131.     def addthread(self,url,reason,user):
  132.             if user in adminslist:
  133.                     try:
  134.                             found = 0
  135.                                 frh = open(filename,"r")
  136.                 try:
  137.                                     for line in frh:
  138.                                         lineurl = line.split("|")[0]
  139.                                             if (lineurl == url):
  140.                                                 found = 1
  141.                                         frh.close()
  142.                 except:
  143.                     found = 0
  144.                                 if (found == 0):
  145.                                     fh = open(filename,"a")
  146.                                         fh.write(url+"|"+reason+"\n")
  147.                                         fh.close()
  148.                     print chan, url, reason
  149.                                         self.msg("#" + chan,"Thread "+url+" wurde aufgenommen. Grund: "+reason)
  150.                     except:
  151.                             print "Error when adding"
  152.     def closethread(self,number,user):
  153.             if user in adminslist:
  154.                     fro = open(filename,"rb")
  155.                     current_line = 1
  156.                     while current_line < int(number):
  157.                             fro.readline()
  158.                             current_line +=1
  159.                     seekpoint = fro.tell()
  160.                     frw = open (filename, "r+b")
  161.                     frw.seek(seekpoint,0)
  162.                     fro.readline()
  163.                     chars = fro.readline()
  164.                     while chars:
  165.                             frw.writelines(chars)
  166.                             chars = fro.readline()
  167.                     fro.close()
  168.                     frw.truncate()
  169.                     frw.close()
  170.                     self.msg("#"+ chan, " Thread "+number+" wurde geschlossen, ein hoch auf uns!")
  171.  
  172.     def clink(self,url,user):
  173.             if user in adminslist:
  174.                     fro = open(filename,"rb")
  175.                     current_line = 1
  176.                     number = 0
  177.                     for line in fro:
  178.                             if url in line:
  179.                                     number = current_line
  180.                             else:
  181.                                     current_line +=1
  182.  
  183.                     if number > 0:
  184.                             self.closethread(str(number),user)
  185.  
  186.  
  187. class TBotFactory(protocol.ClientFactory):
  188.  
  189.     protocol = TBot
  190.    
  191.     def __init__(self, channel, nickname = 'MA-Bot'):
  192.         self.channel = channel
  193.         self.nickname = nickname
  194.        
  195.     def clientConnectionLost(self,connector,reason):
  196.         print "Lost connection (%s),reconnecting" % (reason)
  197.         connector.connect()
  198.        
  199.     def clientConnectionFailed(self,connector,reason):
  200.         print "Could not connect: %s" % (reason)
  201.        
  202. from twisted.internet import reactor
  203.  
  204. if __name__ == "__main__":
  205.     chan = sys.argv[1]
  206.     reactor.connectTCP('irc.quakenet.org', 6667, TBotFactory('#' + chan))
  207.     reactor.run()
Add Comment
Please, Sign In to add comment