elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: [1]
1  Informática / Tutoriales - Documentación / Manual de scripting (segunda parte) en: 28 Junio 2003, 21:01 pm
Primero copiamos el codigo que ya habiamos hecho antes en los Aliases:
/ventana {
window -ae @dialogo 50 50 200 100 @dialogo
aline 12 @dialogo Hola, ¿Cómo te llamas?
}
Ahora nos vamos a la sección "Remotes" y copiamos el siguiente codigo:
menu @dialogo { Salir: window -c @dialogo }
on 1:INPUT:@dialogo:{
%vari01 = me llamo
%vari02 = como estás?
if ( %vari01 isin $1- ) { /aline 12 @dialogo Hola $3 !! }
elseif ( %vari02 isin $1- ) { /aline 4 @dialogo Estoy bien gracias, y tu? }
elseif ( estoy isin $1- ) { /aline 3 @dialogo Pues me alegro... }
elseif ( idiota isin $1- ) { /aline 10 @dialogo Idiota tu !!!! }
elseif ( adios isin $1- ) { /aline 5 @dialogo Nos vemos! | window -c @dialogo }
else { /aline 6 @dialogo Lo que tu digas... }
halt
}
Primero hemos creado la ventana @dialogo con el comando /ventana, a esta ventana le
hemos indicado que ha de tener una editbox (-e) y por lo tanto nosotros podremos
escribir en ella. Dependiendo de lo que escribamos, el script nos responderá de una
forma u otra gracias al evento ON INPUT que controla el texto que escribamos en la
ventana especificada. Creo que el código esta bastante claro asi que al lector solo
le queda copiarlo en el editor del mIRC, probarlo y modificarlo a su gusto.
Ejemplo 2: Ver un listado de archivos y mostrar informacion de los mismos
Primero copiamos el código que ya teniamos en los "Aliases":
/mp3 {
window -l20 @mp3 50 50 600 200 @mp3
%i = 0
: comienzo
inc %i 1
if (%i > $findfile(c:\mp3,*.mp3,0)) { goto fin }
else {
aline -l @mp3 $nopath($findfile(c:\mp3,*.mp3,%i))
goto comienzo
}
: fin
unset %i
}
Ahora vamos a los "Remotes" y copiamos:
MENU @mp3 {
dclick: {
aline 4 @mp3 $findfile(c:\mp3,*.mp3,$sline(@mp3,1).ln)
aline 4 @mp3 $lof($findfile(c:\mp3,*.mp3,$sline(@mp3,1).ln)) bytes
aline 4 @mp3 $duration($calc($lof($findfile(c:\mp3,*.mp3,$sline(@mp3,1).ln))
/ 16000))
}
Recargar mp3: window -c @mp3 | /mp3
-
Salir: window -c @mp3
}
Supongo que la principal pregunta al leer este codigo es: ¿Que es "dclick"?. Eso se
explicará más adelante, cuando veamos las ventanas de imagen (picture windows), de
momento ha de saber que el contenido de "dclick" se ejecuta cuando hacemos doble
click sobre una ventana de imagen o (como en este caso) sobre una listbox. Es decir
que cuando hagamos doble click sobre alguno de los objetos de la listbox (que seran
nombres de los mp3 que tengamos en el directorio c:\mp3) nos aparecerá en la ventana
principal la ruta completa del archivo en la primera línea, el tamaño de ese archivo
(usando el identificador $lof) en la segunda línea y la duración aproximada del mp3,
que se consigue dividiendo el tamaño del mismo por 16.000, en la tercera. Despues
hemos añadido dos opciones al menú popup de la ventana, la primera “Recargar Mp3”
consiste en cerrar la ventana, y volverla a abrir (usando el comando que habiamos
creado anteriormente de nombre /mp3).
Bien, vistos estos dos ejemplos, usted ya sabe lo suficiente como para hacer ventanas
personalizadas muy complejas y útiles, aunque si este es su primer contacto con las
ventanas personalizadas quizas sea una buena idea que antes de ponerse a hacerlas,
vea mas ejemplos de como se hacen en algún script.
Documento escrito por TeMpEsT · www.relativo.com · tempest@mixmail.com
VENTANAS DE IMAGEN
Introducción
Como se ya se describió en el capítulo "ventanas personalizadas" el parámetro –p del
comando window hace que creemos una ventana de imagen. ¿Qué es una ventana de imagen?
Pues básicamente es lo mismo que una ventana personalizada normal, con la diferencia
de que en ésta en vez de añadir/borrar/modificar líneas de texto, lo que haremos sera
dibujar puntos, lineas, figuras o incluso mostrar imágenes con formato .BMP. Así pues
las picture windows no son más que tipo especial de ventanas personalizadas, y este
capítulo lo dedicaremos integramente a estudiar su creación, manejo y posibilidades.
Pasando ya a la práctica, un ejemplo de cómo crear una ventana de imagen podria ser
el siguente:
/window –p @miventana 10 10 200 200 @miventana
Estaa línea de código hará que se cree una ventana de imagen en blanco de nombre
@miventana (recuerde que las ventanas personalizadas siempre llevan en su nombre el
prefijo ‘@’), en las cooridnadas x (10) y (10), de 200 pixels de largo por 200 de
alto, y que además use los menús popup que le especifiquemos bajo la clausula ‘menu
@miventana’ en la sección de “Remotes” del editor del mIRC. Hasta aquí no hacemos más
que repetir lo que se explicó en el capítulo anterior, la diferencia es que esta es
una ventana de imagen y nos permitirá aplicar tratamientos y procesos gráficos.
Una vez creada la ventana ahora lo importante, y lo que la diferencia del resto, son
los comandos u modificadores que podemos emplear en ella. Con los comandos que a
continuación se explicaran el lector sera capaz de dibujar figuras, puntos, y lineas;
poner texto en cualquier lugar, y mostrar imágenes .BMP tambien en cualquier posicion
dentro de la ventana.
Antes de empezar con este tema quiero que quede claro a qué me refiero cuando, más
adelante, em`pleando la palabra “rectángulo”. La especificación del rectángulo son 4
números que determinan la posición y tamaño de la ventana. Los dos primeros aluden a
la posición en que se encontrará su esquina superior izquierda. El primero (x) será
la distancia en pixels desde el borde izquierdo de la pantalla, el segundo (y) es la
distancia desde el borde superior. Los dos sigueinte números definen el tamaño de
nuestra ventana: ancho (w) y alto (h), siempre usando el pixel como unidad de medida,
por lo cual las dimensiones reales dependerán del tamaño y definición de su monitor.
Por ejemplo un rectángulo cuya esquina esté en las coordenadas x = 30, y = 5, y mida
100 pixels de largo por 120 de alto lo expresaremos como: 30 5 100 120.
Espero que haya quedado eso claro porque es fundamental para el entendimiento de la
siguiente sección...
Comandos para modificar imagenes
Estos comandos, igual que pasaba con los de las ventanas personalizadas “normales” se
han de usar despues de haber creado la ventana, y pueden ser insertados en cualquier
Alias, Popup o Remote que declaremos.
/drawdot [–hnri] @nombre <color> <tamaño> <x y> [x y ...]
Dibuja un punto del color indicado (del 0-15) con un diametro (tamaño en pixels) y en
las coordinadas x y dentro ventana de imagen.
No confundir estas coordenadas x e y con las coordenadas equivalentes que usamos al
crear la ventana, en este caso aluden a la posición en que se dibujará el punto
dentro de la misma. Corresponden a una escala en pixels que también parte de la
esquina superior izquierda de la ventana creada, pero cuyos ejes son ahora el borde
superior e izquierdo de la misma (no de la pantalla).
Es decir, que si dibujamos un punto en las coordinadas x(0) y(0) tendremos un punto
cuyo centro estara en la misma esquina superior izquierda de la ventana de imagen.
Se pueden especificar multiples coordenadas ‘x,y’ en la misma orden, esto es, si
queremos dibujar varios puntos con el mismo comando.
Los parametros opcionales [-hnri] sirven para lo siguiente:
-h Hará que el icono de la ventana parpadee en el momento
de dibujarse el punto si se encuentra minimizada.
-n Hace que la ventana no se actualice inmediatamente. Esto
podria ser util si antes de dibujar el punto queremos
cambiar el color del fondo o algo similar, aunque
realmente eso se conseguiria mas facilmente poniendo el
comando que cambiara el color de fondo antes que el que
dibujara el punto asi que este parametro rara vez lo
usaremos...
-r Indica que el <color> esta especificado en formato RGB
(Rojo,Verde,Azul). en caso de que usemos este parametro
tendremos que utilizar el identificador:
$rgb(rojo,verde,azul)
por ejemplo: $rgb(0,200,100)
-i Dibujara el punto en modo inverso (color blanco y fondo
negro).
Ejemplo:
/drawdot –r @miventana $rgb(255,23,45) 5 10 10 12 10
Este ejemplo dibujara 2 puntos en la ventana @miventana del color definido por el
valor $rgb(255,23,45) , con un diametro de 5 pixels.
/drawline [-hnri] @nombre <color> <tamaño> <x y> <x y> [x y...]
Dibuja una línea del color <color>, que tenga un grosor de <tamaño> pixels y que vaya
desde las primeras coordinadas <x y> que especifiquemos hasta las segundas <x y>. Se
pueden especificar opcionalmente más parametros <x y> para hacer una línea que pase
por los puntos definidos. Los parámetros [-hnri] hacen exactamente lo mismo que en el
comando drawdot, y de hecho comprobaremos que a casi todos los comandos de
modificacion de ventanas de imagen se les pueden aplicar estos parámetros
Ejemplo:
/drawline @miventana 4 10 20 0 20 100
Este ejemplo dibujará una linea en @miventana de color rojo (4) y grosor 10 pixels,
que irá desde las coordenadas x(20) y(0) hasta x(20) y(100) . Es decir será una linea
vertical.
/drawrect [-hnrifec] @nombre <color> <grosor> <x y w h> [x y w h..]
Dibuja un rectángulo del color <color> cuyo borde tenga un grosor de <grosor> pixels,
cuya esquina superior izquierda se encuentre en las coordinadas <x y> especificadas,
y que mida <w> pixels de largo por <h> de alto. Lógicamente si incluimos un segundo
juego de parámetros [x y w h] creará un segundo rectangulo con esas características.
Los parámetros [-hrni] una vez más son los mismos que los explicados en el comando
drawdot, los otros sirven para lo siguiente:
-f Una vez dibujado el rectángulo lo rellena con el color
que hayamos especificado para el borde, si no
especificamos este parámetro el rectangulo por dentro
será del color del fondo.
-e Dibuja una elipse en lugar en un rectángulo... ¿que como
dibuja una elipse si lo que le estamos dando son las
coordenadas de un rectangulo? Pues simplemente dibuja la
elipse que cabría perfectamente dentro de ese rectángulo
que especificamos con <x y w h>.
-c Hace que el borde del rectangulo sea del color que le
hemos especificado, pero transparente.
Ejemplo:
/drawrect –fr @miventana $rgb(1,2,3) 10 30 30 200 200
Este ejemplo dibujará un rectángulo de color $rgb(1,2,3) , ya que le hemos
especificado el parámetro –r , que estará además relleno con ese color, y su esquina
superior izquierda estará en la posición x(30) y(30) y medirá 200 pixels de largo por
200 de alto.
/drawfill [–hnris] @nombre <color1> <color2> <x y> [archivo.bmp]
Rellenará el área en el que esté el punto <x y> con el color <color1>. Podemos
especificar que en vez de rellenar el área con un color se haga con una imagen BMP
que tengamos. La imagen ha de ser del tamaño 8x8 pixels, si tiene cualquier otro
tamaño no funcionará. Los parámetros [-hnri] cumplen la misma función que en los
comandos anteriores.
La funcion del parámetro <color2> depende de si especificamos o no el parámetro [-s].
Si ponemos -s el valor de <color2> indicará el color que deberá ser sustituido por
<color1>. Si no incluimos -s el valor que le demos a <color2> será el color ante el
cual el relleno deberá parar.
Este comando resulta un poco complicado de explicar, asi que lo mejor será que se
fije en el siguiente ejemplo:
Ejemplo:
/drawfill @miventana 1 4 30 30 c:\imagen.bmp
Este ejemplo lo que hará es que usando la imagen imagen.bmp (cuyo tamaño es de 8x8
pixels) y desde la posicion x(30) y(30) pegara multiples copias de esa imagen para
rellenar esa zona, parando ante cualquier línea de color rojo, si hubiera alguna.
/drawtext [-hnrpboc] @nombre <color1> [color2] [Tipo_letra] [Tamaño_letra] <x y [w
h]> <texto>
Inserta un texto del color <color> en la ventana que especifiquemos y en las
coordinadas <x y>. Podemos añadir opcionalmente la longitud y altura del texto
(parametros [w h]), esto hará que si el texto que escribimos es demasiado largo y no
cabe en el rectángulo que hemos indicado con [w h] aparezca solo el trozo que quepa.
El parámetro [color2] es opcional y sirve para especificar el color del fondo del
texto que escribamos. Los parámetros [Tipo letra] y [Tamaño letra] también son
opcionales e indican el nombre del tipo de letra a usar (escribirlo todo junto, sin
espacios) y su tamaño en puntos. [-hnr] tienen la misma funcion que en anteriores
comandos. En cuanto a los otros parámetros:
-p Nos permite el uso de controles de color (ctrl + k) ,
negrita (ctrl + b) y subrayado (ctrl + u) dentro del
texto.
-b Indica que se va a especificar el parámetro [color2]
como color de fondo para el texto. Si no usamos este
parámetro, [color2] deberá ser omitido.
-o Indica que el tipo de letra elegido debe ser en negrita.
-c Indica que los parámetros opcionales [w h] van a ser
especificados.
Ejemplo:
/drawtext –b @miventana 4 9 MSSansSerif 14 30 40 Probando el comando drawtext
Este ejemplo pondrá en pantalla la cadena de caracteres “Probando el comando
drawtext” de color rojo (4) y sobre un fondo verde claro (9), con el tipo de letra Ms
Sans Serif (recuerde que en el comando se ha de escrbir el nombre del tipo de letra
todo junto, sin espacios), de un tamaño 14 puntos.
/drawcopy [-ihnt] @nombre [color] <x y w h> @destino <x y [w h]>
Copia parte de una ventana de imagen a otra parte de la ventana o a otra ventana. Si
especificamos los parámetros [w h] la sección de la imagen que hayamos copiado será
ensanchada/estrechada a ese tamaño (el especificado por [w h]) en la ventana de
destino. Fíjeses que si lo que quiere es copiar un trozo de una imagen desde una
sección de una ventana a otra sección de la misma ventana, @nombre y @destino serán
la misma ventana. Los parámatros [-ihn] son los mismos que explicamos en /drawdot . y
en cuanto a –t indica que hemos especificado el valor [color] como un valor $rgb
equivalente al color que queremos que sea transparente en la imagen que hayamos
copiado.
Ejemplo:
/drawcopy @miventana 0 0 100 100 @miventana2 10 10
Este ejemplo copiara el contenido de la ventana @miventana contenido desde x(0) y(0)
hasta x(100) y(100) a @miventana2 en la posicion x(10) y(10)
/drawsave @nombre <archivo.bmp>
Guarda la imagen de fondo actual de la ventana @nombre como un archivo de nombre
<archivo.bmp>
Ejemplo:
/drawsave @miventana ventanita.bmp
Este ejemplo guaradará la imagen de fondo que tengamos en la ventana @miventana en un
fichero con el nombre ventanita.bmp.
/drawscroll [-hn] @nombre <x> <y> <x y w h>
Desplaza la región de la ventana comprendida en el rectángulo <x y w h> (recuerde: x
– posición x de la esquina superior izquierda, y – posición y de la esquina superior
izquierza, w – longitud del rectángulo, h – altitud del rectangulo, todo en pixels)
<x> pixels en el eje X y <y> pixels en el eje Y. Los valores de <x> e <y> pueden ser
un número negativo si queremos indicar que la región se desplaze hacia la izquierda o
hacia abajo respectivamente. [-hn] son los mismos que en el comando drawdot
Ejemplo:
/drawscroll @miventana 10 20 50 50 200 200
Este ejemplo desplazará la región de la ventana @miventana contenida en el rectángulo
“50 50 200 200” 10 pixels hacia la derecha y 20 hacia arriba
/drawpic [–ihntsc] @nombre [color] <x y [w h]> [x y w h] <archivo.bmp>
Y llegamos sin duda al comando más útil de todos los de las ventanas de imagen, con
este comando podremos cargar una imagen cualquiera <archivo.bmp> (con formato .bmp)
en una ventana, en las coordinadas que indiquemos <x y> . Si indicamos la longitud y
altitud [w h] la imagen sera ensanchada/estrechada a ese tamaño. El parámetro
opcional [x y w h] lo usaremos para indicar qué parte del archivo <archivo.bmp>
queremos mostrar, útil por si tenemos un bmp grande con varias imágenes y queremos
mostrar solo una de ellas. [-ihn] corresponden a los parámetros explicados en
drawdot. Otros parámetros que acepta este cmando son:
-t Indica que hemos especificado el valor [color] con el
fomato $rgb(N,N,N) donde N es un numero comprendido
entre 0 y 255, y ese color será tratado como
transparente en el archivo que queramos mostrar.
-s Indica que hemos especificado los parámetros [w h] para
ensachar/estrechar la imagen.
-c Indica que la imagen debe ser puesta en la memoria
caché, esto hace que si en la misma sesión quisieramos
volver a hacer uso de esa imagen, el tiempo de carga
sería muy inferior. La caché puede almacenar hasta un
máximo de 30 imágenes, a partir de ese número empezaran
a reemplazarse las que lleven más tiempo sin usarse por
las más nuevas.
Ejemplo:
/drawpic –t @miventana $rgb(0,0,0) 0 0 c:\ventanita.bmp
Este ejemplo mostrará la imagen c:\ventanita.bmp en la ventana @miventana en las
coordinadas x(0) y(0) y las regiones de la imagen de color $rgb(0,0,0) (negro en este
caso) se mostrarán como transparentes (se verá el fondo de la ventana a través de
esas regiones).
Con esto acabamos con los comandos para la modificación de ventanas de imagen. Como
habrá podido comprobar el dominio de las coordenadas x e y es imprescindible, y
también la unidad de medida de tamaño de cualquier gráfico por ordenador, el pixel,
para especificar los tamaños de las figuras y/o imágenes. Esto sólo se consigue
mediante práctica, y los que anteriormente hayan usado un programa de diseño gráfico
como Corel Draw o Photoshop ya tendrán algo de camino andado en este tema.
Seguidamente veremos los identificadores que nos devolverán información específica de
una ventana de imagen.
Identificadores
$mouse.<propiedad>
$mouse.win : Devuelve el nombre de la ventana sobre la que se encuentra el raton.
$mouse.x : Devuelve la posicion x , relativa a la ventana de imagen, del raton.
$mouse.y : Devuelve la posicion y , relativa a la ventana de imagen, del raton.
$mouse.mx : Devuelve la posicion x relativa a la ventana principal del mIRC.
$mouse.my : Devuelve la posicion y relativa a la ventana principal del mIRC.
$mouse.dx : Devuelve la posicion x relativa al escritorio.
$mouse.dy : Devuelve la posicion y relativa al escritorio.
$rgb(nº,nº,nº)
Este identificador ya lo hemos usado en la explicación de los comandos, y sirve para
especificar un color, pero con más detalle. Es decir que en vez de usar el color con
un número del 0 al 15, los indicaremos suministrando los valores de rojo, verde y
azul del color(RGB). Si no controlas el RGB no te preocupes siempre puedes poner el
color el el formato habitual (numero del 0 al 15).
$getdot(@nombre,x,y)
Devuelve el valor RGB del color del punto definido por los parámetros ‘x’ e ‘y’.
$inrect(x,y,x2,y2,w,h)
Devuelve $true si el punto definido por x,y esta dentro del rectángulo definido por
x2,y2,w,h . En caso contrario devuelve el valor $false.
$height(texto,tipo_letra,tamaño)
Devuelve la altura en pixels del texto especificado y con un tipo de letra y tamaño.
Recuerda que el tipo de letra lo haa de escribir todo junto, por ejemplo:
TimesNewRoman.
$pic(archivo.bmp)
Este identificador se puede usar de 3 formas:
$pic(archivo.bmp).size : Devuelve el tamaño del .BMP especificado.
$pic(archivo.bmp).height : Devuelve el tamaño del .BMP especificado.
$pic(archivo.bmp).width : Devuelve el tamaño del .BMP especificado.
$width(texto,tipo_letra,tamaño,B,C)
Devuelve la longitud en pixels del texto especificado y con un tipo de letra y
tamaño. Si el parámetro ‘B’ es diferente de ‘0’ se tomará el tipo de letra en
negrita. Si el parámetro ‘C’ es diferente de ‘0’ se ignorarán el espacio ocupado por
los controles de color, negrita y subrayado.
Eventos y remotes
Con las ventanas de imagen podemos usar los mismo eventos y manejo de remotes que
empleabamos en el resto de ventanas personalizadas, como por ejemplo el evento ON
INPUT (si la ventana contaba con una editbox) o los eventos ON OPEN y ON CLOSE que se
ejecutaban cuando abriamos o cerrábamos la ventana en cuestión.
En lo que se refiere a ventanas de imagen, no existe ningún evento remoto para ellas
en especial, seguiremos usando por tanto los ya vistos en el capítulo anterior, pero
eso sí, a la hora de definir menús Popup dentro de la sección Remotes para una
ventana de imagen, sí que podrá incluir nuevas funciones que ayudarán a sus ventanas
a ser un poco más útiles y sofisticadas.
Por ejemplo, usted podrá hacer que al pulsar en cierta región de una imagen pase una
cosa, y al pulsar en otra región pase otra cosa. Vayamos por partes, como he dicho
antes la nueva funcionalidad de las ventanas de imagen se implementará donde en las
ventanas personalizadas normales implementábamos el menu Popup. Por ejemplo si
creamos la siguiente ventana:
/window –p @otraventana 100 100 100 100 @otraventana
Y queremos definir su menu popup, escribiremos en la sección Remotes:
menu @otraventana {
}
Y aquí empiezan los cambios. Por supuesto, es perfectamente posible especificar el
menú popup que queremos para esa ventana dentro de los corchetes pero eso deberá ser
puesto “al final”. Y me explico: antes de escribir el menú popup podremos incluir una
serie de "gatillos" que saltarán cuando ocurra cierto evento. A continueación se
detallan cuales son estos “gatillos” que usted podrá especificar dentro de la
clausula “menu @otraventana”:
mouse: Saltará cuando el ratón se mueva por encima de la ventana.
sclick: Saltará cuando el usuario haga click con el botón izquierdo sobre la ventana.
dclick: Saltará cuando el usuario haga click con el botón derecho sobre la ventana.
uclick: Saltará cuando el usuario suelte el botón izquierdo del ratón.
lbclick: Saltará cuando se haga un click sobre un objeto de una listbox.
leave: Saltará cuando el ratón salga de a ventana (se mueva fuera de la ventana).
Cuando usemos este gatillo, podemos usar el identificador $leftwin que nos devolverá
el nombre de la ventana de la que salió el ratón.
drop: Saltará cuando el usuario haga click con botón izquierdo sobre la ventana,
mantenga el botón pulsado, mueva el ratón y después lo suelte otro lugar.
Antes de liarle más, le presentaré un ejemplo de cómo podría usar estos gatillos para
que le quede un poco mas claro:
menu @otraventana {
mouse: /echo –s El ratón se ha movido hasta $mouse.x $mouse.y
sclick: /echo –s Ha hecho click en las coordenadas $mouse.x , $mouse.y
dclick: /echo –s Ha hecho doble click sobre las coordenadas $mouse.x , $mouse.y
uclick: /echo –s Ha soltado el boton en las coordenadas $mouse.x , $mouse.y
leave:{
echo –s Ha salido de la ventana $leftwin
window –c $leftwin
}
Popup 1
.sub-popup1: /comando1
.sub-popup2: /comando2
Popup2: /comando3
-
Popup3: /comando4
}
Ahora fíjese bien en el código que acaba de leer. Hay unas cosas importantes que
deberían de quedar claras con ese ejemplo:
· Como ha visto los gatillos de una ventana de imagen se especifican dentro de la
clausula “menu @otraventana” y siempre ANTES que el menu popup.
· El menu popup de la ventana se especifica, normalmente, de la misma forma que
en las ventanas personalizadas normales (después de los "gatillos").
· Se puede hacer uso de los identificadores $mouse.x y $mouse.y para hallar las
coordenadas en las que se encuentra situado el ratón (siempre relativas a la
ventana de imagem).
· Se pueden incluir varios comandos para un mismo gatillo usando llaves { } como
hemos hecho en el ejemplo del gatillo “leave”.
Aunque le parezca increíble, con lo que se ha explicado hasta ahora ya se puede hacer
cualquier cosa que haya visto en cualquier script que tenga que ver con ventanas de
imagen. El uso de estas ventanas no es sencillo, y se hace verdaderamente muy pesado,
así que sería conveniente que el lector se asegurará de si en realidad va a valer la
pena el hacer una ventana de imagen para algo que quizás un simple menu popup podría
solucionar. De cualquier forma a continuación se va a exponer y explicar un ejemplo
que aunque tenga una escasa utilidad servirá para que pueda ver todos estos comandos
e identificadores en acción. En este ejemplo se da por hecho que los conocimientos
del lector sobre Aliases, Remotes y popups son suficientes.
Ejemplo 1: Crear una imagen interactiva
Para ello necesitaremos, primeramente, una imagen, usaremos la siguiente:
Esta en concreto tiene unas dimensiones de 100x73 pixels, este valor nos será util
más adelante, se supondrá que la imagen se encuentra en c:\pregunta.bmp.
Ahora, como ya habrá adivinado, lo que haremos será transformar esa imagen en una
ventana de imagen, y hacer que si el usuario pulsa el ratón sobre “SI”, se cierre el
mIRC y, si por el contrario, pulsa sobre “NO”, se cierre la ventana de imagen y que
no ocurra nada más. Por lo tanto lo primero será crear un ALIAS que abra la ventana
de imagen y cargue en ella pregunta.bmp. Copiaremos lo siguente en la sección
“Aliases” del editor del mIRC:
/pregunta {
set %longitud $pic(c:\pregunta.bmp).width
set %altitud $pic(c:\pregunta.bmp).height
/window –p +b @pregunta 200 200 %longitud %altitud @pregunta
drawpic –c @pregunta 0 0 c:\pregunta.bmp
}
Hasta aquí lo que hemos hecho es sencillo, declaramos el alias “/pregunta”. Y lo que
hará ese alias es guardar la longitud en pixels del la imagen en la variable
%longitud , después guardará la altitud en pixels de la imagen en la variable
%altitud. Seguidamente se declara la ventana de imagen @pregunta, usando el parámetro
+b para que no tenga barra de título ni botones de minimizar, maximizar y cerrar.
Hemos usado las variables %altitud y %longitud para que la ventana sea exactamente
del mismo tamaño que la imagen, de esa forma esta ocupará toda la ventana y quedará
bien (sin ningun espacio en blanco).
Despues mediante el comando drawpic hemos cargado la imagen en la ventana que hemos
creado y hemos metido esa imagen en la cache (mediante el [-c] ) para que si la
volvieramos a utilizar en la misma sesion se cargara más rapidamente.
Ahora iremos a los remotes para definir el “menu @pregunta” y el gatillo que hará que
cuando hagamos un click sobre “SI”, se cierre el mIRC, y que cuando hagamos un click
sobre “NO”, se cierre la ventana. Copie lo siguiente en los “Remotes”:
menu @pregunta {
sclick:{
if ( $mouse.x > 49 && $mouse.x < 73 && $mouse.y > 46 && $mouse.y < 78 ) exit
elseif ( $mouse.x > 118 && $mouse.x < 163 && $mouse.y > 44 && $mouse.y < 68
) {
window –c @pregunta
}
else { /echo –s Haz click sobre “SI” o sobre “NO” ! }
}
Información de la imagen
.¿Cuánto ocupa?: /echo –s La imagen ocupa $pic(c:\pregunta.bmp).size bytes
-
Cerrar ventana: /window –c @pregunta
}
Esta es la sección más interesante del código, y aquí se ha mostrado como se hará
siempre que queramos hacer que ocurran cosas diferentes según en qué la región
pulsemos de una imagen. Para ello se ha recurrido al gatillo “sclick” que como se
explicó antes salta cuando el usuario hace un simple click sobre la ventana. Lo que
pasará en este caso es que el script comprobará donde ha hecho el click, y
dependiendo de donde sea, ejecutará unos comandos u otros. Pero al mIRC no le podemos
decir “si el usuario clickea sobre el SI haz esto y lo otro”, al mIRC le tendremos
que decir “si el usuario hace click en el rectangulo x y w h , entonces ejecuta estos
comandos”.
Y eso hemos hecho, primero hemos abierto la imagen en un programa de diseño, el Paint
de Windows basta, y moviendo el ratón sobre la imagen nos aparece en la esquina
inferior derecha del programa las coordenadas por las que estamos moviendo el raton,
así pues apuntamos las coordenadas que definen el rectangulo que contiene a la
palabra ‘SI’. En este caso el rectangulo tendria su esquina superior izquierda en
x(49) y(46) y su esquina inferior derecha en x(73) y(78) . Entonces le hemos dicho al
mIRC: “si cuando el usuario hace click el raton esta entre las coornidadas x(49) y
x(73) y además esta entre las coordinadas y(46) e y(78)” eso necesriamente significa
que el usuario ha hecho click sobre la palabra ‘SI’ y por lo tanto ejecutaremos el
comando exit , que cierra el mIRC, no hace falta que le digamos antes que cierre la
ventana de imagen puesto que al cerrarse el mIRC se cierran automaticamente todas las
ventanas que haya creadas. Análogamente se ha seguido el mismo procedimiento para
detectar si el usuario hace click sobre ‘NO’, y en tal caso hacemos que se cierre la
ventana de imagen y que no pase nada más. Por último le hemos dicho que si el click
no se produce ni sobre la palabra ‘SI’ ni sobre la palabra ‘NO’ que nos salga un
mensaje en la ventana de status indicándonos donde tenemos que pulsar.
Visto eso, el resto es sencillamente el menú que aparecerá al pulsar boton derecho
sobre la ventana, que se especifica, como ya sabe, despues de el/los gatillos que
hayamos empleado.
Hasta aquí este tutorial de ventanas personalizadas. Soy consciente de que al
principio parecen muy complicadas, pero en realidad no lo son tanto, lo que sí son es
muy pesadas de crear , por eso se recomienda que se usen sólo cuando sea
estrictamente necesario, ya que la mayor parte de las veces se podría llevar a cabo
la misma tarea, y de una forma más cómoda mediante popups. De cualquier forma, se han
comentado con detalles todas las posibilidades de las ventanas personalizadas y de
imagen para que también el lector ya experto les pueda sacar el máximo provecho.
Documento escrito por TeMpEsT · www.relativo.com · tempest@mixmail.com
DIALOGS
Introducción
Las ventanas de diálogo o “dialogs” son un nuevo recurso que nos ofrecen las versines
de mIRC 5.5 y superior para crear auténticas ventanas tipo windows (con botones de
radio, campos de texto, etc) de una forma relativamente sencilla, al menos es
muchísimo más fácil que hacerlo mediante ventanas de imagen, más adelante veremos por
qué. En realidad este tipo de ventanas ya existían antes de la versión 5.5, me
refiero a los identificadores $?,$sdir,$dir,... etc. que no eran más que ventanas de
diálogo ya configuradas para hacer una tarea concreta. La gran ventaja de los nuevos
“dialogs” es que ahorá usted no está limitado al uso de esas ventanas
preconfiguradas, sino que podrá crear las suyas propias para todo tipo de funciones.
Sin más, y puesto que se supone que usted ya es medianamente experto en el uso de
Alias y Remotes, pasemos a ver los comandos que nos permitirán la creación de
ventanas de diálogo:
Comando Dialog
Creará una ventana de diálogo totalmente independiente de la tarea que el mIRC esté
realizando en ese momento, es decir que mientras la ventana de diálogo permanece
abierta usted podrá acceder a las otras ventanas del mIRC (cosa que no pasaba con los
diálogos $?, $dir,... etc). Para mostrar en pantalla un diálogo, usaremos la
sintaxis:
/dialog [–mda] <nombre_dialogo> <nombre_tabla>
Donde <nombre_dialogo> es aquel con el que usted se referirá al mismo, y
<nombre_tabla> es el nombre de una tabla de diálogo que usted tendrá que declarar más
adelante y en la que diseñará su aspecto, dimensiones y contenido (posición de los
botones, botones de radio,... etc).
NOTA: Se puede, y de hecho es recomendable, usar el mismo nombre para el nombre del
diálogo y para la tabla, para evitar posteriores confusiones.
A continuación tiene una explicación de la función de los tres parámetros
disponibles, tenga en cuenta que el parámetro -m es obligatorio y sin él no se creará
nuestra ventana de dialogo:
-m: Es el parámetro que usará normalmente, sirve para crear una ventana de diálogo
sin ningún atributo, es decir que todos los atributos (título, tamaño...) serán
especificados en la tabla del diálogo.
Ejemplo: /dialog –m midialogo mitabla
-ma: Crea una ventana de diálogo sin atributos (como la anterior) pero además usa la
ventana activa como “madre”, es decir que al cerrar la “ventana madre” se cerrará
también la que hemos creado.
Ejemplo: /dialog –ma midialogo mitabla
-md: Crea un diálogo sin atributos (puesto que lleva el parámetro -m) y lo abre como
ventana de escritorio (será mostrada en la barra de tareas inferior de Windows).
Ejemplo: /dialog –md midialogo mitabla
Una vez creado, podemos volver a usar el comando /dialog, pero esta vez para cambiar
alguna de sus propiedades, y con la sintaxis:
/dialog [-tsonkc] <nombre_dialogo> [atributos]
Y dependiendo del parámetro que especifique en [-tsonkc], usaremos unos atributos u
otros (o a veces ninguno):
-x: Cierra una ventana de diálogo.
Ejemplo: /dialog –x midialogo
-t: Cambia el título deuna ventana de diálogo.
Ejemplo: /dialog –t midialogo Este es el nuevo título
-s: Cambia el tamaño y la posición del diálogo en base a las coordenadas y
dimensiones que se especifiquen:
Ejemplo: /dialog –s midialogo 10 20 300 400
NOTA: Recuerde la definición de “rectángulo” en el tutorial de ventanas de imagen, el
ejemplo de arriba pondrá la esquina superior izquierda del diálogo en las coordenadas
x(10) y(20) y le dará un tamaño de 300 pixels de largo por 400 de alto.
-o: Pone el diálogo encima de todas las ventanas que tenga abiertas (on top), y sigue
estando encima aunque pulse fuera de ella.
Ejemplo: /dialog –o midialogo
-n: Quita el atributo “on top” de un dialogo, es decir que ya no estará
permanentemente encima de todas las ventanas.
Ejemplo: /dialog –n midialogo
-k: Provoca el efecto de pulsar el botón “ok” de un diálogo. Por defecto, el efecto
de este botón es simplemente el de cerrar el dialogo, pero más adelante veremos que
le podrá asignarle más funciones.
Ejemplo: /dialog –k midialogo
-c: Provoca el efecto de pulsar en un boton “cancel” de un diálogo, que por defecto
es exactamente el mismo que el de un boton “ok”, pero al igual que en el anterior, se
podrá modificar.
Ejemplo: /dialog –c midialogo
Vista la creación de ventanas de diálogo, ahora el tema será como crear las ya
nombradas “Tablas de diálogo”
Tablas
Como hemos visto anteriormente en la creación de diálogos, es necesario especificar
el nombre de una tabla en la que definiremos el título,tamaño y objetos que habrá en
el mismo. En está sección usted aprenderá a crear tablas de diálogo revisando todas
las posibilidades que nos ofrece el mIRC. La declaración de tablas de dialogo se hace
en la sección Remotes, y de la siguiente forma:
DIALOG <nombre_tabla> {
.........
}
Todo lo que hemos hecho es decirle al script que existe una tabla de diálogo de
nombre "nombre_tabla", pero para que esta sea válida tendremos que incluir en ella la
declaración de 3 cosas imprescindibles: El título del diálogo (que aparecera en la
barra de título del mismo), el tamaño y posición del dialogo (en el formato x y w h
), y al menos un boton de tipo “ok” o “cancel” para cerrar el diálogo. Para ello
escribiremos lo siguiente:
dialog mitabla {
title “Aquí el título”
size <x y w h>
button “Texto_del_boton”,<ID>,<x y w h>,<estilo>
}
Donde dice x y w h recuerde que ha de poner las coordenadas que definen el rectángulo
al que se refiere: posición de la esquina superior izquierda del dialogo (x,y),
longitud (w) y altitud (h) en pixels. Donde dice “ID” se refiere a un número que
asignaremos a cada objeto que añadamos a la tabla, ese número nos servirá más
adelante para referirnos a ese objeto, por lo tanto no se puede repetir la misma ID
en dos objetos dentro de una misma tabla. Y por último el estilo, al tratarse de un
botón, en este caso será uno de los siguientes:
· ok: Crea un boton que cierre el dialogo al pulsarlo.
· cancel: Crea un boton que tambien cierra el dialogo al pulsarlo.
· default: Crea un boton que no cierra el dialogo, le podremos asignar otra
funcion más adelante.
Antes de entrar en el resto de objetos que podrá usar, veamos este pequeño ejemplo
para que vaya entendiendo el funcionamiento de las tablas, copie lo siguiente en
“Aliases”:
/Dialogo { dialog –m midialogo mitabla }
Copie esto otro en “Remotes”:
dialog mitabla {
title "Hola Mundo!!"
size 20 20 120 100
button "¡¡Adiós!!",1,20 20 80 50,ok
}
Si ahora escribe el alias que acaba de crear: "/dialogo", verá como le aparece una
ventana con el título que ha especificado y con un bóton de tipo “ok” (cierra el
dialogo al pulsarlo) , las coordenadas y tamaño de la misma serán: “20 20 100 100”.
A continuación veremos ya la relación de objetos que podemos declarar en una ventana
de dialogo:
title “Título”
Como hemos visto en el ejemplo anterior, el texto que pongamos entre “ “ será el
texto que salga en la barra de título del dialogo.
size x y w h
Indica la posición y tamaño del diálogo. Si indicamos el valor ‘-1’ para x e y, el
diálogo aparecerá centrado en la pantalla.
text “Texto”,ID,x y w h,estilo
Pone el texto que indiquemos en las coordenadas x y w h. Recuerde que a cada objeto
que ponga en el diálgo le ha de asignar un número ID, el que usted quiera para
despues referirse a ese objeto más adelante. El estilo es opcional, si no se
especifica ninguno el texto estará alineado a la izquierda del rectángulo “x y w h”,
los estilos que puede utilizar son:
· right: para alinear el texto a la derecha.
· center: para centrarlo en el rectangulo “x y w h”.
edit “Texto inicial”,ID,x y w h,estilo
Inserta una caja de texto en el lugar indicado, con una posicion y tamaño dados en “x
y w h”, y con uno de los estilos siguientes:
<en_blanco> : si no especifica ningun estilo: campo de texto normal con el texto
inicial alineado a la izquierda.
· right: alinea el texto inicial a la derecha.
· center: centra el texto inicial.
· multi: crea un campo de texto con multiples líneas, para ello ademas de
especificar este estilo tendrá que hacer el campo más alto (aumentar el valor
‘h’).
· pass: útil para introducir passwords, trasforma cada carácter que escribamos en
el campo en un asterisco (*).
· read: para que el campo sea solo para mostrar información al usuario, es decir
que el texto que pongamos en ese campo no podrá ser modificado por el usario.
· hsbar: pone una barra de desplazamiento horizontal en la parte inferior.
· vsbar: pone una barra de desplazamiento vertical a la derecha.
· autohs: hace que el campo se desplaze automaticamente en horizontal cuando
introduzcamos un texto que ocupe más que el tamaño de la caja de texto.
· autovs: hace que el campo se desplaze automaticamente en vertical cuando
introduzcamos un texto que ocupe más que el tamaño de la caja.
button “Texto del boton”,ID,x y w h,tipo
Crea un botón en cuyo interior ponga el texto que especifiquemos, y lo posiciona en
las coordinadas x,y con un tamaño de ‘w’ pixels de largo por ‘h’ de alto. Los tipos
posibles son:
· ok: Al pulsar el botón se cerrará el diálogo.
· cancel: Al pulsar el botón se cerrará el dialogo.
· default: Al pusar el botón no se cierra el diálogo, especificaremos la funcion
de este tipo de botones más adelante.
check “Texto”,ID,x y w h,estilo
Crea un botón “checkbox” o botones de selección de opciones (sirven principalmente
para activar/desactivar algo) en las coordenadas y con el texto especificado. Los
estilos posibles son:
· right: el texto se coloca a la derecha del checkbox.
· left: el texto se coloca a la izquierda del checkbox.
· 3state: pone un checkbox de 3 estados (pulsado, no pulsado, e intermedio).
· push: pone un tipo especial de checkbox que en vez de con casillas pulsables,
se hace mediante botones que permanecen pulsados.
radio “Texto”,ID,x y w h,estilo
Crea un botón de radio (sirven para elegir entre una entre varias opciones) en las
coordinadas “x y w h” y con el texto “Texto”. Los estilos posibles son:
· right: el texto se coloca a la derecha del boton de radio.
· left: el texto se coloca a la izquierda del boton de radio.
· push: pone un tipo especial de boton de radio hecho a base de botones estandar.
box “Titulo”,ID,x y w h
Crea un rectángulo con el titulo, posicion y tamaño especificados, se sule usar para
enmarcar grupos de objetos, por ejemplo grupos de botones de radio.
list ID,x y w h,estilo
Crea una lista de objetos en las coordinadas especificadas (siempre relativas a la
ventana de diálogo) en la que se podrán elegir uno o mas objetos a la vez de la lista
dependiendo del estilo. El cómo añadir mas objetos a la lista lo veremos más
adelante. Los estilos posibles son:
<en_blanco>: si no especificamos estilo, se crea una lista en la que solo podemos
seleccionar un objeto a la vez y el orden de estos será el mismo en que los añadamos
mas adelante.
· sort: Ordena los objetos de la lista por orden alfabético.
· extsel: Permite seleccionar varios obajetos de la lista a la vez.
combo ID,x y w h,estilo
Crea una lista de objetos en la que solo se podrá elegir uno de ellos, en las
coordenadas especificadas. Los estilos posibles son:
· sort: ordena los objetos de la lista por orden alfabético.
· edit: pone una editbox arriba de la lista. Al pulsar en un objeto de la lista
éste aparece en la editbox y puede ser editado.
· drop: pone un recuadro en el que al pulsar aparecerá la lista de objetos.
icon ID,x y w h,[archivo]
Inserta una imagen en formato .bmp en las coordenadas que indiquemos. Si los valores
‘w’ y ‘h’ no coinciden con el tamaño de la imagen, ésta será estrechada o ensanchada
al tamaño que hayamos especificado, el parámetro archivo no hace falta especficarlo
ahora, lo podrá hacer más adelante.
Hasta aquí todos los objetos que puede poner en un diálogo. Adicionalmente a los
estilos que se han comentado, cualquier objeto puede además contar con los
siguientes:
· disable: Inabilita en objeto.
· hide: Esconde el objeto.
· group: Indica el comienzo de un grupo, útil para marcar el comienzo de un grupo
de botones de radio, para ello en el primer botón del grupo indicaremos el
estilo “group”.
· result: Indica que el contenido de este objeto será el resultado que devuelva
el dialogo al pulsar el boton “ok”. Solo se usa cuando el diálogo lo abrimos
mediante el identificador $dialog (explicado má adelante).
Una cosa importante que debe saber es que se pueden especificar VARIOS estilos a la
vez con solo ponerlos separados con comas, por ejemplo:
edit “Texto”,4,10 10 100 20,autohs,right
NOTA: En la declaración de objetos puede usar variables, es decir podrá, por ejemplo,
mostrar en un campo de texto el valor de una variable.
Ya hemos visto todos los tipos de objetos que podrá usar a la hora de crear una tabla
de diálogo, por supuesto no usará todos estos tipos en el mismo diálogo, aunque
podría hacerlo si quisiera... antes de seguir vamos a hacer un ejemplo de una ventana
algo más complicada ya que con lo que sabemos hasta ahora es posible crear la
interfaz gráfica de cualquier ventana de diálogo imaginable, lo próximo será
proporcionar funcionabilidad a cada uno de los objetos... pero antes, lo dicho, vamos
a un ejemplo:
Copie lo siguiente en Aliases:
/Dialogo2 { dialog –m dialogo2 mitabla2 }
Y ahora copie lo siguiente en Remotes:
dialog mitabla2 {
title "Qué información se muestra dónde"
size 30 30 330 260
box "Mostrar información",1,10 10 150 100
radio "En Status",2,20 30 130 20,right,group
radio "En Ventana aparte",4,20 80 130 20,right
box "Otras opciones",5,170 10 150 100
check "Mostrar Nombre",6,180 30 130 20,push
check "Mostrar E-Mail",7,180 55 130 20,push
check "Mostrar Web",8,180 80 130 20,push
box "Datos",9,10 115 310 100
text "Su Nombre:",10,20 135 100 20
text "Su E-Mail:",11,20 160 100 20
text "Su Web:",12,20 185 100 20
edit "",13,100 135 180 20
edit "",14,100 160 180 20
edit "",15,100 185 180 20
button "Mostrar Información",16,40 225 130 25,ok
button "Cancelar",17,190 225 90 25,cancel
}
No se va a comentar el código línea por línea puesto que sería repetir lo ya
explicado, pero una vez leído y probado (usando el alias "/dialogo2" ) se debe haber
dado cuenta de unas cosas importantes:
· Cada objeto tiene su ID, en este ejemplo se van numerando de 1 a N siendo ‘N’
el numero total de objetos, de esa forma más adelante nos será más facil
acordarnos de la ID de un objeto.
· Cuando el texto inicial de, por ejemplo, un campo de texto queremos que sea
nulo, es decir, que no haya texto inicial, se especifican las comillas vacías
“”.
· Al pulsar en uno de los botones de radio, el resto quedan sin pulsar, esto se
ha conseguido indicando en el primero de ellos el estilo “group”. Si hubiera
otro grupo de botones de radio en otra sección del diálogo haríamos lo mismo,
indicaríamos en el primer boton el estilo group.
· El uso de “box” da un aspecto más agradable al diálogo, su uso esta muy
recomendado para encuadrar objetos del mismo tipo o tema.
Comando DID
Una vez abierta una ventana de diálogo lo normal es que queramos modificar algo,
quizas queramos añadir texto a un campo de texto, o poner una variable en éste, para
ello usaremos el comando /did que sirve para modificar una ventana de diálogo que ya
está abierta. La sintaxis es:
/did [–ftebvhnmcukradiog] <nombre_dialogo> <id> [N] [texto/archivo]
Y a continuación la explicación de los diferentes parámetros que podemos usar con
este comando:
-f: Enfoca el objeto <id>.
Ejemplo: /did –f midialogo 20
-t: Hace que el bóton <id> sea el bóton por defecto (su funcion se producirá tambien
al pulsar ENTER).
Ejemplo: /did –t midialogo 23
-b: Hace que no se pueda interactuar con el objeto <id>.
Ejemplo: /did –b midialogo 12
-e: Devuelve la interacción al objeto <id>, en caso de que se le hubiera quitado con
el parámetro anterior.
Ejemplo: /did –e midialogo 16
-v: Hace que el objeto <id> sea visible.
Ejemplo: /did –v midialogo 10
-h: Esconde el objeto <id> (lo hace invisible).
Ejemplo: /did –h midialogo 10
-m: (Sólo funciona en campos de texto) Hace que el texto NO sea editable.
Ejemplo: /did –m midialogo 30
-n: (Sólo funciona en campos de texto) Deshace el parámetro anterior, es decir el
texto ya se puede editar en el campo de texto.
Ejemplo: /did –n midialogo 29
-c: Activa un checkbox o boton de radio (para ello NO se especifica [N] ), o
selecciona la linea N en una lista de objetos.
Ejemplo: /did –c midialogo 13 5
-u: Desactiva un checkbox o boton de radio (no se especifica [N]), o la linea [N] en
una lista de objetos deja de estar seleccionada. Para marcar un checkbox como
indeterminado (en caso de que sea de estilo 3state) usaremos los parámetros [-cu] a
la vez.
Ejemplo: /did –u midialogo 2
-k: (Sólo funciona en listas de objetos) Al usarse junto con los parámetros [-c] o [-
u] hará que se mantenga la selección que ya había y añada o quite a ésta la que
acabamos de hacer.
Ejemplo: /did –ck midialogo 4 2
-r: Borra todo el texto del objeto <id> (usado generalmente para campos de texto).
Ejemplo: /did –r midialogo 3
-a: Añade una línea de texto al final de la que ya haya en el objeto <id>.
Ejemplo: /did –a midialogo 6 %variable
-d: Borra la linea [N] de texto de un objeto.
Ejemplo: /did –d midialogo 8 2
-i: Inserta una linea de texto en la posición [N].
Ejemplo: /did –i midialogo 10 2 Insertando entre 2ª y 3ª linea
-o: Sobreescribe la linea [N] con el texto especificado.
Ejemplo: /did –o midialogo 10 1 Sustuimos la linea uno por este texto
-g: Pone una imagen .bmp a un objeto de icono.
Ejemplo: /did –g midialogo 10 c:\imagen.bmp
Vistas ya las formas para crear un a ventana de diálogo y modificarla a nuestro
gusto, y antes de entrar a ver el evento ON DIALOG que nos servirá para asignarle
ciertas funciones a cada objeto, veamos un par de identificadores propios de los
diálogos que nos serán muy útiles para recoger información de las ventanas que
creemos.
El identificador $dialog
Este identificador puede ser usado de varias maneras. Si en una tabla de un diálogo
especificamos en unos de los objetos el estilo “result”, y después creamos un diálogo
usando este identificador, el valor que nos devoverá el identificador será el mismo
que el de ese objeto cuyo estilo es “result”. Para crear un diálogo con este
identificador usaremos la sintaxis:
$dialog(<nombre_dialogo>,<nombre_tabla>)
Pero por supuesto siendo un identificador no puede usarse independientemente (como si
fuera un comando) puesto que devuelve un valor que debemos de recojer, lo tendremos
que utilizar para darle un valor a una variable, por ejemplo:
%resultado = $dialog(midialogo,mitabla)
También podemos usar este identificador sencillamente para obtener el nombre de los
diálogos abiertos en este momento, para ello usaremos la sintaxis:
$dialog(<nombre_dialogo>/<N>)
Devolverá el número de diálogo en caso de que especifiquemos un nombre, o el nombre
del diálogo abierto numero <N> en caso de que optemos por especificar ese parámetro.
Ejemplo: %variable = $dialog(3)
Le da a %variable el valor del nombre del tercer diálogo que tengamos abierto en ese
momento.
Y el último uso del identificador $dialog es para recoger información general de un
diálogo, como su tamaño o su título:
· $dialog(<nombre>).x: Devuelve la posición en el eje X del diálogo.
· $dialog(<nombre>).y: Devuelve la posición en el eje Y del diálogo.
· $dialog(<nombre>).w: Devuelve la longitud en pixels del diálogo.
· $dialog(<nombre>).h: Devuelve la altitud en pixels del diálogo.
· $dialog(<nombre>).title: Devuelve el título del diálogo.
· $dialog(<nombre>).modal: Devuelve $true si el diálogo ha sido creado con el
identificador $dialog, o $false si el diálogo ha sido creado con el comando
/dialog.
· $dialog(<nombre>).table: Devuelve el nombre de la tabla que está usando el
diálogo.
· $dialog(<nombre>).ok: Devuelve la ID del botón con estilo “ok”.
· $dialog(<nombre>).cancel: Devuelve la ID del botón con estilo “cancel”.
· $dialog(<nombre>).result: Devuelve la ID del botón que tenga como estilo
“result”.
El identificador $did
Este otro identificador nos servirá para recoger información de los objetos de un
diálogo. sus posibles usos son:
· $did(<nombre>,<id>).text: Devuelve el texto del objeto <id>.
· $did(<nombre>,<id>,<N>).len: Devuelve la lingitud en caracteres de la linea <N>
del objeto <id>.
· $did(<nombre>,<id>).lines: devuelve el numero total de lineas del objeto <id>.
· $did(<nombre>,<id>).sel: Devuelve el número de la linea seleccionada.
· $did(<nombre>,<id>).state: Devuelve el estado del objeto <id> ( 0 = off ; 1 =
on; 2 = indeterminado).
· $did(<nombre>,<id>).next: Devuelve la id del próximo obejto en el orden del
tabulador.
· $did(<nombre>,<id>).prev: Devuelve la id del objeto previo en el orden del
tabulador.
Una vez aprendidos estos identificadores, aparte de saber crear y modificar ventanas,
tan solo nos falta el último paso, el decirle a determindo control que ejecute
determinados comandos, decirle a determinado campo de texto que ponga su contenido
dentro de determinada variable,... etc. Esto se consigue con un evento remoto, el ON
DIALOG, que a continuación se expone con detalle.
Evento Dialog
Este es el evento que se usará para controlar la funcionabilidad del dialogo, la
sintaxis es la siguiente:
on 1:dialog:<nombre_dialogo>:<evento>:<id>:{ comandos }
En seguida se explicará la sintaxis anterior, antes debe saber que mediante el evento
ON DIALOG usted podrá:
· Hacer que se ejcuten los comandos que usted quiera al pulsar sobre cada uno de
los botones del diálogo.
· Asignar a las variables mostradas en campos de texto, el valor que el usuario
indique en ese campo.
2  Informática / Tutoriales - Documentación / Manual de scripting leanlo es para el irc (primera parte) en: 28 Junio 2003, 21:00 pm
mIRC
Scripting
Documentos recopilados por Ferran Sarrió
INDICE
INTRODUCCIÓN 3
POPUPS 5
ALIASES 7
VARIABLES 9
EVENTOS REMOTOS 12
IF-ELSE 24
EVENTOS CTCP 27
USUARIOS REMOTOS 30
GRUPOS 35
VENTANAS PERSONALIZADAS 37
VENTANAS DE IMAGEN 46
DIALOGS 56
SOCKETS 69
CÓMO CREAR TUS PROPIOS IDENTIFICADORES 73
COMO LINKAR SERVIDORES IRC EN P10 74
USO DE LOS TABS EN DIALOGS 78
PUERTOS TCP INTERESANTES 80
SCAN DE CLONES MEDIANTE IAL 81
CÓDIGOS RAW 84
IDENTIFICADORES DE SIMBOLO – TOKENS 88
MAS INFORMACIÓN 92
INTRODUCCIÓN
El mIRC es sin duda el programa cliente para IRC más extendido en la actualidad, y no
solo por su distribución libre y gratuita, puesto que hay otros muchos que también
cuentan con esta ventaja, ni por estar creado para Windows, el sistema operativo más
extendido actualmente, puesto que no es ni el mejor sistema ni el más económico; los
factores más decisivos son, bajo muestro punto de vista, la gran capacidad del
programa para poderlo adaptar a los gustos y necesidades de cada usuario mediante
rutinas de script, lo que hace de él una herramienta casi a la medida, así como la
gran cantidad de estos scripts, para todos los gustos y necesidades, que se
encuentran hoy a disposición de todos los usuarios.
Derivado de los anteriores, otro factor fundamental para que mIRC sea el cliente de
IRC más popular es la enorme cantidad de documentación sobre este programa que
podemos encontrar en la red. En efecto, aunque mIRC cuenta con completo fichero de
ayuda en formato .hlp este no es absolutamente completo ni agota todas sus
posibilidades, además, tanto esta ayuda como la inmensa mayoría de la información
disponible en Internet se encuentra en idioma inglés. La principal razón que podemos
alegar para justificar la difusión del programa entre los usuarios de habla española
no es otra más que la gran cantidad de scripts en esta lengua que han ido surgiendo
en los últimos dos o tres años, gracias al trabajo meticuloso y desinteresado de
docenas o centenares de creadores más o menos anónimos.
El objetivo de estas páginas es documentar en español las herramientas y técnicas
necesarias para la creación de scripts para mIRC. De este modo, además de incrementar
la escasa información de que se dispone en nuestro idioma, pretendemos poner estos
conocimientos al alcance de los nuevos y viejos creadores, y de todos los usuarios
que los necesiten, tanto para desarrollar y distribuir su propio script como para
aplicarlos a la personalización de las propias sesiones en el IRC.
En general podemos decir que un script es una secuencia de instrucciones que un
programa es capaz de seguir, interpretar, y ejecutar. Un script puede estar formado
por una o más rutinas o grupos independientes de instrucciones. El mIRC dispone de un
amplio entorno en el que podemos llevar a cabo la programación de rutinas de script,
logrando así que el programa realice las funciones más diversas, permitiéndonos
avanzar mucho más allá de las capacidades que este cliente de IRC implementa ya de
'serie'.
Prácticamente la totalidad de la configuración básica, tanto la que el programa
realiza por sí mismo como la que nosotros especificamos en las distintas ventanas de
diálogo, es depositada en ficheros de texto con extensión .ini en el mismo directorio
que el fichero ejecutable (mirc16.exe ó mirc32.exe). Es posible por tanto acceder a
todos esos parámetros de configuración y editarlos según nuestros deseos. Así mismo,
todos los scripts que creemos para el mIRC, con todas sus rutinas e instrucciones, se
depositan también en ficheros. La creación, modificación, y carga de estos ficheros
se puede hacer directamente desde el propio mIRC en las distintas opciones del menú
TOOLS.
La creación de scripts para mIRC potentes y útiles exige un buen conocimiento de los
comandos generales de IRC, de los comandos propios del mIRC, y de las distintas áreas
configurables de este programa. En este manual veremos el uso y utilidad de cada una
de esas áreas configurables y como debe de trabajar con ellas; también tocaremos en
capítulos aparte el uso de las herramientas imprescindibles para explotar todas las
capacidades de este entorno.
Si usted parte de cero, o desea iniciar un proceso de aprendizaje ordenado es siempre
recomendable comenzar estudiando detenidamente los comandos, estas ordenes le darán
una buena idea inicial de lo que el programa puede hacer y serán los ladrillos con
los que posteriormente deberá de construir su script. Es indispensable un buen nivel
de conocimientos de órdenes y comandos antes de avanzar a las siguientes etapas.
El siguiente paso lógico es comenzar a crear Alias y Popups, aquí ya descubrirá como,
con unos pocos comandos, usted puede lograr efectos espectaculares en su programa.
Tanto los alias como los popups se crearán en ficheros de texto independientes y
cargados en el mIRC (ver comando Load y Unload). La capacidad de estos ficheros es
grande pero limitada, ahora bien, usted podrá crear una buena cantidad de ellos si lo
necesita.
LLegados a este punto ya se habrá encontrado con lo Identificadores, pero es el
momento de estudiarlos más a fondo y observar lo que le permiten hacer. sus Alias y
Popups multiplicarán su capacidad y eficacia con un buen uso de estos
Identificadores.
Si hasta ahora no se ha sentido tentado de estudiar el uso de Variables y de la
estructura IF-ELSE es el momento de hacerlo. Si ya está familiarizado con algún tipo
de programación los encontrará extremadamente simples, si no quizás le parezcan algo
más complicados pero tómelo con calma, verá que una vez comprendidos son conceptos
muy elementales y le permiten dar a sus rutinas una flexibilidad que antes no
imaginaba.
Si su practica y estudio ha llegado hasta aquí solo le queda adentrarse en el área
que mIRC denomina "Remotes", es lo que le queda para poder hacer un script a la
altura de los mejores. Estudie con detenimiento los Eventos, los Números Raw y los
Sucesos CTCP. Esta lectura y el análisis cuidadoso de otros scripts le introducirán
ya como miembro de pleno derecho en el grupo de "chalados" que alguien ha denominado
"scripters" :-).
Los capítulos de Ventanas Personalizadas y el Servidor DDE completan de momento los
textos de este manual, recurra a estas técnicas solamente cuando su necesidad lo
justifique plenamente. El uso de Ventanas Personalizadas es un recurso muy vistoso y
que da al script un aspecto original, pero el abuso de ellas, empleandolas para fines
superfluos o cuando el programa ya dispone de una forma cómoda de suministrar la
misma información delata a los creadores principiantes y hace más engorroso el manejo
de su script.
Debo de pedir disculpas por no tener aún disponibles alguno de los apartados del
manual. Están en elaboración y espero poder mostrarlos en breve, como contrapartida y
justificación solo puedo alegar que he dado prioridad a la actualización del material
para adaptarlo a la versión 5.31 del mIRC, que ya aporta grandes cambios y novedades
con respecto a los textos originales que escribí en principio.
No puedo terminar sin agradecer a todas las personas que se interesan por este
trabajo, a los que con sus preguntas me animan a continuar con él no enseñando sino
aprendiendo, a los que me han ayudado con sus conocimientos y experiencia y son los
culpables de gran parte de lo que sé, y de modo muy especial a hPm, que me demuestra
cada día lo que el interés y la afición pueden hacer en el mundo del scripting y que
los maestros han de ser los primeros alumnos.
Documento escrito por SoMaTiC · www.ayuda-irc.net · sucubus@ctv.es
POPUPS
El mIRC permite también la creación de popups o menús personalizados; cada opción que
diseñamos para estos menús ejecutará las órdenes, alias, comandos,...etc. que les
introduzcamos, y podrá así mismo hacer uso de identificadores, variables, etc.
Disponemos inicialmente de 5 menús que podemos diseñar a muestro gusto con las
opciones que deseemos:
MENUBAR:
Es el tercer menú de la barra principal de menús que se encuentraen la parte superior
de la pantalla del mIRC.
CHANNEL:
Es el menú emergente que aparece al pulsar con el botón derecho del ratón sobre la
pantalla del canal.
NICKNAME LIST: Es el menú emergente de la lista de nicks del canal.
STATUS: Es el menú emergente de la ventana de Status del programa.
QUERY/CHAT: Es el menú emergente de la ventana de querys y de DCC chat.
Accederemos al código que genera los popups desde el menú TOOLS opción "popups". En
la ventana que nos aparece tenemos a su vez una barra superior de opciones, si
pulsamos "view" podremos elegir, de entre los 5 anteriores aquel popup del que
queremos ver las "interioridades" ;-). Ahí podremos crearlos, modificarlos o
eliminarlos. Terminado el trabajo pulsaremos OK, y desde ese momento ya podremos
hacer uso de las modificaciones introducidas. La mejor forma de comprender lo popups
es observando el código de los ya existentes, cada línea de este código suele
corresponder con una opción del menú, veamos un ejemplo:
Canales
.Entrar a #ayuda_irc: /join #ayuda_irc
.Entrar a #programación: /join #programacion
.-
.Elegir canal: /join #$$?="Introduce canal"
.Cambiar modos de canal.
.Solo op’s cambian topic: /mode # +t.
.No mensajes externos: /mode # +n.
.Cambiar el Topic: /topic # $$?="Introduce nuevo topic"
Nicks: /nick $$?="Introduce nuevo nick"
Como se puede observar cada línea describe en primer lugar el nombre de la opción de
menú con la que aparecerá cuando se despliegue este. Como es sabido cada opción de
menú puede tener a su vez otras subopciones, y estas a su vez otras tantas, y así
sucesivamente; esto se especifica en el diseño del menú mediante los puntos que
preceden a cada una de las líneas: las líneas sin puntos delante son opciones
principales que aparecerán nada más desplegarse el menú. Si tienen un punto delante
significará que son subopciones de las anteriores, y se desplegarán al pulsar sobre
aquella inmediatamente anterior que no tenga punto; si tienen dos puntos serán una
subopción de la inmediatamente anterior que solo tuviese uno... y así sucesivamente.
En virtud de lo anterior una línea de opción de un popup deberá de tener su nombre
(el que queramos) seguido del símbolo ":" y la acción o comando que se ejecutará al
hacer click sobre esta opción.
Si solo está el nombre, no hay dos pontos y luego un comando, es porque al
seleccionarla se desplegará un submenú, así pues deberá de estar seguida de otras
líneas de opciones de rango inferior , es decir, con más puntos que ella por delante,
que serán las que se desplieguen al seleccionarla.
Opcionalmente podemos poner tan solo un guión en lugar del nombre de una opción, esto
lo único que hará será insertar una línea de separación en la lista de opciones del
menú.
Así pues, en el ejemplo anterior, al desplegar el popup observaremos tan solo dos
opciones: Canales y Nicks. Si pulsamos la segunda podremos cambiar nuestro nick
introduciendo uno nuevo en la ventana que se nos presentará; en cambio, al pulsar la
primera se desplegarán a su vez otras cuatro opciones, separadas las dos primeras,
por una línea horizontal, de las dos últimas. De estas cuatro las tres primeras
ejecutarán ya una acción cada una, sin embargo la cuarta desplegará otras tres nuevas
opciones.
Este razonamiento quizás pueda parecer complejo en principio, pero con un mínimo de
práctica y observación descubrirá que domina las sutilezas de los popups mucho antes
que cualquiera de las otras áreas de creación de script para el mIRC. Todo lo dicho
para la definición de alias es también válido para construir la definición de
opciones de menús, incluido el uso de identificadores.
Algunos identificadores (palabras especiales con el símbolo $ delante) cobran un
valor especial cuando se usan en un determinado popup; por ejemplo, el identificador
posicional $1, cuando se usa en una opción del popup de QUERY/CHAT, se cargará
automáticamente con el nick del la persona con la que tenemos abierto el query o DCC
Chat; y en el menú NICKNAME LIST con el primer nick que tengamos seleccionado en la
lista.
Recuerde, para dominar los popups lo mejor es un mínimo de práctica y observar otros
que ya están hechos, el mIRC dispone de algunos, y además son muchos los scripts en
circulación que nos proporcionarán excelentes ejemplos de la creación y ordenación de
esta excelente herramienta.
Documento escrito por SoMaTiC · www.ayuda-irc.net · sucubus@ctv.es
ALIASES
El mIRC te permite crear aliases y scripts para hacer más rápido tu sesión IRC o para
hacer más fáciles y rapidas las funciones del script. Para crear los aliases debes
conocer los comandos básicos del mIRC.
Un aliases puede ser llamado desde una linia de comandos, desde otro alias, desde un
popup y un remote script. Un alias no se puede llamar a si mismo principalmente
porque esto parece causar más problemas para los usuarios de los que soluciona. No
hay nada mejor para entenderlo que algunos ejemplos:
/hola /msg $chan Hola gente, que tal os va?
Si ahora tu escribes /hola en un canal, automaticamente es lo mismo que decir:
Hola gente, que tal os va?
NOTA: El simbolo de doble «$$» significa que el comando no se ejecuta si no se
indican los parametros:
/j /join $1 o /j /join $$1
Ahora si escribes /j #ayuda_para_novatos es lo mismo que escribir /join
#ayuda_para_novatos. El simbolo «$1» se refiere al primer parámetro de la linia que
tu escribes. Si el simbolo fuera «$3» se referiria al 3er parámetro que has escrito y
asi con cada número.
/canal /join $?="En que canal quieres entrar?"
El parámetro «$?» sirve para que te pida información que tu debes escribir, para
indicar que pregunta quieres hacer debes poner ="La pregunta a hacer". Y si quieres
que vuelva a aparecer el texto que ha puesto en la ventana esa, debes poner «$!»,
mira este ejemplo, que asi te sera más fácil comprenderlo:
/canal /join $?="En que canal quieres entrar?" | /echo Ahora entraras en $!
NOTA: Este simbolo «|» sirve para separar diferentes comandos que esten en una linia.
/mejor /say Yo opino, que soy el ME $+ J $+ OR $+ !!!
Los parametros normalmente estan separados por espacios, pero para unir palabras o
parametros puedes usar el simbolo «$+» dejando un espacio antes y despues de este
simbolo, se debe poner entre las palabras o parametros que quieres unir.
En los aliases también puedes usar las llaves { }, que se explica ocn detalle en el
apartado Popups. También puedes usar los estamentos del if-then-else, el cual se
explica en el apartado que lleva su nombre. Pero igualmente aqui te enseño un ejemplo
para que no te queden dudas:
/ayuda {
if ( $chan == #Ayuda_para_novatos ) { /say Hola, necesito ayuda. }
else { /echo $chan Este canal no es de ayuda, o almenos eso creo :) } }
El comando GOTO
El comando GOTO, te hace saltar de un punto del alias a otro punto.
/numero {
if ($1 == 1) goto one
elseif ($1 == 2) goto two
else goto unknown
:one
echo El numero uno
halt
:two
echo El numero dos
halt
:unknown
echo Numero desconocido!
Halt }
Remote Script
También puedes escribir los alias en un remote, lo has de hacer poniendo alias
delante seguido de la palabra del alias y todos los comandos que ha de ejecutar. Mira
este ejemplo:
alias Sarrio {
/say este curso de scripting...
/say lo ha creado [SaRRiO] x'D }
Teclas de Función
Tu puedes redefinir las teclas de funcion, F1, Shift+F2... Mira estos ejemplos de
aqui:
/F1 /join #Ayuda_para_novatos
/SF10 /nick [SaRRiO]
/CF1 /quit Me largo, que telefonica nos tima cada dia
El /SF10 es Shift+F10, el /CF1 es Control+F1, /F1, asi a secas es la tecla F1 y asi
con las otras teclas. Esto a parte de lo que hemos visto, puedes meter comentarios en
los aliases y remotes, ejemplos:
;Esto es un comentario que hago
:Te puedes servir para recordar para que sirve cada alias o script en general!
;Para distingir entre protecciones, juegos...
El simbolo «;», sirve para esto, para que el mIRC sepa que no son comandos sino
comentarios.
Documento escrito por [SaRRiO] · www.sarrio.org · admin@sarrio.org
VARIABLES
El uso de variables es el recurso fundamental en programación. Podemos ver una
variable informática como un recipiente en el que podemos depositar un valor
cualquiera, para después hacer uso de él dentro de una instrucción, de esta forma no
será necesario tocar la instrucción cada vez que queremos alterar el valor a manejar,
sino tan solo asignar antes un nuevo valor a la variable.
Técnicamente una variable no es más que un espacio de nuestra memoria RAM (una
dirección de memoria) que queda reservado en el momento en que se crea la variable, e
identificado temporalmente con el nombre de esta. Cada vez que asignamos un valor a
la variable el programa lo único que hace es depositar ese valor en la dirección
reservada. Más adelante, cuando ejecutemos una instrucción que contenga esa variable,
el programa irá a ese espacio de memoria y extraerá el valor que contenga, poniéndolo
en el lugar del nombre de la variable, dentro de la instrucción en cuestión.
Por ejemplo, si en un script para mIRC hemos creado una variable llamada %num, a la
que hemos asignado el número 3.14159 ,podemos tener una instrucción como la
siguiente:
echo -a El valor asignado es: %num
Esta orden presentará en la ventana activa un mensaje que diga:
"El valor asignado es: 3.14159"
Si queremos que el valor que nos presente el mensaje sea diferente, no tenemos más
que asignar previamente un valor distinto a la variable.
Como se ve el uso de las variables es muy sencillo. En mIRC lo único que hace falta
es identificarlas con un nombre de nuestra elección y precederlo del símbolo: %.
Pero, ¿Como creamos las variables y les asignamos valores?. El entorno del mIRC
provee una manera muy simple de hacerlo mediante el uso de la orden /set, cuya
sintaxis es la siguiente:
set <%variable> [valor]
Por ejemplo:
set %num 3.14159
Es decir, es posible crear la variable (reservar el área correspondiente de memoria)
en el mismo momento que le asignamos un valor. Si no especificamos valor la variable
se creará, pero no contendrá nada de momento; y si usamos esta orden sobre una
variable que ya existe, esta recibirá el nuevo valor especificado.
En el mIRC no es necesario preocuparse de qué tipo es la información que depositamos
dentro de la variable, es decir, si se trata de una cadena de caracteres, un número
entero, o un número con parte entera y parte decimal. Esta distinción la hace el
programa en el momento que hagamos uso de ella; en principio todas las variables se
consideran como una simple cadena de caracteres, pero si empleamos para manejarlas
operadores aritméticos, el programa las transforma internamente en el valor numérico
que corresponde; la única limitación en este caso es que solo se tendrán en cuenta
los cinco primeros valores decimales, es decir, los cinco primeros dígitos tras la
coma decimal.
Recursos de asignación
Asignar valores a una variable se puede hacer de forma directa, como hemos visto, o
de forma indirecta a través de algún recurso del programa. Por ejemplo, si queremos
que la variable %MiNick reciba el nick que estamos utilizando en ese momento, sin
tener que especificárselo nosotros, podemos recurrir a la función $me, que nos
devuelve precisamente nuestro nick actual. La asignación sería pues:
set %MiNick $me
Otro ejemplo, queremos asignar a una variable el contenido de otra variable:
set %var2 %var1
Incluso podemos hacer que el programa nos pregunte qué valor queremos que reciba
determinada variable, cuando el script llegue a ese punto; no hay mas que hacer uso
del identificador $$?, por ejemplo:
set %variable $$?="Asigna un valor a la variable:"
Así mismo es posible también hacer que una variable reciba directamente el resultado
de operaciones aritméticas sencillas:
%x = 5 + 1 Suma
%x = 5 - %y Resta
%x = %x * 2 Producto
%x = %z / $2 División
%x = $1 % %valor Módulo (Resto de la división: $1 entre %valor)
%x = 2 ^ %w Potencia
Solo es posible asignar el resultado de operaciones simples, para el uso de
operaciones más complicada es preciso recurrir a la función $calc que podemos ver en
el capítulo IDENTIFICADORES.
Finalmente, podemos hacer incrementos o decrementos automáticos del valor numérico de
una variable con las órdenes:
inc <%variable> [incremento] dec <%variable> [decremento]
Estas órdenes incrementarán o decrementarán el contenido de una variable en una
cantidad especificada. Si no se especifica cantidad el incremento o decremento se
hará en la unidad. Por ejemplo:
· set %valor 5
set %cifra 2
dec %valor %cifra
echo -a El valor actual es: %valor
En la pantalla aparecerá el mensaje:
"El valor actual es: 3"
Si en algún momento hacemos uso de una variable que aún no ha sido creada, o bien,
que no contiene ningún valor, está devolverá el parámetro $null (nulo), esto solo
será útil en las comparaciones de tipo if que se estudian en su correspondiente
apartado.
NOTA: podemos consultar todas las variables existentes en un momento determinado, así
como el valor que contienen (alterándolo manualmente si lo deseamos) desde el menú
TOOLS, opción "Remote...", en la solapa "Variables".
Eliminación de variables
Eventualmente es posible también eliminar la variable, es decir, hacer que
desaparezca la reserva de memoria que la creación de esta supuso. La orden a este
efecto es la siguiente:
unset <%variable_1>
Es posible también utilizar el carácter * para eliminar grupos de variables, por
ejemplo:
unset %nom*
Esta orden eliminará todas las variables cuyo nombre comience por "nom".
Finalmente podemos, si lo deseamos, eliminar todas la variables instaladas son la
orden:
unsetall
Documento escrito por SoMaTiC · www.ayuda-irc.net · sucubus@ctv.es
EVENTOS REMOTOS
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 ser
así, a ejecutar las acciones que para ese caso le hemos programado.
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 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í, 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.
En este manual de referencia se incluyen los eventos descritos para la versión 5.31
del mIRC.
Un ejemplo
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 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:
on 1:TEXT:Somatic:#: notice $nick Perdona $nick no estoy prestando atención!!!.
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:
#ausente off
on 1:TEXT:*Somatic*:#:/notice $nick Perdona $nick 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 de incluir las
instrucciones: .enable #ausente y .disable #ausente dentro de algún alias o de un
menú (si esto le causa problemas ahora es el momento que estudiar a fondo las
secciones de aliases y popups del mIRC ;)). (el punto delante de las cláusulas enable
y disable tiene el único fin de inhibir el mensaje que el programa presenta en
pantalla anunciando la activación o desactivación del grupo).
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).
Sintaxis general
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:
on <nivel>:<EVENTO>:<texto>:<lugar>:<comando/os>
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@ctv.es, o en el canal
#Ayuda_IRC del IRC Hispano, no tiene más que preguntar por SomaTic ;).
Relación de eventos
ON TEXT
Este evento se produce al recibirse un mensaje especificado, bien en un privado, o
bien en un canal en el que nos encontramos.
Formato: on <level>:TEXT:<texto>:<*><?><#[,#]>:<comandos>
Ejemplo: on 1:TEXT:*ayuda*:*:/msg $nick ¿Cual es el problema?
El texto del mensaje que deseamos que produzca el evento se puede especificar de
varias maneras:
* El evento se producirá ante cualquier texto.
& El evento se producirá ante cualquier palabra.
Texto
El evento se produce anta una palabra concreta y no
otra.
Texto*
Se produce ante una cadena de caracteres que comience
por el texto especificado.
*Texto
Se produce ante una cadena de caracteres que finalice
por el texto especificado.
*Texto*
El evento se produce si el texto contiene la cadena
especificada, sea cual sea su posición.
Se puede especificar el lugar donde se controlará el evento de la siguiente forma:
?
Controlara la producción del evento dentro de
un query o de un DCC chat
#
Controlara la producción del evento dentro de
un canal cualquiera en el que nos encontremos
#canal_1,#canal_2,...
Controlará la producción del evento dentro de
un canal especificado.
*
Controla el evento en un privado o canal
indistintamente.
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
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:
on 1:TEXT:%text:%canal:/msg $nick Tú has escrito %text en el canal: %channel
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
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. Recordemos que 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 emitirá un
mensaje al canal en que se produce.
on 1:NOTICE:*:?:/msg $nick Estoy ocupado, espera un momento!
Esta orden detecta cualquier /notice recibido estando en un privado, y responde con
otro /notice al autor.
ON BAN Y ON UNBAN
Estos eventos se producirán cuando un usuario sea baneado o desbaneado en el canal.
Formato: 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 nivel 9 o superior en
la lista de usuarios de nuestro programa (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
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:
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 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:
on 1:BAN:#: {
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) }
}
}
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 máscara del ban coincide con la
nuestra o bien tiene incluido nuestro nick, en tal caso emite un mensaje a la ventana
de estatus especificando la persona que lo ha realizado y la máscara con la que se ha
hecho 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 banea a su vez.
ON CHAT Y ON SERV
Los eventos on CHAT y on SERV se producen cada vez que es enviado un mensaje la una
ventana de DCC chat, o a un Fserve respectivamente. Es similar al evento on TEXT, el
cual no funciona en un chat ni en un servidor de ficheros.
Formato: on <level>:<CHAT/SERV>:<texto>:<comandos>
Ejemplo: on 1:CHAT:*ayuda*:/msg $nick Cual es el problema?
La especificación del texto que producirá el evento se hace de la misma forma que en
ON TEXT.
ON CONNECT Y ON DISCONNECT
El evento on CONNECT se produce cuando mIRC conecta al server 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_irc
on DISCONNECT es otro evento con el mismo formato, que se produce al desconectarse
del server.
Ejemplo: on 1:CONNECT:/echo Conectado a $server a las $time Tu nick es: $nick
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!
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_irc:/msg $nick No abuses del status!
Ejemplo2: on 9:OP:#:/mode $chan -o $opnick | /msg $nick no opees a esa persona!
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ó.
on 1:DEOP:#ayuda_irc:/mode $chan +o $opnick
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:
on >=2:OP:#mIRC:/msg $chan $nick opeado (legal)
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.
ON VOICE Y ON DEVOICE
Se produce cuando un usuario recibe o es privado de voz en un canal moderado en que
nos encontramos.
Formato: on <level>:VOICE:<#[,#]>:<comandos>
Ejemplo: on 1:VOICE:#:/msg $vnick ya tienes voz en: $chan
Ejemplo2: on 9:VOICE:#:/mode $chan -v $vnick | /msg $nick No des voz o ese tío!
Esta orden se ejecuta cuando el que recibe voz tiene nivel 9 o superior.
on 1:DEVOICE:#mIRC:/mode $chan +v $vnick
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.
ON DNS
Se produce cuando hacemos un requerimiento DNS (comando /dns).
Formato: on <level>:DNS:<commandos>
Ejemplo: on 1:DNS:/notice $me resuelto: $raddress
Ejemplo2:
on 1:DNS:{
echo –s DNS de $nick | echo -s ip address: $iaddress
echo -s named address: $naddress | echo -s resolved address: $raddress
}
ON ERROR
Se produce cuando el server envía un mensaje de error, por ejemplo, en una
desconexión.
Formato: on <level>:ERROR:<texto>:<commandos>
Ejemplo: on 1:ERROR:*server full*:/echo Has salido del server!
Ver el evento on TEXT para el formato del texto.
Ejemplos: on 1:ERROR:*banned*:/echo Has sido baneado de este server!
ON FILESEND y ON FILERCVD. ON SENDFAIL y ON GETFAIL
Se producen al completarse un dcc send o un dcc get (envio o recepción de ficheros
reapectivamente).
Formato: on <level>:FILESENT:<filename[,filename]>:<comandos>
Ejemplo: on 1:FILESENT:*.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.
Ejemplos: on 1:FILESENT:*.txt,*.ini:/echo Enviado $filename a $nick $address
Se produce cuando enviamos un fichero .TXT o INI. $filename devuelve el nombre del
fichero enviado.
on 1:FILERCVD:*:echo Recibido $filename de $nick | run notepad.exe $filename
Esta orden avisa cuando hemos recibido ficheros .TXT e .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!!
ON INPUT
Se produce cuando introducimos texto en una caja de texto y pulsamos INTRO.
Formato: on <level>:INPUT:<commandos>
Ejemplo: on 1:INPUT:/echo Texto introducido: $1-
La función $1- devuelve en este caso toda la cadena de texto introducida
ON INVITE
Se produce cuando un usuario nos invita a un canal.
Formato: on <level>:INVITE:<#[,#]>:<comandos>
Ejemplo: on 1:INVITE:#mIRC:/join $chan
ON JOIN Y ON PART
Se producen al entrar o salir un usuario de un canal en que nos encontramos
Formato: on <level>:JOIN:<#[,#]>:<comandos>
Ejemplo: on 1:JOIN:#:/msg $nick Hola!
ON KICK
Se produce cuando un usuario es expulsado de un canal en el que nos encontramos.
Formato: on <level>:KICK:<#[,#]>:<comandos>
Ejemplo: on 5:KICK:#:invite $knick $chan | msg $nick Hey, $knick ese es mi amigo!
Es aplicable también aquí la regla de comparación de niveles de los nicks descrita el
los eventos on BAN y on OP.
ON LOAD Y ON START
Estos eventos se producen cuando un fichero de script es cargado o descargado.
Formato: on <level>:LOAD:<commandos>
Ejemplo: on 1:LOAD:/echo mIRC Script cargado!
On start se produce cuando inicies el mIRC...
ON MIDIEND Y ON WAVEEND
Se produce cuando el mIRC termina la reproducción de un fichero MIDI o WAV.
Formato: on <level>:MIDIEND:<commandos>
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, solo lo hace cuando la reproducción es
completada.
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-
Esta instrucción se produce cuando alguien cambia los modos del canal teniendo
nosotros también el estatus de operador.
ON NICK
Se produce cuando un usuario cambia de nick dentro del canal.
Formato: on <level>:NICK:<commandos>
Ejemplo: on 1:NICK:/msg $nick Hi $newnick!
$nick devuelve el nick antiguo; $newnick el nuevo.
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/OPTONS/SOUNDS
Formato: on <level>:NOSOUND:<comandos>
Ejemplo: on 1:NOSOUND:/notice $nick No tengo el fichero $filename
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:<commandos>
Ejemplos:
on 1:NOTIFY:/msg $nick Hola nick, ya te veo venir!!! :)
on 1:NOTIFY:/notice $me $nick se va del IRC *sniff* :-(
ON QUIT
Se produce cuando un usuario que está en nuestro canal sale del IRC.
Formato: on <level>:QUIT:<commandos>
Ejemplos:
on 1:QUIT: notice $me $nick sale del IRC con el mensaje: $1-
ON SNOTICE
Se produce cuando recibimos una noticia del server.
Formato: on <level>:SNOTICE:<texto>:<commandos>
Ejemplo: on 1:SNOTICE:*client connecting*:/halt
Para una explicación del formato del texto, ver el evento on TEXT.
Ejemplo: on 1:SNOTICE:*split*:/splay netsplit.wav
Activa un fichero de sonido en caso de una noticia del server anunciando un split.
ON TOPIC
Se produce cuando algún usuario cambia el tópico del canal.
Formato: on <level>:TOPIC:<#[,#]>:<comandos>
Ejemplo: on 1:TOPIC:#mIRC:/msg $chan Hmm, que tópico mas cutre!!!: $1-
La función $1- devuelve el texto completo del nuevo tópico.
ON USERMODE
Se produce cuando cambiamos nuestros modos de usuario.
Formato: on <level>:USERMODE:<commandos>
Ejemplo: on 1:USERMODE: echo -s nuevos modos: $1-
ON WALLOPS
Se produce cuando recibimos un wallops message.
Formato: on <level>:WALLOPS:<texto>:<commandos>
Ejemplo: on 1:WALLOPS:*aviso*: echo –s $timestamp WallOp de aviso: $1-
Ver el evento on TEXT para una explicación de los posibles formatos del texto.
ON HELP Y ON DEHELP
Se produce cuando un usuario recibe o es privado de halfop en un canal en que nos
encontramos. Este modo tan especial se puede encontrar en la red Univers.Org...
Formato: on <level>:HELP:<#[,#]>:<comandos>
Ejemplo: on 1:HELP:#: echo # $nick ha puesto status de halfop a $opnick
ON PING
Se produce cuando el servidor te manda un PING con un cierto mensaje para comprobar
si sigues conectado o has cerrado la conexión.
Formato: on <level>:PING:<comandos>
Ejemplo: on 1:PING:echo –s El servidor de ha hecho un ping: $1-
ON RAWMODE
Se produce cuando un usuario cambia cualquier modo en un canal donde estas tu.
Formato: on <level>:RAWMODE:<#[,#]>:<comandos>
Ejemplo: on 1:RAWMODE:#: echo # $nick pone los modos $1-
$1 : los modos que cambia
$2 : los parametros de los modos (nicks, key, limite de usuarios...)
ON KEYUP Y ON KEYDOWN
Se produce cuando el usuario del mIRC pulsa o deja de pulsar una tecla especificada
en una ventana especificada...
Formato: on <level>:KEYDOWN:<@>:<key,...,keyN>:<comandos>
Ejemplo: on 1:KEYDOWN:@:*:echo –S Has pulsado la tecla $keyval en $window
El ejemplo indicado es un estándar, funciona en cualquier ventana y tecla...
Mira este otro ejemplo:
on 1:KEYDOWN:@keys:32:echo –s has pulsado la barra espaiadora en la ventana @keys
ON HOTLINK
Se produce cuando el usuario del mIRC pasa el cursor por encima de un texto que
contiene la cadena de texto especificada. Puede usarse en cualquier tipo de ventana,
query, canales, ventanas personalizadas... en todas si quieres...
Formato: on <level>:HOTLINK:<texto>:<*#?=!@>:<comandos>
Ejemplo: on 1:HOTLINK:*univers*:*:echo Algun dia todas las redes seran como Univers
ON SERVEROP
Se producen cuando un usuario del canal es opeado por un servidor de la red.
Formato: on <level>:SERVEROP:<#[,#]>:<comandos>
Ejemplo: on 1:SERVEROP:#ayuda_irc: if ($me isop #) mode # -o $opnick
Lee el apartado del evento Op/Deop para más información...
ON SERVERMODE
Se produce cuando un servidor cambia los modos del canal...
Formato: on <level>:SERVERMODE:<#[,#]>:<comandos>
Ejemplo:
on 1:SERVERMODE:#:{
if ($me isop #) {
mode # $replace($replace($replace($1,-,<),+,-),<,+)
}
}
En este ejemplo hacemos que cuando el servidor cambia los modos del canal nosotros
activaremos o desactivaremos los modos que ha cambiado, eso si tenemos la suerte de
ser op del canal...
Documento escrito por SoMaTiC · www.ayuda-irc.net · sucubus@ctv.es
Modificado y actualizado por [SaRRiO] · www.sarrio.org · admin@sarrio.org
IF-ELSE
Que son los If-Else
Los “If-Else” no son comandos que se puedan ejecutar automaticamente, como por
ejemplo, el /mode #scripting +m. Los “If-Else” deben de ser ejecutados dentro de un
alias, popup, o remote, ose a, que hay que escribirlos en código.
Los “If-Else” son unas condiciones que creamos ente dos objetos. Este comando, sera
conocido para el que haya programado alguna vez.
La sintaxis
La sintaxis básica de los If-Else es la siguiente : IF ( %objeto.1 comparador
%objeto.2 ) { comandos }. El comando IF, abre el comando. La comparación que queramos
hacer debe de ir entre paréntesis.
La comparación, consta de tres partes: El primer objeto a comparar, el comparador y
el segundo objeto a comparar. Los objetos a comparar pueden ser cualquier tipo de
texto, un número, un nick, el nombre de un archivo… El comparador, es lo que crea la
condición. Pueden ser muchos los comparadores, igual que, menor que, esta dentro de…
Bueno, no os habreis enterado demasiado y aquí os va un ejemplo sencillo
/comprobar {
IF ( $$1 == $$2 ) { echo –a $$1 es igual a $$2 }
ELSE { echo –a $$1 no es igual a $$2 }
}
Si os habéis fijado, ya hemos incluido un comando. El ELSE. Creo que, lo que he hecho
no necesita más explicaciones. Pero bueno, aquí va:
IF ( $$1 == $$2 ) // Si lo primero puesto, es igual que el segundo
{ echo –a $$1 es igual a $$2 } // Haz lo siguiente
ELSE // o sino
{echo –a $$1 no es igual a $$2 } //Haz lo siguiente
EL comando ELSE, no es necesario. Si no lo hubiéramos puesto, y si $$1 no fuera igual
que $$2, no hubiera pasado nada. Pero que pasa, cuando queremos hacer que si los
números no son iguales, mire si son mayores o menores. ¿Tenemos que poner ELSE y
despues seguido IF? Pues no.
Para eso esta el comando ELSEIF, que es el unido de los comandos ELSE y IF. Con esto,
mejoramos nuestro ejemplo:
IF ( $$1 == $$2 ) { echo –a $$1 es igual a $$2 }
ELSEIF { $$1 > $$2 ) { echo –a $$1 es mayor que $$2 }
ELSEIF { $$1 < $$2 ) { echo –a $$1 es menor que $$2 }
ELSE { echo –a PERO que KLASE DE NUMEROS SON ESOS? }
Este nuevo ejemplo, mira si el primer número es igual que el segundo, si no es así,
mira si es mayor, si no es así, mira si es menor, y si tampoco es así (cosa difícil
si son números), dice lo de PERO que KLASE DE NUMEROS SON ESOS?.
Los comparadores
mIRC admite comparadores de muchos tipos. Para números, para letras…
Aquí teneis los comparadores que acepta el mIRC 5.41 Algunos estan omitidos, puesto
que no se para que son o no se usan mucho. :)
== Es igual que
=== Es igual que (mayusculas y minusculas incluidas)
!= No es igual que
< Es menor que
> Es mayor que
>= Mayor o igual que
<= Menor o igual que
// es multiplo de
\\ no es multiplo de
isin Esta dentro de*
isincs Esta dentro de (mayusculas y minusculas incluidas)*
isnum Esta dentro del rango*
isletter Esta dentro de las letras*
ison Esta dentro de canal*
isop Es op en canal
isvo Es voice en canal
ischan Es un canal en el que estas*
isauto Esta en tu lista de auto-ops del canal
isignore Esta en tu lista de ignores
isprotect Esta en tu lista de protects
isnotify Esta en tu lista de notify
El primer grupo, son para los números principalmente, menos los tres primeros. Estos
se pueden usar con números y texto. El tercero, es para decir que no es igual, o sea
lo contrario del ==. Este es una excepción, puesto que con los demás, si quieres lo
contrario del comparador en si, se consigue mediante un ¡ antes del comando, por
ejemplo, ¡isop .
El segundo grupo es para comparar distintos grupos de textos., menos el isnum. Este
es para mirar si el número $$1 esta dentro del rango $$2. Este rango tiene que estar
en este formato: N1-N2. Por ejemplo: 1-10. El comando isletter hace lo mismo, pero
con letras, en este, el formato de $2 es el siguiente: L1L2L3L4. Por ejemplo:
abdgklt.
El isin y el isinc son para mirar si un texto esta dentro de otro. Por ejemplo, si
queremos hacer el juego de “la ruleta de la fortuna” y alguien, dice una palabra, por
ejemplo, casa. La condición seria:
IF ( %lokehandixo isin %eltextoentero ) { say Has acertado una palabra!!! }
El isinc, seria lo mismo, pero si quisieras que también acertar con las mayúsculas.
El ison, aunque se parezca mucho al isin, es para mirar si alguien esta dentro de un
canal. Por ejemplo:
IF ( Flubbers ison #scripting ) { msg $chan Joer Flubbers, siempre estas aquí! }
El isop, y el isvo se usan de la misma forma, para mirar si alguien tiene op o si
tiene voz o esta voice. El ischan, no necesita un segundo objeto, su sintaxis es la
siguiene: if ( canal ischan ) { }. Esto mira si el canal es un o en el que estes tu.
El último grupo de comparadores, es para nuestras listas internas de notify, ignore…
Estos tiene el mismo sintaxis que el ischan.
Comandos Especiales
Y que pasa si queremos hacer, por ejemplo, que cuando haya dos condicones para hacer
algo, o cuando alguno de los dos valga…? Pues para eso existen los comandos || y &&.
El primero, junta dos comparaciones, siendo valida cualquiera de las dos para que
pase algo. Por ejemplo:
IF( $nick == Scytale)||( $nick == Scytale) { echo –a $Nick es un bot }
El && es como un “Y”. Es usado cuando se necesita que pasen las dos cosas. Por
ejemplo, cuando un protegido te pide op mediante query:
ON 1:TEXT:opme*:?:{
If ( $nick isprotect )&&( $me isop $$2 ) {
Mode $$2 +o $nick
}
Por último, hay un identificador especifico de los IF-ELSE. Es el $ifmatch. Este, es
el primer objeto de la comparacion. Por ejemplo:
IF ( %TEXT != HOLA KARAKOLA ) { echo –a $ifmatch no es igual que HOLA KARAKOLA }
Documento escrito por genars para el canal #Scripting con fecha 1-12-1998
EVENTOS CTCP
Introducción
Las siglas CTCP significan “Client to Client Protocol” o “Protocolo de cliente a
cliente” en castellano, y básicamente se trata de un tipo escpecial de comunicación
entre los usuarios de un server de IRC que será usada para provocar que los usuarios
de el script que estemos haciendo ejecuten ciertas acciones automáticamente al
recibir cierta información por CTCP.
Por otra parte los usuarios remotos se refiere a algo que usted seguro que ya ha
visto anteriormente en el tutorial de enventos remotos, se trata de ese numerito que
siempre ponemos en el evento por ejemplo “on 1:OPEN:” , ¿qué es ese ‘1’? Pues
sencillamente es el nivel que necesita un usuario para hacer que salte ese evento con
los comandos que se hayan especificado, despues entraré en más detalle en esto, ahora
volviendo al principio vamos a ver todo lo referente a los eventos CTCP:
Comandos CTCP
Para mandar información a otro usuario mediante CTCP lo haremos de la siguiente
forma: /ctcp <nick> <mensaje>
Donde <nick> es el nick de la otra persona y <mensaje> es cualquier mensaje que
queramos enviar por ese protocolo. Lógicamente no nos pondremos a hablar con un
usuario mediante CTCP's ya que seria absurdo estando los dos conectados al IRC. Los
CTCP's tienen otra utilidad... que es la de que el otro usuario reaccione
automáticamente de una cierta manera al usted enviarle ese CTCP. Por ejemplo, existe
uno que tiene el mIRC ya implementado: el famoso CTCP PING y consiste en enviar un
ping al otro usuario:
/ctcp <nick> ping
El programa del otro usuario responderá automaticamente al CTCP PING y lo hará
devolviendo una información, que al llegarnos de nuevo el mIRC nos muestra en
pantalla. En este caso en pantalla se muestra el “Lag” o retardo de la línea que hay
entre usted y la persona a la que envió el ping. Puede probar con los otros CTCP
implementados ya en mIRC, el funciona-miento de todos es similar; solo varia la
respuesta que proporcionan.
A continuación aprenderá a crear sus propias respuestas a ciertos CTCP's, ya que el
mIRC solo trae unas cuantas ya definidas (como son PING, VERSION, TIME ...) pero
usted quizás quiera hacer otras con otros nombres, o tal vez cambiar las respues-tas
que a los ya existendes dará su programa.
Eventos CTCP
Vamos a ver ya como usamos este tipo de eventos para que la explicación sea más fácil
de entender. En la sección “Remotes” del editor del mIRC es donde definiremos estos
eventos y se hacen de una forma parecida al resto de eventos remotos. La sintaxis es:
ctcp <nivel>:<texto>:<#,?,*>:{ comandos }
Este tipo de eventos haran que nuestro programa se comporte de cierta manera (es
decir, que ejecute los comandos que le especifiquemos) cuando recibamos un CTCP
<texto> de otro usuario. El <nivel> de momento lo dejaremos siempre en ’1’ , y el
otro parámetro ha de ser o bien un ‘#’ si nos referimos a un canal, un ‘?’ para un
privado(query) o un ‘*’ para “en cualquier lado”.
Con un pequeño ejemplo lo veremos más claro, copie lo siguiente en el editor del
mIRC, pestaña “Remotes”:
ctcp 1:*hora*:*:{
msg $nick Son las $time
}
Ese evento hará como ya habrá imaginado que cuando un usuario le haga un /ctcp <nick>
hora , usted automáticamente le responda enviándole un query en el que diga por
ejemplo “Son las 19:45:23” . Como ve se pueden usar ‘*’ en el parámetro <texto> para
indicar que si la palabra “hola” del mensaje CTCP viniera precedida de cualquier
otra, o despues de esa palabra hubiera alguna palabra más, se ejcutaría de todas
formas en comando. En este ejemplo en concreto eso no es de mucha utlilidad, pero en
el siguiente si que lo será:
ctcp 1:dime*:*:{
msg $nick Lo siento estoy ocupado
}
Este evento hará que cuando un usuario le envíe un /ctcp DIME , usted le responda
diciendole que está ocupado. Por ejemplo un usuario le podría hacer un /ctcp <sunick>
dime la hora o quizas /ctcp <sunick> dime tu nombre. En cualquier caso la respuesta
será la misma.
Lo que hemos visto hasta ahora se refiere a crear eventos CTCP propios, que no
existían antes en el mIRC y a los que el script responderá de la forma que le hemos
especificado, pero también si quisiera, podría cambiar su respuesta a algunos de los
eventos CTCP ya definidos, como es el caso del PING, para ello tendremos que
especificar al final de los comandos, el comando /halt , por ejemplo:
ctcp 1:PING:*:{
notice $nick Nada de Pings, gracias! | halt
}
Este evento hará que cuando usted reciba un /ctcp ping de algún usuario, le enviará
un /notice diciéndole: “Nada de Pings, gracias!”, y mediante el comando /halt haremos
que el script deje de procesar ese evento, y de esa forma que no procese la parte que
ya estaba hecha en el mIRC (la que nos devuelve el lag). También podríamos usar este
procedimiento para otros CTCPs ya definidos como son TIME, USERINFO ... etc.
Otra utilidad de estos eventos puede ser la de controlar nuestro mIRC “a distancia”,
y me explico, si abrimos dos mIRCs, podremos controlar a uno de ellos mediante CTCPs
mientras que el otro lo controlaremos normalmente, se pueden usar por lo tanto para
controlar a nuestros clones, por ejemplo si copiamos el siguiente código en la
sección Remotes y abrimos dos mIRCs:
ctcp 1:habla*:#:{ /say $1- }
Cuando desde uno de los mIRCs escribamos /ctcp <nick_clon> HABLA <mensaje> el otro
mIRC que hemos abierto enviará el mensaje que pongamos después del “HABLA” al canal,
por ejemplo si ponemos /ctcp <nickclon> habla soy un bot, me manejan con ctcps! hará
que nuestro clon diga ese mensaje al canal.
ctcp 1:quit:*:{ /quit $1- }
Este nuevo ejemplo hará que al recibirlo el CTCP, el clon cierre el mIRC con el
mensaje especificado en /ctcp <nickclon> quit <mensaje_de_quit>
ctcp 1:entra:*:{ /join $1 }
Este hará que el clon entre en el canal que especifiquemos en /ctcp <nickclon> entra
#canal
ctcp 1:comosoy:#:{ /say Me llamo $1 , tengo $2 años y soy $3 }
Este último hará que el clon diga en el canal ese mensaje usando las tres siguientes
palabras que pongamos despues del /ctcp <nickclon> comosoy , por ejemplo si ponemos
/ctcp <nickbot> comosoy Pepe 20 alto , el bot pondrá en el canal “Me llamo Pepe,
tengo 20 años y soy alto”.
Con esto hemos matado dos pájaros de un tiro, no sólo ya sabemos manejar los eventos
CTCP y como evitar las respuestas predeterminadas de algunos de ellos, sino que hemos
aprendido sobre su principal utilidad que es la creación de Clones que obedezcan
nuestras órdenes, tambien conocidos como “bots”.
Antes de pasar a la siguiente sección hay que comentar también que hay un tipo
especial de eventos CTCP que sirven exclusivamente para cambiar la apariencia de las
respuestas estándar de los CTCPs predefinidos en el mIRC... es decir que por ejemplo
cuando usted hace un ping a alguien, ese alguien le devuelve la información del ping,
y usted ve en pantalla algo como:
[TeMpEsT PING reply]: 0 secs
Pero quizás para hacer más bonito el script le gustaría que pusiera:
Lag con TeMpEsT: 0 segundos.
para ello usamos el evento ON CTCPREPLY que tiene la siguiente sintaxis:
on 1:CTCPREPLY:<ctcp>:{ comandos }
Donde <ctcp> pondremos el CTCP predefinido al que nos referimos, y en comandos la
secuencia de comandos que queremos ejecutar. Generalmente para este tipo de acciones
usaremos /echo para poner lineas de texto en pantalla. Vamos a ver como
conseguiriamos hacer que la respuesta del PING nos fuera mostrada como hemos visto
antes, debemos escribir en los “remotes”:
on 1:CTCPREPLY:*PING*:{
%lag = $ctime - $2
echo –s Lag con $nick : %lag
halt
}
Lo que hemos hecho es primero calcular el lag basándonos en a información que nos
devuelve el nick al que le hemos hecho el PING. En este caso nos devuelve: “PING
919197981” . ¿Y que es ese numero tan largo? . Ese numero corresponde a una
referencia de tiempo, indicada como el numero de segundos transcurridos desde el 1
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines