#!/usr/bin/python # # Invocador de Wit para python multiplataforma, basado en el código # en C para Linux de Norwegian (norwegian@interlink.es) # # Adaptado a Python por Heimy (ricardo@id-agora.com) # Copyright (C) 2001 Ricardo J. Cárdenes Medina # # Autorizado por peletier.com. (jm@peletier.com) # WitSummon es propiedad de peletier.com. Todos los derechos reservados. # http://www.peletier.com/trivial/WitSummon # # Este módulo es software libre. Puede distribuirlo y modificarlo # ciñéndose a los términos de la versión 2 de la licencia GNU General # Public License tal como la publica la Free Software Foundation # # http://www.gnu.org/licenses/gpl.txt # from string import split, strip from select import select import socket import sys def uso(): print "Uso:" print "%s canal [-s]" % (sys.argv[0]) print " (El canal debe ir sin #)" print " -s: modo silente" print print "(C) 2001 Ricardo J. Cardenes Medina (adaptado a Python)" sys.exit( 0 ) # comprobar opciones nopts = len( sys.argv ) if ( nopts < 2 ) or ( nopts > 3 ): uso() canal = sys.argv[1] if canal[0] == '#': uso() imprime = 1 if nopts > 2: if sys.argv[2] == '-s': # Cambiar a modo "Silente" imprime = 0 # # conectar a peletier.com, puerto 5520 # sockPeletier = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) sockPeletier.connect( ( '212.25.146.30', 5520 ) ) # Negociación de versión print 'WitSummon 0.1 para Python, por Ricardo J. Cardenes Medina' print 'Autorizado por peletier.com. Protocolo WitSummon 1.0' print res = strip( sockPeletier.recv( 1024 ) ) print res print print 'Enviando versión' res = sockPeletier.send( 'VERSION 1.0\n' ) # Recibimos la cadena FORCECONNECT # que nos indica el servidor IRC y # el puerto al que debemos conectar print 'Recibiendo FORCECONNECT' ( res, servidor, puerto ) = split( strip( sockPeletier.recv( 1024 ) ) ) puerto = int( puerto ) print 'Usando el servidor %s, puerto %s' % ( servidor, puerto ) print # Envío de información res = sockPeletier.send( 'USER anonymous connect\n' ) print 'Usando el canal', canal res = sockPeletier.send( 'CHANNEL #' + canal + '\n' ) if not imprime: print "Modo Silente" res = sockPeletier.send( 'DONE\n' ) # # Entrar en IRC # print 'Conectando al servidor IRC...' sockHispano = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) sockHispano.connect( ( servidor, puerto ) ) print 'Conectado' print # Indicamos a peletier el éxito de la conexión res = sockPeletier.send( 'CONNECTED\n' ) # Ahora nos quedamos en bucle infinito, conectando ambos # sockets print 'Iniciando diálogo...' sPfn = sockPeletier.fileno() sHfn = sockHispano.fileno() while 1: ( inp, out, err ) = select( [ sPfn, sHfn ], [], [] ) if sPfn in inp: res = sockPeletier.recv( 1024 ) if imprime: print strip( res ) res = sockHispano.send( res ) if sHfn in inp: res = sockHispano.recv( 1024 ) if imprime: print strip( res ) res = sockPeletier.send( res )