All pastes #584829 Raw Edit

Something

public text v1 · immutable
·published 2007-06-22 23:02 UTC
rendered paste body
import irclib
import string
import os
import urllib
from sgmllib import SGMLParser
import commands
import sys
import anydbm

port=6667
bot_nick="KillerSting"
canal="#bsd.mx"
archivo_db = "/root/ububotdb"
donos = [ "Diego_Rocha" ]
prefix = "@"

"""Classe sets para poder bloquear funcoes"""
class sets:
	_set = ["True", "False"]
	cumprimento = _set[0]
	add = _set[0]
	quiet = _set[1]
my_sets = sets()
"""fim da Classe"""
"""Classe my_data_base cria o banco de dados"""
class my_data_base:
	def add_new(self, cmd, valor, connection, event, nick):
		db = anydbm.open( archivo_db, "c")
		db[str(cmd.strip())]=str(valor.strip())
		if db.get(str(cmd).strip()):
			connection.privmsg(canal, "["+nick+"]::["+cmd+" adicionado con sucesso]")
		else:
			connection.privmsg(canal, "["+nick+"]::[Sintaxe invalida]")
		db.close()	 
	
	def list_keys(self, connection, event, nick):
		if os.path.exists(archivo_db):
			db = anydbm.open( archivo_db, "r")
			if len(db.keys())< 1:
				connection.privmsg(canal, "["+nick+"][Base de Datos]::[vazia]")
				pass
			else:
				data=db.keys()
				keis=", ".join(data)
				connection.privmsg(canal, "["+nick+"][keys]::["+keis+"]")
			db.close()
		else:
			pass

	def delete_msg_db(self, comando, cont, connection, event, nick):
		db = anydbm.open( archivo_db, "c")
		if db.get(str(cont).strip()):
			del db[cont]
			if db.get(str(cont).strip()):
				connection.privmsg(canal, "["+nick+"]::[Error "+cont+" no deletado]" )
			else:
				connection.privmsg(canal, "["+nick+"]::[Sucesso " +cont+" deletado]" )
		else:
			connection.privmsg(canal, "["+nick+"]::[Entrada no existe]")
		db.close()	 
	
	def define_proc(self, comando, cont, connection, event, nick):
		db = anydbm.open( archivo_db, "r")
		if len(cont) < 1:
			pass
		else:
			if db.has_key(str(cont).strip()) == 1 and len(cont) > 0:
				connection.privmsg(canal, nick+", "+db.get(str(cont).strip()))
		db.close()
		
my_db = my_data_base()
"""fim da Classe do banco da dados"""

""" join_handl verifica as entradas no canal """
def join_handl(connection, event):
	source = event.source()
	nicks = source.split("!")
	if nicks[0] != bot_nick:
		if my_sets.cumprimento == "True":
			connection.privmsg(canal,"hola, "+nicks[0])
	else:
		pass
""" sai_priv verifica a saida do canal """
def sai_priv(connection, event):
	text=join(event.arguments())
	connection.privmsg(canal, text)
	
def away_handl(connection, event):
	source = event.source()
	nicks=source.split("!")
	nick=nicks[0]
	text=' '.join(event.arguments())
	data=text.split()
	comando=str(data[0])
	cont=str(" ".join(data[1:]))
	
	try:
		if my_sets.quiet == "False":
			if comando.strip().find(prefix) == 0:
				cmd = comando.split(prefix)
		
				if cmd[1] == "say":
					connection.privmsg(canal, cont)
		
				elif cmd[1] == "add":
					if my_sets.add == "True":
						try:
							all_str = str(' '.join(data[1:]))
							str__ = all_str.split( '=' )
							if str__[0] and str__[1]:
								cmd = str(str__[0])
								valor = str(str__[1])
								my_db.add_new( cmd, valor, connection, event, nick)
						except IndexError:
									pass

				elif cmd[1] == "keys":
					my_db.list_keys(connection, event, nick)
			
				elif cmd[1] == "delete":
					if nick in donos:
						all_str_del = str(' '.join(data[1:]))
						my_db.delete_msg_db(comando, all_str_del, connection, event, nick)
					else:
						connection.privmsg(canal, nick+", no tiene permissos para !delete")
	
				elif cmd[1] =="google":
					connection.privmsg(canal, "Preguntas 1 en google --> www.google.es/linux | www.google.com/linux")
			
				elif cmd[1] == "math":
					try:
						calcula = data[1:]
						res = 0
						for i in range(len(calcula)):
							if calcula[i] in ( '+', 'suma', 'add' ):
								if res :
									res = float(res) + float(calcula[ i + 1 ])
									i = i + 1
								else:
									res = float(calcula[ i - 1 ]) + float(calcula[ i + 1 ])
									i = i + 1
							elif calcula[i] in ( '-', 'subtrai', 'minos' ):
								if res :
									res = float(res) - float(calcula[ i + 1 ])
									i = i + 1
								else:
									res = float(calcula[ i - 1 ]) - float(calcula[ i + 1 ])
									i = i + 1
							elif calcula[i] in ( '*', 'mult' ):
								if res :
									res = float(res) * float(calcula[ i + 1 ])
									i = i + 1
								else:
									res = float(calcula[ i - 1 ]) * float(calcula[ i + 1 ])
									i = i + 1
							elif calcula[i] in ( '/', 'div' ):
								if res :
									res = float(res) / float(calcula[ i + 1 ])
									i = i + 1
								else:
									res = float(calcula[ i - 1 ]) / float(calcula[ i + 1 ])
									i = i + 1
							else:
								pass
						connection.privmsg(canal, nick+", "+str(res))
					except ValueError:
						connection.privmsg(canal, nick+", solo puede usar numeros :S")
			
				elif cmd[1] == "quit":
					if nick in donos:
						server.quit( "Salindo....." )
						sys.exit()
					else:
						connection.privmsg(canal, nick+", no tiene permissos para !quit")
	
				elif cmd[1] == "paste":
					connection.privmsg( canal,   nick+", http://pastebin.ca | http://paste.ubuntu-nl.org/")
	
				elif cmd[1] == "time":
					connection.privmsg( canal, commands.getoutput("date"))
			
				elif cmd[1] == "set":
					if nick in donos:
						if data[1] == "saludo_on":
							my_sets.cumprimento = my_sets._set[0]
							connection.privmsg( canal, nick+", saludo activado")
						elif data[1] == "saludo_off":
							my_sets.cumprimento = my_sets._set[1]
							connection.privmsg( canal, nick+", saludo desactivado")
						elif data[1] == "add_on":
							my_sets.add = my_sets._set[0]
							connection.privmsg( canal, nick+", add activado")
						elif data[1] == "add_off":
							my_sets.add = my_sets._set[1]
							connection.privmsg( canal, nick+", add desactivado")
						elif data[1] == "quiet_on":
							my_sets.quiet = my_sets._set[0]
							connection.privmsg( canal, nick+", quiet activado")
						elif data[1] == "quiet_off":
							my_sets.quiet = my_sets._set[1]
							connection.privmsg( canal, nick+", quiet desactivado")
							
					elif cmd[1] == "version":
						try:
							if data[1]:
								res = str(connection.version(canal, str(data[1])))
								connection.privmsg( canal, str(res)+' '+event)
						except NameError:
								pass
						
					else:
						connection.privmsg( canal, nick+", no tiene permissos para usar el !set")
						
				else:
					define_proc(comando, cmd[1], connection, event, nick)

			elif comando.strip() in ( bot_nick, bot_nick+"," , bot_nick+":" ):
				all_str__ = str(' '.join(data[1:]))
				my_db.define_proc(comando, all_str__, connection, event, nick)
				
			else: 
				pass 
		elif my_sets.quiet == "True":
				if data[1] == "quiet_off":
					my_sets.quiet = my_sets._set[1]
					connection.privmsg( canal, nick+", quiet desactivado")
					
	except (NameError, IndexError):
			pass
	
	


if __name__ == "__main__":
	irc = irclib.IRC()
	server = irc.server()
	
	server.connect("irc.freenode.net", port, bot_nick, "killersting", "killer")
	server.join(canal)
	server.privmsg("nickserv", "identify pinkfloyd")
	server.add_global_handler("join", join_handl)
	server.add_global_handler("privmsg", sai_priv)
	server.add_global_handler("pubmsg", away_handl)
	#server.add_global_handler("unaway" unaway_handl)
	#server.add_fglobal_handler("part", part_handl)
	irc.process_forever()