rendered paste body#-*- coding: ISO-8859-1 -*-import randomimport socketfrom time import sleepfrom buffer import BufferControlfrom comandos import Comandosimport config''' admins logados '''admins = []ManterLoop = TrueReconectar = FalseDebug = FalseTBufferCtrl = NonePluginGen = Noneirc = Nonedef raw(mensagem): TBufferCtrl.AddMsg('%s\r\n' % mensagem) for pl in PluginGen.get_plugins_by_cmd(Comandos.OUTPUT_MSG): pl().__call__(['>>'] + mensagem.split()) if Debug: print '>>',mensagem def PrivMsg(Destino, Mensagem): msg = Mensagem while len(msg) > 0: raw('PRIVMSG %s :%s' % (Destino, msg[:msg[430:].find(' ')+430].strip())) msg = msg[msg[430:].find(' ')+430:]def quit(): global ManterLoop ManterLoop = False def get_help_cmds(): result = [] for pl in PluginGen.get_plugins(): plg = pl() if plg.ShowHelp: result.append(plg.Palavra) return resultdef show_help_by_word(nick, palavra): result = False for pl in PluginGen.get_plugins(): plg = pl() if plg.ShowHelp and (plg.Palavra == palavra): result = True if plg.Sintaxe != '': PrivMsg(nick, 'Sintaxe: ' + plg.Sintaxe) if plg.Descricao != '': PrivMsg(nick, 'Descricao: ' + plg.Descricao) if (plg.Versao != '') and (plg.Autor != ''): PrivMsg(nick, 'Sobre: Plugin versao %s escrito por %s' % (plg.Versao, plg.Autor)) if not result: PrivMsg(nick, 'Ahn?')def ProcessarMensagem(mensagem): global mynick, ManterLoop, PluginGen data = mensagem datal = data.split() ''' Chamar os plugins ''' for pl in PluginGen.get_plugins_by_cmd(Comandos.ALL_MSG): pl().__call__(datal) for pl in PluginGen.get_plugins_by_cmd(datal[1]): pl().__call__(datal) if data[0] == ':': txt = ' '.join(datal[3:])[1:] if datal[1] == Comandos.CMD_PRIVMSG: nick = data[1:data.find('!')] if (datal[2][0] != '#'): ''' HELP ''' if txt == 'help': PrivMsg(nick, 'help <palavra do indice>') PrivMsg(nick, 'Indice: ' + ', '.join(get_help_cmds())) elif txt.split()[0] == 'help': show_help_by_word(nick, txt[txt.find(' ')+1:]) else: if datal[0] == Comandos.CMD_PING: raw(Comandos.CMD_PONG + ' ' + data.split()[1]) ManterLoop = datal[0] != Comandos.CMD_ERROR if not ManterLoop: print data def Loop(): global ManterLoop,irc,Reconectar resto = '' while ManterLoop: try: tudo = resto + irc.recv(128) except socket.error, v: print 'Erro: %s. Reconectando...' % v ManterLoop = False Reconectar = True resto = '' while tudo.find('\r\n'): data = tudo[:tudo.find('\r\n')] if data.strip() == '': break fim = tudo.find('\r\n') if fim == -1: resto = tudo tudo = '' break else: tudo = tudo[fim+2:] if Debug: print '<<',data ProcessarMensagem(data) def Reconectar_(): global ManterLoop,Reconectar ManterLoop = False Reconectar = True def Conectar(debug, Gerenciador): global ManterLoop,TBufferCtrl,Debug,PluginGen,irc,Reconectar Debug = debug PluginGen = Gerenciador Reconectar = False ManterLoop = True irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) irc.settimeout(200) TBufferCtrl = BufferControl(irc, Reconectar_) try: print "Conectando..." irc.connect((config.network, config.port)) print "Conectado." TBufferCtrl.start() raw('NICK ' + config.mynick) raw('USER %s %s %s :%s' % (config.user, config.user, config.network, config.real_name)) except: print "Erro ao conectar" ManterLoop = False if config.try_reconnect: print "Tentando reconectar em %d segundos..." % config.reconnect_delay sleep(config.reconnect_delay) return True Loop() TBufferCtrl.stop() irc.close() return Reconectar