Autor Tema: Limite de usuarios.  (Leído 1524 veces)

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

Desconectado rayco

  • Miembro Junior
  • **
  • Mensajes: 82
  • Karma: +1/-73
Re:Limite de usuarios.
« Respuesta #15 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!

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 198
  • Karma: +240/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Limite de usuarios.
« Respuesta #16 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

Desconectado rayco

  • Miembro Junior
  • **
  • Mensajes: 82
  • Karma: +1/-73
Re:Limite de usuarios.
« Respuesta #17 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.
« última modificación: Marzo 04, 2021, 07:13:56 am por rayco »

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 198
  • Karma: +240/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Limite de usuarios.
« Respuesta #18 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

Desconectado rayco

  • Miembro Junior
  • **
  • Mensajes: 82
  • Karma: +1/-73
Re:Limite de usuarios.
« Respuesta #19 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.

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 198
  • Karma: +240/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Limite de usuarios.
« Respuesta #20 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.

Desconectado rayco

  • Miembro Junior
  • **
  • Mensajes: 82
  • Karma: +1/-73
Re:Limite de usuarios.
« Respuesta #21 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.

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 198
  • Karma: +240/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Limite de usuarios.
« Respuesta #22 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
}

Desconectado rayco

  • Miembro Junior
  • **
  • Mensajes: 82
  • Karma: +1/-73
Re:Limite de usuarios.
« Respuesta #23 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.
« última modificación: Marzo 04, 2021, 08:25:02 am por rayco »

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 198
  • Karma: +240/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Limite de usuarios.
« Respuesta #24 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

Desconectado rayco

  • Miembro Junior
  • **
  • Mensajes: 82
  • Karma: +1/-73
Re:Limite de usuarios.
« Respuesta #25 en: Marzo 04, 2021, 09:28:40 am »
Buenas.

Ahora si funciona perfectamente, infinitamente las gracias!!!

PD: Voto para ti  ;D

 

anything