Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- import sys
- import os
- from twisted.words.protocols import irc
- from twisted.internet import protocol
- filename = "threads.lst"
- adminslist = []
- botpass = "mu3ll4bfuhrb0t"
- chan = sys.argv[1]
- class TBot(irc.IRCClient):
- def _get_nickname(self):
- return self.factory.nickname
- nickname = property(_get_nickname)
- def signedOn(self):
- self.join(self.factory.channel)
- print "Signed on as %s." % (self.nickname)
- def joined(self, channel):
- print "Joined %s." % (channel)
- self.sendLine("NAMES %s" % (channel))
- def irc_RPL_NAMREPLY(self, prefix, params):
- channel = params[2]
- names = params[3].split()
- for name in names :
- if (name[0] == "@") and (name != "@Q") :
- self.addadmin(name.strip("@"))
- def privmsg(self,user, channel, msg):
- user = user.split("!")[0]
- if (msg == "!list") and (msg.startswith("!list")):
- self.listthreads(channel)
- if self.nickname in channel:
- '''if msg.startswith("!auth"):
- try:
- password = msg.split(" ")[1]
- self.userauth(user,password)
- except:
- print "Error in auth"'''
- if msg.startswith("!add"):
- try:
- tmp = msg.split("!add")[1]
- url = tmp.split("|")[0]
- reason = tmp.split("|")[1]
- self.addthread(url,reason,user)
- except:
- print "Error in Addthread"
- if msg.startswith("!close"):
- try:
- number = msg.split(" ")[1]
- self.closethread(number,user)
- except:
- print "Error in Close"
- if msg.startswith("!clink"):
- try:
- url = msg.split(" ")[1]
- self.clink(url,user)
- except:
- print "Error in clink"
- def userLeft(self,user,channel):
- try:
- self.removeadmin(user)
- except:
- print "Error in userLeft"
- def userQuit(self,user,quitMessage):
- try:
- self.removeadmin(user)
- except:
- print "Error in userQuit"
- def userRenamed(self, oldname, newname):
- self.updateadmins(oldname,newname)
- def irc_MODE(self,user,params):
- try:
- mode = params[1]
- user = params[2]
- if mode == "-o":
- self.removeadmin(user)
- if mode == "+o":
- self.addadmin(user)
- except:
- print "Error in Modechange"
- def listthreads(self,channel):
- count = 1
- if os.path.getsize(filename) > 0 :
- fh = open(filename,"rb")
- self.msg(channel," : Noch offene Threads")
- for line in fh:
- url = line.split("|")[0]
- reason = line.split("|")[1]
- self.msg(channel,str(count)+" : "+url+" Grund: "+reason.rstrip("\n"))
- if count % 4 = 0 :
- time.sleep(2)
- count += 1
- else:
- self.msg(channel,"Keine Threads die geschlossen werden muessen")
- def addadmin(self,user):
- if user not in adminslist:
- self.msg(user,"Hallo Meister, bitte befehlige mich.Threads mit !add <url|Grund> hinzufuegen. Threads mit !close <nummer> oder !clink <url> entfernen")
- adminslist.append(user)
- def userauth(self,user,password):
- if password == botpass:
- if user not in adminslist:
- self.msg(user,"Sie wurden erfolgreich authentifiziert!")
- adminslist.append(user)
- def removeadmin(self, user):
- try:
- adminslist.remove(user)
- except:
- print "Error in removeadmin"
- def updateadmins(self,oldnick,newnick):
- if oldnick in adminslist:
- try:
- adminslist.remove(oldnick)
- adminslist.append(newnick)
- except:
- print "Error in adminupdate"
- def addthread(self,url,reason,user):
- if user in adminslist:
- try:
- found = 0
- frh = open(filename,"r")
- try:
- for line in frh:
- lineurl = line.split("|")[0]
- if (lineurl == url):
- found = 1
- frh.close()
- except:
- found = 0
- if (found == 0):
- fh = open(filename,"a")
- fh.write(url+"|"+reason+"\n")
- fh.close()
- print chan, url, reason
- self.msg("#" + chan,"Thread "+url+" wurde aufgenommen. Grund: "+reason)
- except:
- print "Error when adding"
- def closethread(self,number,user):
- if user in adminslist:
- fro = open(filename,"rb")
- current_line = 1
- while current_line < int(number):
- fro.readline()
- current_line +=1
- seekpoint = fro.tell()
- frw = open (filename, "r+b")
- frw.seek(seekpoint,0)
- fro.readline()
- chars = fro.readline()
- while chars:
- frw.writelines(chars)
- chars = fro.readline()
- fro.close()
- frw.truncate()
- frw.close()
- self.msg("#"+ chan, " Thread "+number+" wurde geschlossen, ein hoch auf uns!")
- def clink(self,url,user):
- if user in adminslist:
- fro = open(filename,"rb")
- current_line = 1
- number = 0
- for line in fro:
- if url in line:
- number = current_line
- else:
- current_line +=1
- if number > 0:
- self.closethread(str(number),user)
- class TBotFactory(protocol.ClientFactory):
- protocol = TBot
- def __init__(self, channel, nickname = 'MA-Bot'):
- self.channel = channel
- self.nickname = nickname
- def clientConnectionLost(self,connector,reason):
- print "Lost connection (%s),reconnecting" % (reason)
- connector.connect()
- def clientConnectionFailed(self,connector,reason):
- print "Could not connect: %s" % (reason)
- from twisted.internet import reactor
- if __name__ == "__main__":
- chan = sys.argv[1]
- reactor.connectTCP('irc.quakenet.org', 6667, TBotFactory('#' + chan))
- reactor.run()
Add Comment
Please, Sign In to add comment