1.-
INTRODUCCIÓN Se conocen como EVENTOS, en informática, todos aquellos sucesos que se producen a lo largo de una sesión de trabajo de un programa, y que éste es capaz de detectar y controlar. La programación orientada a eventos es aquella en la que podemos definir previamente las acciones que el programa debe de emprender en el momento en que se produzca un evento concreto. El mIRC es un programa altamente configuráble y personalizáble a través de la definición de Alias, Popups, y Remotes. Dentro de este último grupo esta la herramienta que nos ocupa;la posibilidad de programar acciones orientadas a un grupo de eventos propios de una sesión de IRC; es decir, es posible programar de modo sencillo acciones de cierta complejidad como respuesta a algunas situaciones. Existen tres tipos de eventos en el mIRC, los que llamaremos estándar, que son los que se describen aquí, y los eventos CTCP que describiré en un capítulo aparte, y los eventos RAW que se explicarán en el apartado Números Raw. 2.- UN EJEMPLO DEL USO DE EVENTOS Por ejemplo, es muy sencillo hacer que el programa detecte cada vez que, en cualquier canal en el que estemos, alguien escriba nuestro nick (supongamos que es SomaTic), y en consecuencia, si lo deseamos, comunicar privadamente a esa persona que no estamos prestando atención en ese momento. No habría más que recurrir al evento "onTEXT", quizás el más importante de todos. Para esto debemos de ir al menú "TOOLS" que se encuentra en la barra de menús de la parte superior de la pantalla de mIRC y pulsar la opción "REMOTE...". Nos aparece un cuadro con una gran ventana de texto y una nueva barra de menús en la parte superior. Vayamos al menú "VIEW" y seleccionemos la opción "events"; ya podemos escribir en el cuadro de texto nuestras órdenes para el control de eventos (hágalo a ser posible al principio de esta caja de texto). Escribiremos la siguiente línea: Pulsamos el botón "OK" y trabajo concluido. Desde este momento, si {_PePe_} menciona el nombre de SomaTic recibirá un mensaje que solo podrá ver él (notice), en el que le decimos: "Perdona {_PePe_} no estoy prestando atención!!!". Al margen de la sintaxis de la línea, que veremos más adelante, la objeción es evidente: ¿Y que pasa si SÍ estamos prestando atención? ¿tenemos que ir otra ver a la ventana de edición de eventos y borrar lo que pusimos?. Bueno, es una posibilidad, pero afortunadamente también tenemos la facilidad de hacer que la acción de los eventos que deseemos se active y desactive a nuestra voluntad. Vayamos de nuevo a la ventana de edición de eventos y escribamos lo siguiente en las líneas anterior y posterior a la que escribimos antes: #ausente off y #ausente end. El bloque total (grupo) quedará de la siguiente forma:
on 1:TEXT:Somatic:#:/notice $nick Perdona $nick no estoy prestando atención!!!. #ausente end Pruebe los efectos de la programación de eventos aplicando los distintos comandos del IRC y del mIRC en su interior (por motivos que desconozco algunos de ellos no funcionan en este contexto, como por ejemplo /me, /ame, /say, ... etc). También puede hacer uso de alias préviamenre definidos, o de la estructura IF-ELSE, pero, en cualquier caso, si desea incluir varias líneas de órdenes vinculadas a un mismo evento use siempre el separador de comandos (el carácter "|", que se obtiene pulsando las teclas ALTGR y 1). 3.- GENERALIDADES DE LA SINTAXIS DE EXENTOS Como ya se ha podido observar en el ejemplo anterior, lo que hemos dado en llamar un la línea de evento se forma mediante una cadena de caracteres en la que los distintos campos de información están separados por el símbolo de los dos puntos. Los campos son los siguientes: En el primer campo es necesario especificar en nivel de acceso remoto que ese usuario tiene a nuestro sistema. Este es un tema algo complejo en el que no procede entrar ahora, baste saber que este nivel es un número que marca la capacidad de acceso que cada usuario tiene para ejecutar comandos del IRC de forma remota dentro de nuestro ordenador. No se alarme, nadie tendrá un nivel que usted no le haya concedido previamente, y este para los comandos que usted especifique. Para comprobar quien tiene nivel de acceso remoto a su sistema no tiene más que mirar en la solapa de "USERS" de la misma ventana desde donde introducimos los eventos, ahí puede añadir o borrar lo que desee. En principio, y para todos los efectos de este documento, podemos considerar el nivel de acceso 1 que es el que otorga el programa por defecto a todos lo usuarios; por tanto, en este caso el primer campo sería: on 1. también es posible anteponer el símbolo @ antes del número de nivel, si hacemos esto, la definición del evento no se ejecutará nada más que en caso de que dispongamos del estatus de operador del canal. El segundo campo es el identificador del evento que estamos configurando, en el ejemplo anterior era TEXT, pero descubrirá que hay otros muchos. El tercer campo es el "texto", este no tiene sentido en todos los eventos, gran parte de ellos no están vinculados a texto alguno, y simplemente se omite este campo. El cuarto campo es "lugar", es decir, el canal, privado...etc. donde el mIRC vigilará la circunstancia del evento, podemos especificar de este modo que determinado evento produzca las acciones especificadas solo si se da en un determinado lugar. Como en el campo anterior no siempre tiene sentido y por tanto se omite en algunas definiciones de eventos. El último campo es el más grande, incluye el comando o comandos, alias, etc... que se ejecutarán en caso de que se produzca el evento y las circunstancias especificadas. En este campo se pueden concatenar varios comandos utilizando el símbolo "entubador": "|" (no olvide dejar espacios en blanco a ambos lados del entubador). Para aumentar aun más la potencia de la configuración de eventos, estos admiten el uso de funciones, son todos aquellos identificadores que comienzan por el símbolo $ (la referencia del mIRC los llama parámetros, el tema es mas bien terminológico, yo prefiero verlas como funciones puesto que junto con las internas del programa el mIRC permite definir otras propias, con una sintaxis muy similar a la del lenguaje C). No se relaciona en este documento una lista exhaustiva de dichas funciones, puesto que muchas de ellas son propias de un solo evento concreto, mientras que otros no las admiten. No obstante, si presta atención a los ejemplos irá viendo la forma y utilidad de la mayoría de ellas, en los lugares en los que son efectivas; el resto lo debe de aportar la experiencia personal. (las funciones deberán de tener siempre espacios en blanco a ambos lados de su nombre). Es perfectamente posible, así mismo, el empleo de variables y estructuras IF-ELSE dentro de las definiciones de eventos, encontrará numerosos ejemplos de este uso en los scripts para mIRC que circulan a libre disposición en la WWW y el IRC. Es hora de entrar a conocer una a una las definiciones de eventos que proporciona la versión 5.31 del mIRC. Esta lista está basada en la ayuda del propio programa y no la considero cerrada, por tanto agradeceré cualquier crítica y sugerencia, por supuesto las dudas también serán atendidas en mi e-mail: sucubus@arrakis.es, o en el canal #Ayuda_IRC del IRC Hispano, no tiene más que preguntar por SomaTic ;).
Este evento se produce al recibirse un mensaje especificado, bien en un privado, o bien en un canal en el que nos encontramos.
Ejemplo: on 1:TEXT:*ayuda*:*:/msg $nick ¿Cual es el problema?
Se puede especificar el lugar donde se controlará el evento de la siguiente forma:
Ejemplos: Esta instrucción detectará cuando alguien diga la palabra "Hola" en cualquier canal que nos encontremos, y automáticamente le dará la bienvenida al canal en cuestión. El identificador $+ elimina los espacios en blanco que tiene a ambos lados, de ese modo podemos hacer que el nick de la persona que ha dicho "hola" aparezca en nuestra respuesta seguido del símbolo "!", si escribimos directamente este símbolo a continuación de $nick este no será reconocido como un identificador del nick del usuario, sino que aparecerá literalmente como está en la orden. También es posible emplear variables para dar más flexibilidad al formato del evento, por ejemplo: Este ejemplo trabajará con los valores previamente guardados en las variables %text, y %canal. Nota: Este evento se producirá solo ante textos de otros usuarios, los de usted no desencadenarán el evento.
Esta orden detectará cualquier acción que contenga la cadena "Set mode", y emitirá un mensaje al canal en que se produce. Esta orden detecta cualquier /notice recibido estando en un privado, y responde con otro /notice al autor.
Ejemplos: Observe en este ejemplo el uso de la función $bnick. Esta devuelve el nick del usuario baneado o desbaneado, pero solo en caso de que dicho nick este incluido dentro de la máscara del baneo. En caso contrario $bnick = $null (nulo). Es posible tener en cuenta en la sintaxis de la instrucción los niveles del baneador y del baneado. A este fin se puede preceder el número de l nivel de los signos: <,>,<=,=>,<>, ó =. Por ejemplo: En esta situación, si el nivel del baneador es mayor o igual que el del usuario baneado, se comunica queeste es un ban legal (como se podría comunicar cualquier otra cosa) Recuerde, esta sintaxis compara los niveles de baneado y baneador, nunca que este tenga o no nivel superior o igual a 2. Nota: Estos eventos solo operan cuando el server de IRC proporciona los nicks de baneador y baneado, y no su cuando da sus direcciones. Observe el siguiente ejemplo:
if ( $banmask iswm $address( $me ,0)) || ( $me isin $banmask ) { echo -s $nick te ha baneado con esta máscara: $banmask } if ( $me isop $chan ) { mode $chan -ob+b $nick $banmask $address($nick,2) } }
Ejemplo: on 1:CHAT:*ayuda*:/msg $nick Cual es el problema?
Ejemplo: on 1:CHATOPEN:/msg =$nick Bienvenido! Esta instrucción envía una frase al DCC chat cuando este se abre por primera vez. El uso del signo "igual" delante de $nick es necesario para que el mensaje se dirija a la misma ventana del DCC chat, y no a una ventana privada aparte. Esto se produce al cerrar la ventana del DCC chat.
Ejemplo: on 1:CHATOPEN:/msg =$nick Bienvenido!
Ejemplo: on 1:CONNECT:/join #ayuda_irc Ejemplo:
Se produce cuando otro usuario responde a una pregunta CTCP por parte de usted.
Ejemplo: on 1:CTCPREPLY:VERSION*:/echo $nick está usando IRC cliente: $1- Ejemplo:
Ejemplo: on 1:OP:#ayuda_irc:/msg $nick No abuses del estatus! Ejemplos: En este ejemplo el evento se produce cuando es opeado un usuario de nivel de acceso 9 en nuestra sección de remotes. $opnick devuelve el nick de la persona opeada o deopeada, y $nick el de la que lo opeó o deopeó. Con esta orden devolvemos el op a cualquier persona que sea deopeada en el canal #ayuda_irc. Es posible tener en cuenta en la sintaxis de la instrucción los niveles del opeador y del opeado. A este fin se puede preceder el número de nivel de los signos: <,>,<=,=>,<>, ó =. Por ejemplo: En esta situación, si el nivel del opeador es mayor o igual que el del usuario opeado, se comunica que este es un op legal (como se podría comunicar cualquier otra cosa) Recuerde, esta sintaxis compara los niveles de opeado y opeador, nunca que este tenga o no nivel superior o igual a 2. Nota: Estos eventos solo operan cuando el server de IRC proporciona los nicks de opeador y opeado, y no su cuando da sus direcciones.
Se produce cuando un usuario recibe o es privado de voz en un canal moderado en que nos encontramos.
Ejemplo: on 1:VOICE:#:/msg $vnick ya tienes voz en: $chan Esta orden se ejecuta cuando el que recibe voz tiene nivel 9 o superior. Devuelve la voz al que se le quite en el canal. Son aplicables también los prefijos de comparación de niveles descritos en on BAN y on OP.
Se produce cuando hacemos un requerimiento DNS (comando /dns).
Ejemplo: on 1:DNS:/notice $me resuelto: $raddress
Se produce cuando el server envía un mensaje de error, por ejemplo, en una desconexión.
Ejemplo: on 1:ERROR:*server full*:/echo Has salido del server! Ejemplos:
Se producen al completarse un dcc send o un dcc get (envio o recepción de ficheros reapectivamente).
Ejemplo: on 1:FILESENT:*.txt:/msg $nick ahí te mando: $filename !! Ejemplos: Se produce cuando enviamos un fichero .TXT o INI. $filename devuelve el nombre del fichero enviado. Esta orden avisa cuando hemos recibido ficheros .TXT e .INI, y abre el bloc de notas para ver su contenido.
Ejemplo: on 1:INPUT:/echo Texto introducido: $1-
Se produce cuando un usuario nos invita a un canal.
Ejemplo: on 1:INVITE:#mIRC:/join $chan
Ejemplo: on 1:JOIN:#:/msg $nick Hola!
Se produce cuando un usuario es expulsado de un canal en el que nos encontramos.
Ejemplo: on 5:KICK:#:/invite $knick $chan | /msg $nick Hey, $knick ese es mi amigo!
Ejemplo: on 1:LOAD:/echo mIRC Script cargado!
Ejemplo: on 1:MIDIEND:/splay jazzy.mid
Ejemplo: on 1:MODE:#ayuda_IRC:/notice $me $nick Cambia modos de $chan a: $1- Ejemplo: Esta instrucción se produce cuando alguien cambia los modos del canal teniendo nosotros también el estatus de operador.
Se produce cuando un usuario cambia de nick dentro del canal.
Ejemplo: on 1:NICK:/msg $nick Hi $newnick!
Este evento se produce cuando alguien activa un sonido en el canal y el mIRC no encuentra el fichero midi o wav en nuestros directorios de sonidos, los especificados en el dialogo FILE/OPTONS/SOUNDS.
Ejemplo: on 1:NOSOUND:/notice $nick No tengo el fichero $filename
Se producen al entrar o salir del IRC un usuario que se encuentra en nuestra lista de notificaciones.
Ejemplos:
Se producen respectivamente al abrirse una ventana de query.
Ejemplo: on 1:QUERYOPEN:/echo -s Abierto query con: $nick $address | / msg $nick Hola $nick
Se produce cuando un usuario que está en nuestro canal sale del IRC.
Ejemplos:
Se produce cuando recibimos una noticia del server.
Ejemplo: on 1:SNOTICE:*client connecting*:/halt Ejemplo: Activa un fichero de sonido
en caso de una noticia del server anunciando un
split.
Se produce cuando algún usuario cambia el tópico del canal.
Ejemplo: on 1:TOPIC:#mIRC:/msg $chan Hmm, que tópico mas cutre!!!: $1-
Se produce cuando cambiamos nuestros modos de usuario.
Ejemplo: on 1:USERMODE:/echo nuevos modos: $1-
Se produce cuando recibimos un wallops message.
Ejemplo: on 1:WALLOPS:*aviso*:/echo $nick mensaje de aviso a las: $time
Se produce cuando algún usuario cambia el tópico del canal.
Ejemplo: on 1:TOPIC:#mIRC:/msg $chan Hmm, que tópico mas cutre!!!: $1- |