Responder al mensaje

Advertencia - mientras estabas leyendo, fueron publicadas 16 respuestas. Probablemente desees revisar tu mensaje.

Nota: este mensaje no se mostrará hasta que sea aprobado por un moderador.

Nombre:
Email:
Asunto:
Icono del mensaje:

Verificación:
Escribe las letras mostradas en la imagen
Escuchar el texto / Solicitar otra imagen

Escribe las letras mostradas en la imagen:
¿Cuánto es uno más uno? (en letra y en minúscula):

teclas método abreviado (sólo IE y Mozilla): presiona alt+s para enviar formulario/publicar o alt+p para previsualizar


Sumario de Temas

Publicado por: rayco
« en: Marzo 04, 2021, 09:28:40 am »

Buenas.

Ahora si funciona perfectamente, infinitamente las gracias!!!

PD: Voto para ti  ;D
Publicado por: Quetzalcoatl
« en: Marzo 04, 2021, 09:03:15 am »

Tienes toda la razón rayco

No había advertido ese detalle como mencione no los había probado, pero cuando entras a un canal el cliente te marca como único usuario,  hasta después que llega el raw 353 que es el que va agregando los usuarios al canal. Bastaría entonces solo poner un seguro para que cuando entre no actué de inmediato, por lo tanto seria un if que compararía que quien entro no es uno mismo

if ($nick == $me) { return }

y te quedaria algo como...
Código: [Seleccionar]
on *:join:#canal:{
  if ($nick == $me) { return }
  ; -- Crear 3 variables. Para identificar mejor los usuarios del canal, el máximo que deben tener(10 en 10)
  var %usuarios $nick($chan,0), %limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))
  ; -- la variable del valor de +l si es que existe un modo en el canal.
  var %l.modo $gettok($chan($chan).mode,2,32)
  echo $chan --> [codigo]-LIMITES Usuarios ==> %usuarios Limite.Max ==> %limite.max
  ; -- si no tiene modo lo pone al max, de +10 y termina.
  if ($chr(108) !isin $chan($chan).mode) { mode $chan +l %limite.max | return }
/*
 Si hay un limite donde los usuarios sean diferente al limite max, entonces hace cambios es decir si +l=20 y los usuarios son 19
 el %limite.max sera 20, no hará nada pero si son +l=20 y el %limite.max es 30, cambiara a +l=30, esto es debido a que la variable
 de %limite.max siempre va de 10 en 10 dependiendo de los usuarios, si son 4, el valor sera 10, si son 9 sera  10 y si son 10 serán 20
*/
  if (%l.modo != %limite.max) { mode $chan +l %limite.max }
}

Saludos
Publicado por: rayco
« en: Marzo 04, 2021, 08:09:39 am »

Buenas de nuevo.

Sigue pasando que cuando entra el bot directamente pone el límite a 10 usuarios.

Citar
08:06a –›      Join: Botocito [ B@Botocito.del.canal ]
08:06a –›      glencoe.chathispano.com pone modo +o Botocito
08:06a –›      Botocito pone modo +l 10

Por lo demás funciona perfectamente

Código:

Código: [Seleccionar]
on *:join:#canal:{
  ; -- Crear 3 variables. Para identificar mejor los usuarios del canal, el maximo que deben tener(10 en 10)
  var %usuarios $nick($chan,0), %limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))
  ; -- la variable del valor de +l si es que existe un modo en el canal.
  var %l.modo $gettok($chan($chan).mode,2,32)
  ; -- si no tiene modo lo pone al max, de +10 y termina.
  if ($chr(108) !isin $chan($chan).mode) { mode $chan +l %limite.max | return }
/*
 Si hay un limite donde los usuarios sean diferente al limite max, entonces hace cambios es decir si +l=20 y los usuarios son 19
 el %limite.max sera 20, no hará nada pero si son +l=20 y el %limite.max es 30, cambiara a +l=30, esto es debido a que la variable
 de %limite.max siempre va de 10 en 10 dependiendo de los usuarios, si son 4, el valor sera 10, si son 9 sera  10 y si son 10 serán 20
*/
  if (%l.modo != %limite.max) { mode $chan +l %limite.max }

echo $chan --> [codigo]-LIMITES Usuarios ==> %usuarios Limite.Max ==> %limite.max
}

Saludos.
Publicado por: Quetzalcoatl
« en: Marzo 04, 2021, 07:55:33 am »

el echo va dentro del codigo.
Código: [Seleccionar]
on *:join:#canal:{
  ; -- Crear 3 variables. Para identificar mejor los usuarios del canal, el maximo que deben tener(10 en 10)
  var %usuarios $nick($chan,0), %limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))
  ; -- la variable del valor de +l si es que existe un modo en el canal.
  var %l.modo $gettok($chan($chan).mode,2,32)
  ; -- si no tiene modo lo pone al max, de +10 y termina.
  if ($chr(108) !isin $chan($chan).mode) { mode $chan +l %limite.max | return }
/*
 Si hay un limite donde los usuarios sean diferente al limite max, entonces hace cambios es decir si +l=20 y los usuarios son 19
 el %limite.max sera 20, no hará nada pero si son +l=20 y el %limite.max es 30, cambiara a +l=30, esto es debido a que la variable
 de %limite.max siempre va de 10 en 10 dependiendo de los usuarios, si son 4, el valor sera 10, si son 9 sera  10 y si son 10 serán 20
*/
  if (%l.modo != %limite.max) { mode $chan +l %limite.max }

echo $chan --> [codigo]-LIMITES Usuarios ==> %usuarios Limite.Max ==> %limite.max
}
Publicado por: rayco
« en: Marzo 04, 2021, 07:46:20 am »

Buenos días.

tras la comprobación:

Cuando pongo: /echo $chan --> [codigo]-LIMITES Usuarios ==> %usuarios Limite.Max ==> %limite.max

Sale esto: --> [codigo]-LIMITES Usuarios ==> Limite.Max ==>

Un saludo.
Publicado por: Quetzalcoatl
« en: Marzo 04, 2021, 07:38:54 am »

No deberia hacer eso. Todo esta en relación a estas variables
%usuarios y %limite.max
y si te fijas el limite max siempre va arriba a 10, pero puedes ver que esta sucediendo poniéndole un echo.

Código: [Seleccionar]
echo $chan --> [codigo]-LIMITES Usuarios ==> %usuarios Limite.Max ==> %limite.max
ponlo después de asignar las variables, o al final, para revisarlas, ya que debería si hay 50 debe pasarlos directo a 60 en el limite.
Publicado por: rayco
« en: Marzo 04, 2021, 07:27:23 am »

Buenos días.

Está bien y funciona lo que ocurre que cuando entra al canal, a lo mejor hay 50 usuarios y pone el límite a 10.

¿Existiría una forma de modificar eso?

O sea, que ponga directamente un límite si hay 50 usuarios cuando el bot entre lo ponga a 60

¿Me explico?

Saludos.
Publicado por: Quetzalcoatl
« en: Marzo 04, 2021, 07:23:54 am »

El ultimo el limite lo asigna la variable

%limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))

lo que hace es que la base le agrega diez, es decir si son 5 usuarios el limite maximo es de 10, si son 9, el limite max es de 10 si fueran 10, sube a 20 es decir:

Usuarios  limite maximo
1 a 9 ------> 10
10 a 19 ---> 20
20 a 29 ---> 30
y así sucesivamente

Basado en lo anterior el limite lo pone en relación máxima al valor dependiendo de los usuarios, independiente si existe o no un limite en el canal este sera asignado.
No se si es a lo que te referías en tu primer pregunta.

Saludos
Publicado por: rayco
« en: Marzo 04, 2021, 07:08:00 am »

Buenos días.

El último me convence mucho más, que para cambiar el modo debe estar al máximo.

Una pregunta igual yo no lo veo ¿Dónde está puesto el límite?

A este me refiero:

Código: [Seleccionar]
on *:join:#canal:{
  ; -- Crear 3 variables. Para identificar mejor los usuarios del canal, el maximo que deben tener(10 en 10)
  var %usuarios $nick($chan,0), %limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))
  ; -- la variable del valor de +l si es que existe un modo en el canal.
  var %l.modo $gettok($chan($chan).mode,2,32)
  ; -- si no tiene modo lo pone al max, de +10 y termina.
  if ($chr(108) !isin $chan($chan).mode) { mode $chan +l %limite.max | return }
/*
 Si hay un limite donde los usuarios sean diferente al limite max, entonces hace cambios es decir si +l=20 y los usuarios son 19
 el %limite.max sera 20, no hará nada pero si son +l=20 y el %limite.max es 30, cambiara a +l=30, esto es debido a que la variable
 de %limite.max siempre va de 10 en 10 dependiendo de los usuarios, si son 4, el valor sera 10, si son 9 sera  10 y si son 10 serán 20
*/
  if (%l.modo != %limite.max) { mode $chan +l %limite.max }
}

Saludos.
Publicado por: Quetzalcoatl
« en: Marzo 01, 2021, 10:40:42 pm »

rayco Cuando el número de usuarios en el canal, sea menor a 100 pondrá el limite en 100, de lo contrario  el numero de usuarios en +10(cada ves que exista una entrada nueva, siendo igual o superior a 100 usuarios en el canal).

Toma en cuenta que si es muy concurrido estará modificando el limite constantemente, por eso eran los if's de si no existe limite que lo ponga en 100 y si existe el limite pero esta en un número mayor o menor a 100. (siendo que en usuarios menor a 100 no se verán los cambios de limite en el canal, pero si se estarán mandando)

quizás lo visualices mejor si se comentan las lineas:
Código: [Seleccionar]
on *:join:#canal:{
  ; -- si la cantidad de usuarios es menor a 100 entonces entra en el primer if
  if ($nick($chan,0) < 100) {
    ; -- si No existe un limite en el canal(+l) lo coloca en 100
    if ($chr(108) !isin $chan($chan).mode) { mode $chan +l 100 }
    ; -- de lo contrario, existe el limite pero es superior a 100 y los usuarios
    ; -- en el canal son menos de 100 en el canal evaluados en el primer if, hace el cambio
    else {
      if ($gettok($chan($chan).mode,2,32) > 100) { mode $chan +l 100 }
      ; -- notese que no se toma si es igual a 100
    }
    ; -- cierre del primer if
  }
  /*
  de lo contrario si es que son mas de 100 en el canal, hace un incremento de 10
  pero el incremento lo hace en un periodo de un seg por entrada, pero si entran
  2 usuarios uno detrás de otro en un limite de 110, cada segundo hará el incremento.
  tal ves sea mejor poner un delay más amplio y considerar si los usuarios son están
  en un rango del limite de 1, es decir si el limite max del canal y usuarios son 1 de diferencia.
  */
  else { .timerSube_Limite $+ $chan 1 1 mode $chan +l $calc($nick($chan,0) + 10) }
}

mientras que:
Código: [Seleccionar]
on *:join:#canal:{
  ; -- cuando los usuarios del canal son menores a 100, pone un limite en el canal en 100
  ; -- sin importar si tiene o no limite el canal
  if ($nick($chan,0) < 100) { mode $chan +l 100 }
  ; -- de lo contrario sube el limite en usuarios del canal(+l) de 10 en 10,
  ; -- si están 101 usuarios pasara el limite a 111 y si entra otro pasara a 112, sucesivamente.
  else { .timerSube_Limite $+ $chan 1 1 mode $chan +l $calc($nick($chan,0) + 10) }
}
Siendo que en ambos código el ultimo else, podría, hacer el cambio si estuvieran 109 usuarios pasen a 120, pero si son 108 se mantendrá en 110
así que si fueran 115 usuarios en sala se mantendrá en 120, pero si el limite esta en 100 y son más 100 usuarios, pondrá un limite de 110
hasta que llegue a una cantidad de usuarios de 109, incrementara a 120
Código: [Seleccionar]
else {
if ($calc($gettok($chan($chan).mode,2,32) - $nick($chan,0)) <= 1) { .timerSube_Limite $+ $chan 1 3 mode $chan +l $calc($nick($chan,0) + 11) }
}
el timer se dejo con un retraso de 3, para evitar join masivos para que no cambie el limite muy rápido.

Aunque si lo miras con atención, y solo pusieras el if, quizás también fuese una solución simple, debido a que siempre que el limite este a diferencia de menor o igual a 1, pondrá un limite de +11, como dije arriba en valores de 100 en adelante, pero si fuera un canal con 35 usuarios con un limite 40, no pasaría nada, hasta que subieran a 39, el problema seria si se quedara en 40 el limite y los usuarios bajaran a 15

rayco Debo hacer notar que solo me he basado en los códigos que pusiste así como el de _M3xiC4n0_

yo lo que haria seria:
Código: [Seleccionar]
on *:join:#canal:{
  ; -- Crear 4 variables. Para identificar mejor los usuarios del canal, el maximo que deben tener(10 en 10)
  var %usuarios $nick($chan,0), %limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))
  ; -- limite maximo a 100 y la variable del valor de +l si es que existe un modo en el canal.
  var %limite 100, %l.modo $gettok($chan($chan).mode,2,32)

  ;---- Inicio de los if's
  ; -- si son menos de 100 los usuarios entonces
  if (%usuarios < %limite) {
    ; -- si existe un limite en el canal y es el mismo que el limite de 100, va al final y no hara nada
    if (%l.modo = %limite) { goto fin }
    ; -- pero si no existe el limite en el modo del canal y siendo menores a 100, se va al timer para asignarlo.
    goto L1
  }
  /*
  a partir de aquí serán más de 100 los usuarios del canal, es decir que:
  si son más de 100 y existe el modo de +l, pero esta cercano a cumplirse
  digamos que 109 usuarios y con el canal en +l 110, entonces pasara a 120, en caso
  de que no exista un limite en el canal lo asignara. Usuarios +10 y redondeados a su máximo de 10 en 10
  pero si son 108 y el limite del canal en 110, pasara al fin, sin modificar el modo del canal.
  */
  if ($calc(%l.modo - %usuarios) <= 1) { %limite = %limite.max | goto L1 }
  ; -- Pero si existe un modo con limite igual al máximo permitido, ira directo al final.
  if (%l.modo = %limite.max) { goto fin }
  :L1
  .timerSube_Limite $+ $chan 1 3 mode $chan +l %limite
  :FIN
}

Esto ultimo esta escrito solo de forma empírica, por lo que No lo he probado y la variable %limite seria la base del control, es decir que tu base de usuarios no quieras que sea a partir de 100, sino que sea a 50 u otro. De todas maneras están los comentarios por si surgiera una duda de algo no contemplado, que son los que alargan el código  :-X

uno más simple sin limite base y que va a variando de cada 10 cuando se llega al máximo de usuarios es
Código: [Seleccionar]
on *:join:#canal:{
  ; -- Crear 3 variables. Para identificar mejor los usuarios del canal, el maximo que deben tener(10 en 10)
  var %usuarios $nick($chan,0), %limite.max $iif(!$mid(%usuarios,-2),10,$mid($calc(%usuarios +10),1,-1) $+ 0))
  ; -- la variable del valor de +l si es que existe un modo en el canal.
  var %l.modo $gettok($chan($chan).mode,2,32)
  ; -- si no tiene modo lo pone al max, de +10 y termina.
  if ($chr(108) !isin $chan($chan).mode) { mode $chan +l %limite.max | return }
/*
 Si hay un limite donde los usuarios sean diferente al limite max, entonces hace cambios es decir si +l=20 y los usuarios son 19
 el %limite.max sera 20, no hará nada pero si son +l=20 y el %limite.max es 30, cambiara a +l=30, esto es debido a que la variable
 de %limite.max siempre va de 10 en 10 dependiendo de los usuarios, si son 4, el valor sera 10, si son 9 sera  10 y si son 10 serán 20
*/
  if (%l.modo != %limite.max) { mode $chan +l %limite.max }
}

Basado en el anterior, igual sin probar.

Saludos rayco
Publicado por: rayco
« en: Marzo 01, 2021, 12:53:50 pm »

Buenas tardes.

Pero si quito:  && ($gettok($chan(#chan).mode,2,32) > 100)

Y dejo el código:

Código: [Seleccionar]
on *:join:#canal:{
  if ($nick($chan,0) < 100) { mode $chan +l 100 }
  else { .timerSube_Limite $+ $chan 1 1 mode $chan +l $calc($nick($chan,0) + 10) }
}

Cuando baje de 100 usuarios, se vuelve poner el límite a 100? o se deja si el límite estaba en 110 por la subida de usuarios?

¡Gracias!
Publicado por: Quetzalcoatl
« en: Marzo 01, 2021, 12:02:11 am »

Eso debe funcionarte, ya que previamente no se había mencionado que si el canal no tuviera el limite lo asignara.

le falta un cierre de paréntesis en la condición

Código: [Seleccionar]
if (($chr(108) isin $chan($chan).mode) && ($gettok($chan(#chan).mode,2,32) > 100)) { mode $chan +l 100 }

la otra condición(del anterior post con <) es cuando el numero +l sea menor a 100, ejemplo que sea un #prueba +ntl 30 lo pondria a 100, pero como estaba en un inicio,  es lo que te cumple las condición de que si el numero de usuarios en el canal es menor a 100 y existe un limite que esta en mas de 100(#pueba +ntl 120) te lo reajuste a 100.

Código: [Seleccionar]
on *:join:#canal:{
  if ($nick($chan,0) < 100) {
    if ($chr(108) !isin $chan($chan).mode) { mode $chan +l 100 }
    if (($chr(108) isin $chan($chan).mode) && ($gettok($chan($chan).mode,2,32) > 100)) { mode $chan +l 100 }
   
  }
  else { .timerSube_Limite $+ $chan 1 1 mode $chan +l $calc($nick($chan,0) + 10)
  }
}

Igual puedes quitar el && ($gettok($chan(#chan).mode,2,32) > 100)
para solo te lo asigne a 100, si es que no quieres que si tenga un limite superior o inferior pre asignado, solo que cumpla la condición de que ya tenga un limite, ya que el disparador seria el primer if de
  if ($nick($chan,0) < 100)


Código: [Seleccionar]
on *:join:#canal:{
  if ($nick($chan,0) < 100) { mode $chan +l 100 }
  else { .timerSube_Limite $+ $chan 1 1 mode $chan +l $calc($nick($chan,0) + 10) }
}

Que prácticamente seria casi el que pusiste en un inicio. :P

saludos rayco
Publicado por: rayco
« en: Febrero 28, 2021, 10:49:25 pm »

Buenas noches.

Va perfecto, pero me he dado cuenta que cuando baja de 100 usuarios el canal, el límite no lo pone en 100 si no, en el límite que puso anteriormente.

O sea, si lo pone el límite 110 usuarios porque llegaron a 100 usuarios, y si baja los usuarios del canal a 99 sigue teniendo el límite a 110 (y me gustaría en ese caso que lo vuelva a poner en 100).

¿me explico?

Código: [Seleccionar]
on *:join:#canal:{
  if ($nick($chan,0) < 100) {
    if ($chr(108) !isin $chan($chan).mode) { mode $chan +l 100 }
    if (($chr(108) isin $chan($chan).mode) && ($gettok($chan($chan).mode,2,32) < 100)) { mode $chan +l 100 }
   
  }
  else { .timerSube_Limite $+ $chan 1 1 mode $chan +l $calc($nick($chan,0) + 10)
  }
}

Muchisimas gracias!  ;D
Publicado por: hank
« en: Febrero 26, 2021, 08:51:51 pm »

Buenas noches.

Pues sinceramente no me he enterado de nada xDDDDDD

¿Cómo podría añadir o hacer esa if para que compruebe si está el límite?

¿Y si no está, que lo ponga?

Muchas gracias!
Publicado por: Quetzalcoatl
« en: Febrero 26, 2021, 07:06:27 pm »

Solo se tendría que meter un if para verificar si, NO existe el limite (mode +l)

Código: [Seleccionar]
if ($chr(108) !isin $chan($chan).mode) { mode $chan +l 100 }
la inserción de esa linea depende a criterio y seria antes o después de (<--- solo una ves en el código a elección)
  if ($nick($chan,0) < 100) {

antes obligara a que siempre, que entre un nick verifique si el limite esta en el canal y si no esta un limite definido previamente, entonces lo pondrá por defecto a 100
si se coloca después, solo se verificara la condición anterior cuando exista un limite inferior a 100