![]() |
![]() |
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.