Eventos

 

EVENTOS.-

 

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. Es decir, predisponemos al programa a que preste especial atención a algunos sucesos, y le obligamos a que analice dichos eventos a fin de determinar si se reúnen las circunstancias que hemos establecido, y de se así, ejecutar las acciones que para ese caso le hemos programado.

 

El mIRC es un programa altamente configurable y personalizado a través de las definiciones de Alias, Popups y Remotes. Dentro de este último grupo provee una de sus herramientas más potentes: 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í, los eventos CTCP y los eventos RAW.

 

Un ejemplo del uso de eventos.-

 

Es muy sencillo hacer que el programa detecte cada vez que, en cualquier canal en que nos encontremos cuando alguien escriba nuestro nick (supongamos que es Ortiga), y si lo deseamos, comunicar privadamente a esa persona que no estamos prestando atención en ese momento. No habría mas que recurrir al evento “on TEXT”.

 

Para esto debemos ir al menú Herramientas y Editor de Scripts que se encuentra en la barra de menús de la parte superior de la pantalla y pulsar en la opción Remotos, se nos abrirá una ventana de texto con el último remote abierto, para crear una nuevo vamos al menú de esa ventana y sobre Archivo seleccionamos Nuevo, ya estamos en disposición de crear nuestro remote.

 

Escribiremos la siguiente línea:

 

on 1:text:Ortiga:#: notice $nick Perdona $nick en este momento no estoy prestando atención.

 

Pulsamos sobre el botón Ok y trabajo concluido. Desde este momento si Luis_XVI menciona el nombre de Ortiga recibirá un mensaje que solo podrá ver el (notice) en el que le decimos: “Perdona Luis_XVI no estoy prestando atención.”

 

Pero ¿que pasa si estamos prestando atención?. ¿Tendremos que ir otra vez a la ventana de edición del remote y borrar lo que habíamos escrito?. Es una posibilidad claro, pero también tenemos la posibilidad de hacer que la acción de los eventos que deseemos se active o desactive a nuestra voluntad, para eso vayamos otra vez a la ventana de edición de eventos y escribimos lo siguiente en las líneas superior e inferior a la que escribimos antes: #ausente off y #ausente end. El bloque quedaría asi:

 

#ausente off

on 1:text:Ortiga:#: notice $nick Perdona $nick en este momento no estoy prestando atención.

#ausente end

 

De esta forma podemos crear bloques o grupos de eventos con tantas líneas como deseemos en su interior. Para activar o desactivar su efecto debemos incluir las instrucciones: .enable #ausente y .disable #ausente dentro de algún alias o de un menú (sección de alias y popups), (el punto delante de las cláusulas enable y disable tiene el único fin de inhibir el mensaje que el programa presenta en la pantalla anunciando la activación o desactivación del grupo). Se puede hacer uso de alias previamente definidos o de la estructura IL-ELSE, pero en cualquier caso, si desea incluir varias líneas de ordenes vinculadas a un mismo evento lo puede hacer escribiendo cada orden en una línea diferente o si es en la misma separándolas siempre por el separador de comandos “|” que se obtiene pulsando las teclas AltGr y 1.

 

Generalidades de la sintaxis de eventos.-

 

Como se ha podido observar en el ejemplo anterior, lo que hemos llamado una línea de evento se forma mediante una cadena de caracteres en la que los distintos campos están separados por el símbolo de los dos puntos. Los campos son los siguientes:

 

on <level>:<evento>:<texto>:<lugar>:<comandos>

 

En el primer campo es necesario especificar en nivel, el acceso que tiene que tener el usuario para que cuando el evento se ejecute funcionen las ordenes que le hayamos establecido. En general se usa el comodin “*” para referirse a todos los usuarios o el “1” que tiene el mismo efecto que el “*”. El campo quedaría pues de cualquiera de estas dos expresiones: on * o on 1. También es posible anteponer el símbolo @ antes de nivel, si lo hacemos así, la definición del evento no se ejecutará nada más que en caso de que tengamos estatus de operado del canal.

 

El segundo campo es el identificador del evento que estamos configurando, en el ejemplo anterior era text, pero hay muchos más.

 

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 en tales casos 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 así qué 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).

 

Es también posible el empleo de variables y estructuras if-else dentro de las definiciones de eventos.

 

Relación de eventos.-

 

·         Eventos ON TEXT

 

Este evento se produce al recibirse un mensaje especificado en un privado o bien en un canal en el que nos encontremos.

 

El formato es: on <level>:text:<texto>:<*><?><#[,#]>:<comandos>

 

Ejemplo: on 1:text:*ayuda*:*:/msg $nick ¿Qué problema tienes?

 

El texto del mensaje que deseamos que produzca el evento se puede especificar de varias maneras:

 

Especificación

Significado

*

El evento se producirá ante cualquier texto

&

El evento se producirá ante cualquier palabra

Texto

El evento se producirá ante una palabra concreta y no otra

Texto*

El evento se producirá ante una cadena de caracteres que comience por el texto especificado

*Texto

El evento se producirá ante una cadena de caracteres que termine con el texto especificado

*Texto*

El evento se producirá si el texto contiene la cadena especificada, sea cual sea su posición

 

Se puede especificar asimismo el lugar donde se controlará el evento de la siguiente forma:

 

Especificación

Significado

*

Controla el evento en un privado o en un canal indistintamente

?

Controla el evento dentro de un query o de un DCC chat

#

Controlará el evento dentro de un canal cualquiera en que nos encontremos

#canal_1,#canal_2

Controlará el evento dentro de un canal especificado

 

Ejemplos:

 

on 1:text:Hola*:#:/msg $chan ¡Bienvenido al canal $chan $nick $+ !

 

Esta instrucción detectará cuando alguien diga la palabra “Hola” en cualquier canal en que nos encontremos, y de forma automática 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 este símbolo inmediatamente después de $nick este no será reconocido como un identificador del nick del usuario, sino que aparecerá literalmente como esta en la orden.

 

También es posible emplear variables para dar más flexibilidad al formato del evento, por ejemplo:

 

on 1:text:%text:%canal:/msg $nick tu has escrito %text en el canal %canal

 

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.

 

·         Eventos ON ACTION y ON NOTICE

 

Tienen  el mismo formato que on text, y se producen a partir de una acción o de una noticia respectivamente. Una noticia se produce cuando alguien nos envía un mensaje con el comando /notice, y una acción cuando alguien efectúa una acción de control dentro del canal, por ejemplo:

 

on 1:action:*set mode*:#:/msg $chan ¡Ya estamos jugando con los modos!

 

Esta orden detectará cualquier acción que contenga la cadena “set mode” y mandará un mensaje al canal en que se produce.

 

on 1:notice:*:?:/notice $nick Estoy ocupado, espera un momento!

 

Esta orden detecta cualquier /notice recibido en un privado y responde al autor con otro /notice.

 

·         Eventos ON BAN y ON UNBAN

 

Este evento se producirá cuando un usuario sea baneado o desbaneado de un canal.

 

El formato es: on <level>:ban:<#[,#]>:<comandos>

 

Ejemplos:

 

on 1:ban:#:/msg $nick Has sido baneado de: $chan

on 9:ban:#:/mode $chan –o $nick | /mode $chan –b $banmask

 

El Segundo ejemplo es una acción múltiple que quita el estatus de operador al usuario que puso el ban y elimina este cuando el usuario baneado tiene level 9 o superior. La función $banmask devuelve la máscara de baneo que fue empleada, y se usa, en este caso, para eliminar dicho baneo.

 

on 1:unban:#:/msg $bnick Has sido desbaneado por $nick

 

Obsérvese 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 sería igual a $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 del nivel de los signos <,>,<=,=>,<>,=. Por ejemplo:

 

on >=2:ban:#:/msg $chan $nick baneado $banmask (legal)

 

En esta situación, si el nivel del baneador es mayor o igual que el del usuario baneado, se comunica que este ban es legal (como se podría comunicar cualquier otro cosa).

 

Recuerde que 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 cuando da sus direcciones.

 

Observe el siguiente ejemplo:

 

on 1:ban:#:{

if (($banmask iswm $address($me,0)) || ($me isin $banmask)) { echo –s $nick te ha baneado con esta mascara: $banmask }

if ($me isop $chan) { mode $chan –ob+b $nick $banmask $address($nick,2) }

}

 

Esta rutina se inicia cada vez que se produce una acción de baneo en un canal en que nos encontramos. En primer lugar comprueba que la mascara del ban coincide con la nuestra o bien tiene incluido nuestro nick, en tal cado emite un mensaje a la ventana de estatus especificando la persona que lo ha realizado y la mascara con la que se hizo el ban, a continuación comprueba si somos operadores del canal, y en tal caso retira el estatus de operador a quien nos ha baneado y le baneará a su vez.

 

·         Eventos ON CHAT Y ON SERV

 

Los eventos ON CHAT y ON SERV se producen cada vez que es enviado un mensaje a la ventana de chat o a un feserv respectivamente. Es similar al evento on text, el cual no funcinará en un chat ni en un servidor de ficheros.

 

El formato es: on <level>:<chat/serv>:<texto>:<comando>

 

Ejemplo: on 1:chat:*ayuda*:/msg $nick Cual es tu problema?

 

La especificación del texto que producirá el evento se hace de la misma forma que en on text.

 

·         Eventos ON CHATOPEN y ON CHATCLOSE

 

Estos eventos se producen al abrirse o cerrarse (respectivamente), una sesión de DCC chat.

 

El formato es: on <level>:chatopen:<comandos>

 

Ejemplo: on 1:chatopen:/msg =$nick Buenas!!

 

on 1:chatopen:/msg =$nick Hola, en un momento estoy contigo.

 

Esta instrucción envía una frase al DCC chat cuando este se abre por primera vez. El uso del signo “=” 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.

 

on 1:chatclose:/notice $nick fin de la discusión!!

 

Este se produce al cerrar la ventana de DCC chat.

 

·         Eventos ON SERVOPEN y ON SERVCLOSE

 

Estos eventos se producen al abrirse o cerrarse (respectivamente), una sesión se fserve.

 

Formato: on <level>:servopen:<comandos>

 

Ejemplo: on 1:servopen:/msg =$nick Buenasss

 

Eventos ON CONNECT y ON DISCONNECT

 

El evento on connect se produce cuando mIRC conecta al servidor de IRC, después de visualizar el motd (mensaje del día del servidor).

 

Formato: on <level>:connect:<comandos>

 

Ejemplo: on 1:connect:/join #ayuda

 

El evento on disconnect es otro evento con el mismo formato, que se produce al desconectarse del servidor.

 

Ejemplo: on 1:disconnect:/echo Desconectado de $server a las $time

 

·         Evento ON CTCPREPLY

 

Se produce cuando otro usuario responde a una pregunta ctcp por parte de usted.

 

Formato: on <level>:ctcpreply:<texto>:<comandos>

 

Ejemplo: on 1:ctcpreply:version*:/echo $nick está usando IRC cliente: $1-

 

Ver evento on text para los formatos de texto aceptados.

 

Ejemplo: on 1:ctcpreply:ping*:/echo –s $nick ha respondido al ping!

 

·         Eventos ON OP y ON DEOP

 

Se producen cuando un usuario del canal es opeado o deopeado.

 

Formato: on <level>:op:<#[,#]>:<comandos>

 

Ejemplo: on 1:op:#ayuda:/msg $nick No abuses del estatus!

 

El evento serverop es exactamente igual, y se produce cuando un usuario es operado por el servidor.

 

Ejemplos:

 

on 9:op:#:/mode $chan –o $opnick | /msg $nick no opees al personal!

 

En este evento el se produce cuando es opeado un usuario de nivel de acceso 9, $opnick devuelve el nick de la persona operada o despeada, y $nick el de la persona que lo opeo o deopeo.

 

on 1:deop:#ayuda:/mode $chan +o $opnick

 

Con esta orden devolveremos el op a cualquier persona que sea despeada en el canal #ayuda.

 

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:

 

            on >=2:op:#mIRC:/msg $chan $nick opeado (legal)

 

En esta situación, si el nivel del opeador es mayor o igual queel del usuario opeado, se comunica que este es un op legal (como se podría comunicar cualquier otra cosa.

 

Recuerde que 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 servidor de IRC proporciona los nicks de opeador y opeado, y no cuando da sus direcciones.

 

·         Eventos ON VOICE y ON DEVOICE

 

Se produce cuando un usuario recibe o es privado de voz en un canal en que nos encontramos.

 

Formato: on <level>:voice:<#[,#]>:<comandos>

 

Ejemplo: on 1:voice:#:/msg $vnick ya tienes voz en: $chan

 

Ejemplos:

 

on 9:voice:#:/mode $chan –v $vnick | /msg $nick No des voz a ese!

 

Esta orden se ejecuta cuado el que recibe voz tiene level 9 o superior.

 

on 1:devoice:#mIRC:/mode $chan +v $vnick

 

Devuelve la voz al que se le quite en el canal #mIRC.

 

Son aplicables también los prefijos de comparación de niveles descritos en on ban y on op.

 

·         Evento ON DNS

 

Se produce cuando hacemos un requerimiento DNS (comando /dns).

 

Formato: on <level>:dns:<comandos>

 

Ejemplo: on 1:dns:/notice $me resuelto: $raddress

 

Ejemplo: on 1:dns:/echo $nick ip address: $iaddress named address: $naddress resolverd address: $raddress

 

·         Evento ON ERROR

 

Se produce cuando el server envía un mensaje de error, por ejemplo, en una desconexión.

 

Formato: on <level>:error:<texto>:<comandos>

 

Ejemplo: on 1:error:*server full*:/echo Has salido del server!

 

Ver el evento on text para el formato de texto.

 

Ejemplo: on 1:error:*banned*:/echo Has sido baneado de este server!

 

·         Eventos ON FILESEND y ON FILERCVD, ON SENDFAIL y ON GETFAIL

 

Se producen al completarse un dcc send o un dcc get (envío o recepción de ficheros respectivamente).

 

Formato: on <level>:filesend:<filename[,filename]>:<comandos>

 

Ejemplo: on 1:filesend:*.txt:/msg $nick ahí te mando: $filename !!

 

Los eventos on sendfail y on getfail se producen cuando un dcc send o un dcc get son fallidos.

 

Ejemplo:

 

on 1:filesend:*.txt,*.ini:/echo Enviado $filename a $nick $address

 

Se produce cuando enviamos un fichero .txt ó .ini. $filename devuelve el nombre del fichero enviado.

 

on 1:filercvd:*.txt,*.ini:/echo Recibido $filename de $nick | /run notepad.exe $filename

 

Esta orden avisa cuando hemos recibido un fichero .txt ó .ini, y abre el bloc de notas para ver su contenido.

 

on 1:sendfail:*.txt:/echo Ha fallado el envío de $filename a  $nick

 

·         Evento ON INPUT

 

Se produce cuando introducimos texto en una caja de texto y pulsamos intro.

 

Formato: on <level>:input:<#[,#]><comandos>

 

Ejemplo: on 1:input:#:/echo Texto introducido: $1-

 

La función $1- devuelve en este caso toda la cadena de texto introducida.

 

·         Evento ON INVITE

 

Se produce cuando un usuario nos invita a un canal.

 

Formato: on <level>:invite:<#[,#]>:<comandos>

 

Ejemplo: on 1:invite:#mIRC:/join $chan

 

·         Eventos ON JOIN y ON PART

 

Se produce al entrar o salir un usuario de un canal donde nos encontremos.

 

Formato: on <level>:join:<#[,#]>:<comandos>

 

Ejemplo: on 1:join:#:/msg $nick Hola

 

·         Evento ON KICK

 

Se produce cuando un usuario es expulsado de un canal donde nos encontramos.

 

Formato: on <level>:kick:<#[,#]>:<comandos>

 

Ejemplo: on 5:kick:#:/invite $knick $chan | /msg $nick Hey, $knick es mi amigo!

 

Es aplicable también aqui la regla de comparación de niveles de los nicks descrita en los eventos ban y op.

 

·         Eventos ON LOAD y ON START

 

Estos eventos se producen cuando un fichero de script es cargado o descargado.

 

Formato: on <level>:load:<comandos>

 

Ejemplo: on 1:load:/echo mIRC script cargado!

 

·         Eventos ON MIDIEND y ON WAVEEND

 

Se produce cuando mIRC termina la reproducción de un fichero midi o wav.

 

Formato: on <level>:midiend:<comandos>

 

Ejemplo: on 1:midiend:/splay jazzy.mid

 

Este evento no tiene funciones asociadas. No se producirá si la reproducción se detiene a causa de una interrupción, sólo lo hace cuando la reproducción es completada.

 

·         Evento ON MODE

 

Se produce cuando un usuario cambia los modos del canal (pero no los de usuario).

 

Formato: on <level>:mode:<#[,#]>:<comandos>

 

Ejemplo: on 1:mode:#ayuda_irc:/notice $me $nick cambia modos de $chan a: $1-

 

El evento on servermode es otro evento que se produce cuando los modos son cambiados por el servidor.

 

Ejemplo: on @1:mode:#:/notice $me $nick changed $chan mode to $1-

 

Esta instrucción se produce cuando alguien cambia los modos del canal teniendo nosotros el estatus de operador.

 

·         Evento ON NICK

 

Se produce cuando un usuario cambia de nick dentro del canal.

 

Formato: on <level>:nick:<comandos>

 

Ejemplo: on 1:nick:/msg $nick Hi $newnick $+ !

 

$nick devuelve el nick antiguo; $newnick el Nuevo.

 

·         Evento ON NOSOUND

 

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/options/sounds.

 

Formato: on <level>:nosound:<comandos>

 

Ejemplo: on 1:nousound:/notice $nick No tengo el fichero $filename

 

·         Eventos ON NOTIFY y ON UNOTIFY

 

Se producen al entrar o salir del IRC un usuario que se encuentra en nuestra lista de notificaciones.

 

Formato: on <level>:notify:<comandos>

 

Ejemplos:

 

on 1:notify:/msg $nick Hola $nick $+ , ya te veo venir!!! :)

on 1:unotify:/notice $me $nick se va del IRC *sniff* :-(

 

·         Eventos ON QUERYOPEN y ON QUERYCLOSE

 

Se producen respectivamente al abrirse o cerrarse una ventana de query.

 

Formato: on <level>:queryopen:<comandos>

 

Ejemplo: on 1:queryopen:/echo –s Abierto query con: $nick $address | /msg $nick Hola $nick

 

·         Evento ON QUIT

 

Se produce cuando un usuario que está en nuestro canal sale del IRC.

 

Formato: on <level>:quit:<comandos>

 

Ejemplos:

 

on 1:quit:/notice $me $nick sale del IRC con e mensaje: $1-

on 1:quit:/msg $chan Bye-Bye to $nick *snif*

 

·         Evento ON SNOTICE

 

Se produce cuando recibimos una noticia del servidor.

 

Formato: on <level>:snotice:<texto>:<comandos>

 

Ejemplo: on 1:snotice:*client connecting*:/halt

 

Para una exlicación del formato de texto, ver el evento on text.

 

Ejemplo: on 1:snotice:*split*:/splay hack.wav

 

Activa un fichero de sonido en caso de una notice del servidor anunciando un split.

 

·         Evento ON TOPIC

 

Se produce cuando un usuario cambia el tópico del canal.

 

Formato: on <level>:topic:<#[,#]>:<comandos>

 

Ejemplo: on 1:topic:#mIRC:/msg $chan Hmmm, que tópico mas cutre!!!: $1-

 

La función $1- devuelve el texto completo del nuevo tópico.

 

·         Evento USERMODE

 

Se produce cuando cambiamos nuestros modos de usuario:

 

Formato: on <level>:usermode:<comandos>

 

Ejemplo: on 1:usermode:/echo –s Nuevos modos: $1-

 

·         Evento ON WALLOPS

 

Se produce cuando recibimos un wallops message.

 

Formato: on <level>:wallops:<texto>:<comandos>

 

Ejemplo: on 1:wallops:*aviso*:/echo $nick mensaje de aviso a las: $time

 

Ver el evento on text para una explicación de los posibles formatos de texto.