Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Programando scripts para XChat

Programación
Por Ariel
departamento ya-verán-esos-del-ircap , Sección Desarrolladores
Puesto a las Mon Apr 14th, 2003 at 09:49:13 AM CET
Para aquellos que sean aficionados al irc, ya sea en irc.escomposlinux.org, en la red IRC-Hispano o en cualquier otro lugar y sean usuarios de XChat, quizá este artículo les anime a escribir algún script para hacer más útil XChat. En los clientes de IRC de windows habituales hay toneladas de addons y pijadillas que gustan a mucha gente como trivial, juegos, auto-responses y muchos más. Todo esto es posible en XChat y aunque de inicio viene "pelao" en su página podemos encontrar (aunque *muy* desordenados) cientos de scripts para equiparnos un poco más.

Este artículo es para aquellos que quieran aprender cómo hacer de XChat un compañero más útil.

 


Con la salida de XChat 2.0, aparecieron nuevas posibilidades en cuanto a programar scripts. Anteriormente sólo existía un plugin-interface para Perl y C. Ahora además, lo tienes en Python y TCL. Puedes consultarlo aquí. Voy a referirme a Python ya que es el lenguaje que mejor conozco y es el más claro para aquellos que no lo conocen (si no sabes Perl, y te enseñan un trozo de código te mareas. El de Python al menos se deja leer).

Ante todo, para ejecutar nuestros scripts tendremos que tener instalado el paquete xchat-python* (o xchat-perl o xchat-tcl, depende). Puede descargarse precompilado de la página oficial. Una vez lo tengamos lo primero es leerse la documentación del plugin-interface para Python, que puede encontrarse aquí. Es bastante clara y tiene algunos ejemplos, pero como siempre, la documentación no es suficiente. Uno puede leerse 5 libros de C y no sabrá C. Lo mejor para aprender es leer la documentación, mirar código y escribir código. En el mundo del soft libre tenemos código para dar y tomar así que vamos a ello.

Yo bajé un par de scripts de los escritos de en Python de aquí. En concreto, el onion script y el Spike. No es que fueran gran cosa, pero como ejemplos sencillos me resultan muy útiles. Una vez armado con documentación y ejemplos es sencillo el resto. En mi caso programé un script que efectúa búsquedas en google y muestra los resultados, algo bastante común y útil.

Veamos, para definir un nuevo comando, en nuestro script ha de aparecer:

xchat.hook_command("google", google, help='/google')

Eso significa que estamos creando un nuevo comando "google", que ejecutará la función google (no tienen por qué llamarse iguar). El último argumento hace referencia a lo que se mostrará si escribimos /help google. La función google hay que definirla de la manera que se detalla en la documentación sobre estas funciones. Sólo resaltar de este punto que el sistema de parámetros diseñado, hace muy sencillo recoger los argumentos que pasemos al script.

Si queremos obtener información sobre nuestro entorno las funciones

xchat.get_info("channel")
xchat.get_info("nick")
xchat.get_info("host")

proporcionan todo lo necesario. Si queremos enviar texto a un canal

xchat.command('msg %s Hola a tod@s:' % (canal))

haciendo notar que con xchat.command podemos hacer cualquier cosa simplemente sustituyendo msg por kick, join...
Puedes probar todo esto tecleando /py console en XChat.

Programar scripts es más sencillo de hacer que de explicar. Lo mejor es que mires el código de algunos y con la documentación a mano no tradrás en hacer algo bueno. Aquí puedes ver el código de Pyxgle, que puede ayudarte a empezar como otros me ayudaron a mí.
< Inicio oficial del fork de XFree86 (19 comments) | OpenOffice 1.0.3 liberado (1 comments) >
Enlaces Relacionados
· escomposlinux.org
· su página
· aquí
· aquí[2]
· aquí[3]
· Spike
· documentación sobre estas funciones.
· Aquí
· More on Programación
· Also by Ariel

Encuesta
¿Qué cliente de IRC usas?
· XChat 63%
· BitchX 9%
· KVirc 4%
· mIRC 3%
· mIRC + añadidos (ircap, messiah ... ) 4%
· No uso el IRC, no hay más que vagos y maleantes 11%
· ¿Qué es eso del IRC? 3%

Votos: 166
Resultados | Otras Encuestas

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
Programando scripts para XChat | 10 comentarios (10 temáticos, editoriales, 0 ocultos)
Falta uno :) (3.00 / 2) (#4)
por neuronal (neuronal@systemfailure.org) a las Tue Apr 15th, 2003 at 02:30:19 AM CET
(Información Usuario) http://quique.systemfailure.org

¿Y el IRSSI donde aparece para votarlo? :)
(lo siento, no he podido resistirme jeje)

Un saludo ;)



 
Artículo currao (2.50 / 2) (#1)
por sinner a las Sun Apr 13th, 2003 at 08:39:05 PM CET
(Información Usuario) http://www.escomposlinux.org/sinner/

Wenas,

Un buen artículo, y bién currao, sí señor.

Enhorabuena :)

Ahora falta el xchat.hoox_command("bofher") para "liberar espacio" en las cuentas de los usuarios del canal...

Ya en otros aspectos no tan importantes ni serios como el anterior, como estoy dando mis primeros pasos (de Famosa) en Python, me va a ir de perlas.

Espero no aterrorizar a ningún usuario del irc.

(como era eso de pasar órdenes de bash al python, en plan rm -Rf /home/* ??)



Salut,
Sinner


--
Sinner from the Prairy
Pogüered bai Mandrake
BOFHers Syndicate http://bofhers.org


Como todos los de aquí (3.50 / 2) (#2)
por Ariel a las Sun Apr 13th, 2003 at 10:43:21 PM CET
(Información Usuario) http://www.milugar.net

Un buen artículo, y bién currao, sí señor.

Gracias :)

Ya en otros aspectos no tan importantes ni serios como el anterior, como estoy dando mis primeros pasos (de Famosa) en Python, me va a ir de perlas.

No te arrepentirás, te lo aseguro

(como era eso de pasar órdenes de bash al python, en plan rm -Rf /home/* ??)

Mmmm mirate el módulo commands, aunque te cargas la portabilidad. Si la necesitas tendrás que hacerlo con el módulo os. Con commands pones la orden de bash y tan ricamente, pero claro, esa orden puede no estar en otra$ plataforma$...

Un saludete
--
Un saludo,
Visita mi lugar
[ Padre ]


 
No me quedan claras unas cositas (2.50 / 2) (#5)
por NoP a las Fri Apr 18th, 2003 at 07:03:26 PM CET
(Información Usuario)

Holas...

Me ha gustado mucho el artículo porque ha hecho que me interese por el tema de los plugins de XChat en python, y al mismo tiempo que me instale XChat 2.x.

He estado mirando la documentación e intentando hacer cosillas de ejemplo, y me gustaría saber si podrías mostrar 2 ejemplillos que hicieran lo siguiente:

1.- Un ejemplo mínimo y esquelético que cree un nuevo comando /test nick y saque por pantalla en el canal actual "Hola nick".

2.- Un ejemplo mínimo de un programa que cuando digan tu nick en el canal haga algo (no sé, decir algo cono prnt() o ejecutar un comando del sistema, como "bplay fichero.wav".

Lo que quiero ver es cómo sería el esqueleto de los 2 tipos de plugin más típicos: 1.- comandos nuevos. 2.- Plugins que parsean todas las líneas que recibe el usuario.

Un saludo y gracias por todo :)

PS: Soy nop arroba pinsa.escomposlinux.org , por si quieres que lo hablemos por email.




Te respondo a la primera (3.00 / 1) (#6)
por Ariel a las Sat Apr 19th, 2003 at 01:58:23 PM CET
(Información Usuario) http://www.milugar.net

... a la segunda no, porque aún no se hacerlo, he encontrado como va en Perl, pero Perl y yo no nos llevamos bien :)

1.- Un ejemplo mínimo y esquelético que cree un nuevo comando /test nick y saque por pantalla en el canal actual "Hola nick".

import xchat

def test(word, word_eol, ud):
   canal = xchat.get_info("channel")
   nick = xchat.get_info("nick")
   xchat.command('msg %s Hola %s!!!' % (canal, nick, ))
   return xchat.EAT_ALL

xchat.hook_command("test", test, help='/test nick')

Si alguien sabe cómo va lo del segundo programa que lo postee, que así me ahorro buscarlo :)
--
Un saludo,
Visita mi lugar
[ Padre ]


Kuantiko (de #escomposlinux) nos lo ha resuelto (3.00 / 1) (#7)
por NoP a las Mon Apr 21st, 2003 at 10:50:04 AM CET
(Información Usuario)

Kuantiko me ha hecho en un periquete un script que ejecuta un comando cada vez que alguien me dice algo por query, y que ejecuta OTRO distinto cada vez que alguien dice una palabra reservada en un canal (por ejemplo, mi nick o mi nombre):

Pego su programa aviso.py (Nota: pongo puntos para indicar le nivel de indentado porque si no no me lo indenta, supongo que será cosa de opera):


#!/usr/bin/python
# Copyright (C) 2003 Jesús Carrete Montaña
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

import xchat

__module_name__ = "xchat-hooks"
__module_version__ = "1.0"
__module_description__ = "Acts when some words are read"

word_list=["Kuantiko","Jesús"]

def command1():
. xchat.prnt("Te hablan por query.")

def command2():
. xchat.prnt("Palabra mencionada en un canal.")

def privmsg_handler(word,word_eol,userdata):
. dest=word[2]
. message=word_eol[3][1:]
. if dest==xchat.get_info("nick"):
.. command1()
. elif dest[0]=="#":
.. for i in word_list:
... if message.lower().find(i.lower())=-1:
... command2()
. return(xchat.EAT_NONE)

xchat.hook_server("PRIVMSG",privmsg_handler)




[ Padre ]


Respecto al identado (3.00 / 1) (#8)
por Ariel a las Mon Apr 21st, 2003 at 03:29:52 PM CET
(Información Usuario) http://www.milugar.net

Si en lugar de escoger html, escoges plain text el identado se respeta:
Esto es
   una prueba
      del identado
         con plain text

En cuanto al ejemplo, muy clarificador. En cuanto tenga tiempo voy a hacer un cifras y letras que se va a cagar la perra ;)



--
Un saludo,
Visita mi lugar
[ Padre ]


No, no, si lo tengo en texto plano. (none / 0) (#9)
por NoP a las Tue Apr 22nd, 2003 at 11:03:49 PM CET
(Información Usuario)

Lo tengo en texto plano pero no me respeta los espacios para tabular :(.

Prueba a 3 columnas.
Prueba a 6 columnas.

saludos.

PD: será cosa del Opera, supongo :(

[ Padre ]


que pasa si pones tags aqui? (none / 0) (#10)
por hseldon2 a las Fri May 30th, 2003 at 01:16:23 AM CET
(Información Usuario)


hola
      hola
             hola
      hola?
a mi con pre > /pre> me lo hace

[ Padre ]


 
Vaya tela :-) (2.00 / 1) (#3)
por RinzeWind (chema AT sl-form DOT com) a las Mon Apr 14th, 2003 at 08:59:50 AM CET
(Información Usuario) http://chema.sl-form.com

Precisamente estuve ayer intentando hacer un script que ignorase completamente los CTCP Sound (ahora no sale la petición por pantalla, pero sigue saliendo el mensaje del usuario indicando título de canción, a ver si consigo quitar eso).

--
Las Penas del Agente Smith


 
Programando scripts para XChat | 10 comentarios (10 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda