#!/usr/bin/env python# -*- coding: iso-8859-1 -*-"""Módulo de conexão à rede IRCMódulo: IRCAutor: Vindemiatrix AlmuredinBlog: http://tocadoelfo.blogspot.comDescrição: Módulo com classes necessárias para se conectar à redes IRCproto = ['privmsg', 'notice', 'nick', '330', '331', 'ping', 'pong']cmd = {'remetente':{'nick':'Vndmtrx', 'user':'Ox0fff', 'host':'aldksjfh.etfto.gov.br'}, 'cmd':'notice', 'params':['#DelphiX', 'Testando o envio']}for x in proto: print 'Iteracao %s' % (x) if x is cmd['cmd']: print ' >> Iteracao %s comando %s' % (x, cmd)"""import socket, timeclass Core: """ Classe com funcionalidades básicas de conexão e interpretação do protocolo à nível sintático """ def __init__(self, fim='\r\n'): """Define a inicialização do objeto Core, permitindo a definição do marcador de fim do comando""" self.fim = fim def conecta(self, servidor, porta=6667): """ Inicia a conexão ao servidor indicado, com a possibilidade de setar uma porta alternativa. Inicia as variáveis utilizadas pela instância durante a vida da conexão. """ self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.settimeout(200) self.sock.connect((servidor, porta)) self.mantem = True self.__pbuffer = '' def desconecta(self): """ Inicia as rotinas de desconexão do socket e termina o looping de recebimento de dados. Fecha o socket e libera o descritor. """ self.sock.close() self.mantem = False def envia(self, mensagem): """ Faz o envio da informação em mensagem, imprimindo uma exceção em caso de erro. """ try: print mensagem #POG só pra ver qdo acontece self.sock.send(mensagem) except socket.error, v: print v def __bufferiza(self, dados, fim = '\r\n'): """ Buferiza a entrada de dados, de forma que, quando uma string chegar picada, ou várias strings chegarem em um único bloco, cada comando seja construído adequadamente. """ self.__pbuffer += dados while fim in self.__pbuffer: self.processa_protocolo(self.__pbuffer[:self.__pbuffer.find(fim)]) self.__pbuffer = self.__pbuffer[self.__pbuffer.find(fim)+len(fim):] def loop(self): #mover para o final da classe while self.mantem: try: dados = self.sock.recv(1024) self.__bufferiza(dados, self.fim) time.sleep(1) except (KeyboardInterrupt, SystemExit): self.desconecta() def processa_protocolo(self, mensagem): print mensagemdef __init__(): x = Core('\n') x.conecta('irc.freenode.net') time.sleep(2) x.envia('NICK Caeryn\r\n') x.envia('USER Ox0fff Ox0fff irc.freenode.net :Meu nome eh Caeryn\r\n') time.sleep(2) x.envia('nickserv identify SpgVir1982br\r\n') x.envia('JOIN ##Null\r\n') x.loop()