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()