viernes, 4 de febrero de 2011

PyIC ( Librería IRC para python ) 0.2

Pues eso, habemus nueva versión de PyIC ( una librería para clientes IRC ), ya está subida en GitHub [ https://github.com/kenkeiras/PyIC ]

Se puede ver como quedan las funciones en el README, pero los cambios básicamente son estos:

 - Lee el 'MOTD' automáticamente, se puede recuperar con irc.get_motd( ).
 - irc.get_users( ) devuelve la lista de usuarios, no hace falta leerlos a mano.
 - Lo mismo para irc.get_channels( ), que devuelve un array de tuplas( 'canal', 'número de usuarios', 'tema' ).
 - irc.get_topic( ) lo mismo, devuelve una string con el tema.
 - Y para no variar, lo mismo para irc.whois( ) y irc.whowas( ) , que devuelven un diccionario como este:
{ 'server_info': Información del servidor
  'idle': 'seconds idle, signon time'
  'real_name': Nombre real del usuario
  'channels': Array de canales
  'nick': Nick del usuario
  'host': Dirección del host
  'user': Nombre del usuario
  'time': Tiempo conectado
  'server': Server donde está conectado
}

Enfín, por ejemplo:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# PyIC example

from pyic import *

botName = "HelloBot" # NickName

server = "irc.freenode.net" # IRC server

channel = "#bot_testing" # IRC channel
greet = "Hello"
topic = "PyIC testing"

print "Connecting..."

irc = irc_client( botName, server ) # Connect

print "Message of the day:"
print irc.get_motd( )

print "Reading channel list"

print len( irc.get_channels( ) ), "channels"

print "Joining", channel
irc.join( channel ) # Joins the channel

irc.notice( channel, greet + " " + channel ) # talks to the channel

# use notice in order to avoid automatic responses

# Reads the user list
for usr in irc.get_users( channel ):

    print '"' + usr + '" data'
    print irc.whois( clean_usr( usr ) ) # Shows the user data
    irc.notice( channel, greet + " " + usr ) # talks to the user

print "Setting channel topic"
irc.set_topic( channel, topic )

print "Topic:", irc.get_topic( channel )

print "Waiting for users..."

# Greets who enters the channel
while ( True ):
  
    msg = irc.getmsg( )
    if ( msg.type.upper( ) == "JOIN" ): # Someone entered the channel
        if ( msg.by != botName ):
            print "'" + msg.by + "'", "has arrived"
            irc.notice( channel, greet + " " + msg.by )
            print irc.whois( msg.by )


Hasta la próxima

2 comentarios:

  1. exelente me encanta la nueva version en especial lo del mensaje del día
    irc.get_motd( )
    otra cosa esta linea esta de mas
    if ( msg.by != botName ):
    porque si el bot ya esta adentro no va a enviar un mensaje JOIN y mas nadie puede tener el nombre del bot asique en my opinion esta como de mas :D

    ResponderEliminar
  2. Me alegro, quedan muchas cosas que perfilar, pero esas eran las mñas urgentes.

    El msg.by está bien, cuando alguien se une a un canal, el también recibe su propio mensaje de JOIN, si no me crees añade un else después del if y verás que es así ;)

    ResponderEliminar