Autor Tema: Capturar todos los nicks de la nicklist  (Leído 243 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ert0s

  • Novato
  • *
  • Mensajes: 21
  • Karma: +1/-0
Capturar todos los nicks de la nicklist
« en: Noviembre 09, 2011, 01:26:10 pm »
hola, mis conocimientos de scripting son algo limitados, mi logica de la programacion es una concreta y aqui os lo voy a poner, quisiera que me comentarais donde esta el problema y como solucionarlo, intento todavia captar la logica del scripting en mirc. Mi intencion es capturar todos los nicks de la nicklist y pasarlos a una variable:

Código: [Seleccionar]
on 1:TEXT:!pru:#:{
  %ncont = 0
  %nicklist
  : inicia
  inc %ncont 1
  if ( %ncont <= $nick(#,0) ){
  %nicklist = %nicklist + $nick(#,%ncont)
  goto inicia
}
: fin
/msg $chan %nicklist
unset %nicklist
unset %ncont
}
Gracias de antemano amigos! :D

Desconectado ert0s

  • Novato
  • *
  • Mensajes: 21
  • Karma: +1/-0
Re:Capturar todos los nicks de la nicklist
« Respuesta #1 en: Noviembre 09, 2011, 06:38:22 pm »
O puedo hacer lo siguiente en la sección remotes:
Código: [Seleccionar]
on 1:TEXT:!pru:#:{ /msg $chan $nckl }y en aliases:
Código: [Seleccionar]
nckl {
  %ncont = 0
  %nicklist
  while ( %ncont <= $nick(#,0) ){
  %nicklist = %nicklist + $nick(#,%ncont)
  inc %ncont 1
}
return = %nicklist
}
Diganme si voy bien encaminado o por el contrario estoy mas perdido que el que se  perdio en la isla  ;D

Desconectado Red_Erik

  • Moderador Global
  • Miembro Senior
  • ****
  • Mensajes: 371
  • Karma: +10/-0
  • Sexo: Masculino
Re:Capturar todos los nicks de la nicklist
« Respuesta #2 en: Noviembre 10, 2011, 12:16:30 am »
En este caso, es preferible usar un while dentro del goto. %ncont debe tener un valor inicial de 1, sino el primer valor que almacene %nicklist sera $nick(canal,0) es decir el número de users en el canal.

on 1:text:!pru:#: {
    %ncont = 1
    :inicia
    %nicklist = %nicklist   $nick(#,%ncont)
    while ( %ncont < $nick(#,0) ) {
      inc %ncont
      goto inicia
    }
    msg $chan %nicklist
    unset %nicklist
    unset %ncont
  }


Este evento responderá a las solicitudes de los demás usuarios (excepto tu mismo) y mostrará la nicklist en el canal. Si quieres que funcione a tus propias peticiones, debes usar un evento ON INPUT, así:

on 1:input:#:{
  if ( $1- == !pru)  {
    %ncont = 1
    :inicia
    %nicklist = %nicklist   $nick(#,%ncont)
    while ( %ncont < $nick(#,0) ) {
      inc %ncont
      goto inicia
    }
    msg $chan %nicklist
    unset %nicklist
    unset %ncont
  }
}


Saludos.

Desconectado ert0s

  • Novato
  • *
  • Mensajes: 21
  • Karma: +1/-0
Re:Capturar todos los nicks de la nicklist
« Respuesta #3 en: Noviembre 10, 2011, 01:02:22 am »
En este caso, es preferible usar un while dentro del goto. %ncont debe tener un valor inicial de 1, sino el primer valor que almacene %nicklist sera $nick(canal,0) es decir el número de users en el canal.

on 1:text:!pru:#: {
    %ncont = 1
    :inicia
    %nicklist = %nicklist   $nick(#,%ncont)
    while ( %ncont < $nick(#,0) ) {
      inc %ncont
      goto inicia
    }
    msg $chan %nicklist
    unset %nicklist
    unset %ncont
  }


Este evento responderá a las solicitudes de los demás usuarios (excepto tu mismo) y mostrará la nicklist en el canal. Si quieres que funcione a tus propias peticiones, debes usar un evento ON INPUT, así:

on 1:input:#:{
  if ( $1- == !pru)  {
    %ncont = 1
    :inicia
    %nicklist = %nicklist   $nick(#,%ncont)
    while ( %ncont < $nick(#,0) ) {
      inc %ncont
      goto inicia
    }
    msg $chan %nicklist
    unset %nicklist
    unset %ncont
  }
}


Saludos.
Gracias por tu respuesta y ahora te comento algunas apreciaciones sobre el codigo.
Entiendo que el primer valor que debe de tener $nick(#,%ncont) es 1 pero eso ya esta reflejado segun la secuencia, es decir %ncont le doi en primer lugar el valor 0 para inicializarlo pero cuando llega a la primera asignacion ya vale 1 puesto que esta incrementado antes del if.
Estoy de acuerdo en poner el while es lo que buscaba y en su momento no lo encontre.

En la linea que pusiste "%nicklist = %nicklist   $nick(#,%ncont) " , me pregunto si concatena la cadena bien puesto que no tiene ningun operador de concatenacion, no lo se.
¿el msg no va con la barra /?
Me aconsejas hacerlo con el on INPUT y segun tengo entendido sirve para introducir texto en una caja de texto y no una ventana, corrigeme si me equivoco, el codigo de todas las formas no me funciona, es decir, no me esta dando el resultado a esperar segun la logica aplicada, pero te agradezco  tu respuesta amigo!  :D

Desconectado Red_Erik

  • Moderador Global
  • Miembro Senior
  • ****
  • Mensajes: 371
  • Karma: +10/-0
  • Sexo: Masculino
Re:Capturar todos los nicks de la nicklist
« Respuesta #4 en: Noviembre 10, 2011, 01:31:53 am »
1. Fíjate que cuando se da valor por primera vez a %nicklist %ncont debe valer ya 1.

2. Para añadir valores a %nicklist no necesitamos operadores, puesto que los valores no van a ser numéricos. Incluso puedes prescindir de los dos unset, ya que estas variables desaparecen tras ejecutarse el evento.

3. Dentro de un script se puede prescindir del commandchar (/)

4. Los eventos ON TEXT no funcionan con tus propios textos, para ello debes usar un evento ON INPUT. Te aconsejo revises los ficheros de ayuda del mIRC, som muy claros en las explicaciones.

5. A mi me funciona perfectamente. Debes pegarlo en un fichero nuevo, bajo el epígrafe remotes.

Desconectado ert0s

  • Novato
  • *
  • Mensajes: 21
  • Karma: +1/-0
Re:Capturar todos los nicks de la nicklist
« Respuesta #5 en: Noviembre 10, 2011, 11:12:24 am »
1. Fíjate que cuando se da valor por primera vez a %nicklist %ncont debe valer ya 1.

2. Para añadir valores a %nicklist no necesitamos operadores, puesto que los valores no van a ser numéricos. Incluso puedes prescindir de los dos unset, ya que estas variables desaparecen tras ejecutarse el evento.

3. Dentro de un script se puede prescindir del commandchar (/)

4. Los eventos ON TEXT no funcionan con tus propios textos, para ello debes usar un evento ON INPUT. Te aconsejo revises los ficheros de ayuda del mIRC, som muy claros en las explicaciones.

5. A mi me funciona perfectamente. Debes pegarlo en un fichero nuevo, bajo el epígrafe remotes.
Te agradezco las puntualizaciones, pero si hago lo siguiente
%ncont = 0
inc %ncont 1
es de suponer que %ncont valdra 1 , no?
Estoy de acuerdo en el punto 2 y el 3, lo desconocia. El punto 4, no se, yo leo lo que pone la ayuda y pone explicitamente una caja de texto y no una ventana, puede ser por algun error mio sin duda. A mi me sigue sin funcionar, tendra algo que ver que sea la version 7.22 de la cual he leido criticas?, los remotes etc.. los pone en una carpeta del [usuario]\appdata\roaming\mirc y no se si guarda algun dato mas de configuracion en el registro, esta version es algo distinta al resto en algunas cosas igual tiene algo que ver con el problema que tengo, si pongo en status //echo -s $script(1) me sale esa carpeta que le he indicado, cualquier modificacion que hago en el remote.ini dentro del programa es reflejado en los resultados, pero de todas formas el texto que me pusiste no me funciona, no le estoy diciendo que sea falso lo que me estas diciendo, entiendeme, intento saber y aprender, no rebatir a los que saben mas que yo. gracias red_erik

Desconectado Red_Erik

  • Moderador Global
  • Miembro Senior
  • ****
  • Mensajes: 371
  • Karma: +10/-0
  • Sexo: Masculino
Re:Capturar todos los nicks de la nicklist
« Respuesta #6 en: Noviembre 10, 2011, 02:51:49 pm »
Hola:

1.- Vale, de acuerdo con el valor de la variable, aunque no entiendo por qué ha de valer primero cero y despues incrementar su valor (por cierto, puedes prescindir también del 1 ya que si no se indica, el incremento es la unidad). En scripting, y en cualquier lenguaje de programación, se trata que el código contenga exáctamente las líneas necesarias para que funcione, ni una más.

2.- Cuando escribes en un canal o en un query, lo haces en la "caja de texto" de la ventana correspondiente. es entonces cuando un evento ON INPUT se ejecuta. Es decir, responde, a diferencia de ON TEXT a tus propios textos.

3.- Copia mi código (elige cual, dependiendo si va a dispararse con tu texto o con el de los otros usuarios).
Abre el editor de scripts pulsando ALT + R.
Pincha en Files y elige New.
Pega el código.
Guarda con Save & Exit.
Debería de funcionar.

4.- Sigue preguntando sin problemas. Eso junto a "enredar" y "cargarse scripts" es la mejor forma de aprender. Un saludo.

Desconectado ert0s

  • Novato
  • *
  • Mensajes: 21
  • Karma: +1/-0
Re:Capturar todos los nicks de la nicklist
« Respuesta #7 en: Noviembre 10, 2011, 07:10:25 pm »
Hola:

1.- Vale, de acuerdo con el valor de la variable, aunque no entiendo por qué ha de valer primero cero y despues incrementar su valor (por cierto, puedes prescindir también del 1 ya que si no se indica, el incremento es la unidad). En scripting, y en cualquier lenguaje de programación, se trata que el código contenga exáctamente las líneas necesarias para que funcione, ni una más.

2.- Cuando escribes en un canal o en un query, lo haces en la "caja de texto" de la ventana correspondiente. es entonces cuando un evento ON INPUT se ejecuta. Es decir, responde, a diferencia de ON TEXT a tus propios textos.

3.- Copia mi código (elige cual, dependiendo si va a dispararse con tu texto o con el de los otros usuarios).
Abre el editor de scripts pulsando ALT + R.
Pincha en Files y elige New.
Pega el código.
Guarda con Save & Exit.
Debería de funcionar.

4.- Sigue preguntando sin problemas. Eso junto a "enredar" y "cargarse scripts" es la mejor forma de aprender. Un saludo.
He puesto:
Código: [Seleccionar]
on 1:INPUT:#:{
  if ( $1- == !pru )  {
    %ncont = 1
    :inicia
    %nicklist = %nicklist   $nick(#,%ncont)
    while ( %ncont < $nick(#,0) ) {
      inc %ncont
      goto inicia
    }
    msg $chan %nicklist
  }
}

on 1:TEXT:!pru:#:{
  %ncont = 1
  :inicia
  %nicklist = %nicklist $nick(#,%ncont)
  while ( %ncont < $nick(#,0) ) {
    inc %ncont
    goto inicia
  }
  msg $chan %nicklist
  unset %nicklist
  unset %ncont
}
y por fin me responde, al TEXT, exactamente no se la diferencia entre INPUT y TEXT, en el punto 1 no puedo estar mas de acuerdo contigo. El punto 2 que me comentas, lo desconocia, gracias por la aclaracion  ;) y el punto 4 sobran comentarios, solo agradecerte la paciencia que has tenido, ya crei que me volvia loco. ;D

Desconectado Red_Erik

  • Moderador Global
  • Miembro Senior
  • ****
  • Mensajes: 371
  • Karma: +10/-0
  • Sexo: Masculino
Re:Capturar todos los nicks de la nicklist
« Respuesta #8 en: Noviembre 10, 2011, 10:02:30 pm »
Pues la diferencia es enorme. Supongo que estás trabajando con dos mIRC abiertos, y uno hace de bot, que es donde pones el script. Entonces cuando los demás usuarios (o tu desde el otro mIRC) ponen !pru se muestra en el canal la userlist. ¿Correcto? ahora prueba a escribir !pru desde el mIRC donde corre el script, es decir desde el bot. No pasa nada porque el remote no responde a textos propios. Para ello se usa ON TEXT. Por eso preguntaba si el evento va a funcionar para que lo disparen otros usuarios (ON TEXT) o para que lo dispares tú (ON INPUT) pero asume que cuando digo TU me refiero al mIRC donde corre el script, no tú desde otro mIRC conectado al mismo canal.

Es como cuando queremos, por ejemplo, que mIRC nos dé @ al escribir !op. Esto no funcionará nunca con un evento ON TEXT, porque ese tipo de eventos ignora lo que nosotros escribamos. Necesitamos usar un ON INPUT, que evalua nuestro texto (lo que escribimos en al caja del canal o privado). Saludos

Desconectado ert0s

  • Novato
  • *
  • Mensajes: 21
  • Karma: +1/-0
Re:Capturar todos los nicks de la nicklist
« Respuesta #9 en: Noviembre 10, 2011, 11:34:43 pm »
Pues la diferencia es enorme. Supongo que estás trabajando con dos mIRC abiertos, y uno hace de bot, que es donde pones el script. Entonces cuando los demás usuarios (o tu desde el otro mIRC) ponen !pru se muestra en el canal la userlist. ¿Correcto? ahora prueba a escribir !pru desde el mIRC donde corre el script, es decir desde el bot. No pasa nada porque el remote no responde a textos propios. Para ello se usa ON TEXT. Por eso preguntaba si el evento va a funcionar para que lo disparen otros usuarios (ON TEXT) o para que lo dispares tú (ON INPUT) pero asume que cuando digo TU me refiero al mIRC donde corre el script, no tú desde otro mIRC conectado al mismo canal.

Es como cuando queremos, por ejemplo, que mIRC nos dé @ al escribir !op. Esto no funcionará nunca con un evento ON TEXT, porque ese tipo de eventos ignora lo que nosotros escribamos. Necesitamos usar un ON INPUT, que evalua nuestro texto (lo que escribimos en al caja del canal o privado). Saludos
Mas dejado de piedra tio, es asi como tal dices tu, lo he comprobado insitu jeje, te agradezco mucho tus palabras, me han servido de mucha ayuda, almenos ahora conozco un poco mejor el comportamiento de estas dos "on" tan importantes para este programa de IRC. saludos cordiales! hasta la proxima duda! ;D