Autor Tema: Antispam  (Leído 422 veces)

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

Desconectado Hanna

  • Miembro Junior
  • **
  • Mensajes: 81
  • Karma: +14/-5
Antispam
« en: Marzo 09, 2021, 07:38:17 pm »
Mira hice un pequeño código para luchar contra el spam:

Código: [Seleccionar]
on 1:text:*http*:#:{
if ($me isop $chan) && ($nick !isop $chan) && ($nick !isvoice $chan) && ($chan == #) {
mode # +b $address($nick,2) | /kick # $nick Publicidad no permitida en el canal | .timer 1 600 mode # -b $address($nick,2)  | msg #canaldebug Web: Expulsando a $nick ( $address ) por : $1-
}
}

on 1:text:*www*:#:{
if ($me isop $chan) && ($nick !isop $chan) && ($nick !isvoice $chan) && ($chan == #) {
mode # +b $address($nick,2) | /kick # $nick Publicidad no permitida en el canal | .timer 1 600 mode # -b $address($nick,2)  | msg #canaldebug Web Expulsando a $nick ( $address ) por : $1-
}
}

Lo que me gustaría es añadir un modulo para excluir webs.

tipo: !addspam *youtube*com*

y si ponen un youtube lo excluya y no lo expulse.

¿Es posible hacerlo?

¡Muchas gracias!

Desconectado Hanna

  • Miembro Junior
  • **
  • Mensajes: 81
  • Karma: +14/-5
Re:Antispam
« Respuesta #1 en: Marzo 19, 2021, 03:57:06 am »
Hola

Nadie puede ayudarme?  :(

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 195
  • Karma: +239/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Antispam
« Respuesta #2 en: Marzo 19, 2021, 07:19:16 am »
Lo que pasa es que es un poco ambiguo lo que pides, por lo menos yo no entendí en si lo que requieres.

Si es que quieres que exista un evento aparte que cuando quieras agregar una palabra en excepción lo ejecutes desde un comando como
!addspam *youtube*com*
y esa palabra sea la excepción ?
o que en tu cliente teclees eso para que un bot lo tome como excepción?
En ambos casos se requiere que se cree un archivo, ya que se manejarían varias palabras o utilizar una variable para guardar tales.

Cuando mencionas un modulo, te refieres a una pantalla de GUI(obviamente por que es el foro IRCap) o a un dialog? o que si es por bot sea por medio de un comando o que sea por medio de un socket que envié y después lea desde una url?

Saludos

Pd: el código que pusiste de los eventos es para que se basen en ellos o se puede resumir todo en uno, si es que lo usaras en tu cliente o bot?, de ser asi, entonces ya seria un addon??

Desconectado Hanna

  • Miembro Junior
  • **
  • Mensajes: 81
  • Karma: +14/-5
Re:Antispam
« Respuesta #3 en: Marzo 19, 2021, 07:03:15 pm »
Hola.

Si, es un código que tengo en el bot, y me gustaría que se pudieran añadir direcciones en excepciones.

que si pongo: .addexspam *you*tube* (si ponen un link de youtube el bot no lo detecte como spam)

porque como hice yo el código todo lo que ponga "www" o "http" le da caza como spam, por eso me gustaría hacer algo, que segun que webs o palabras no las detecte como spam.

como el ejemplo que puse arriba de youtube.

Saludos.

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 195
  • Karma: +239/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Antispam
« Respuesta #4 en: Marzo 20, 2021, 03:02:19 am »
Bueno creo que entiendo, aunque usar dos eventos para www y http, se podría usar uno solo especificando ya sea con regex o un arreglo en el mismo evento así como tú especificación con comodines, en el manual de ayuda que trae el mirc, esta muy bien explicado ese tema y de paso en la sanciones quitar tres comandos de mode kick y timer, para usar solo el comando de ban -kuN

Se me ocurriría hacerlo rápido de esta manera, son 11 lineas pero sin los comentarios son 6
Código: [Seleccionar]
on *:TEXT:*:#: {
  ; === si el nick no es un nick regular(@,v) entonces termina
  if (!$nick(#,$nick,r)) { return }
  ; === si la cadena de texto tiene algún tipo de spam, entrara
  if ($regex($strip($1-),/\b(?:http|www|com|org|net)\b/i)) {
    ; === si contiene un link con youtube. o youtu.be termina, de lo contrario sanciona.
    if ($regex($strip($1-),/\b(?:youtube.|youtu.be)\b/i)) { return }
    ban -ku600 $chan $nick 2 Publicidad no permitida en el canal | msg #canaldebug Web Expulsando a $+($nick,$chr(40),$address,$chr(41)) por : $1-
  }
}

Siendo que requieres que sea un poco dinámico y agregar las excepciones por un evento de :text: podría usarse el mismo evento, desecharíamos la parte de la excepción manual de
Código: [Seleccionar]
    if ($regex($strip($1-),/\b(?:youtube.|youtu.be)\b/i)) { return }y agregaríamos el comando de .addexspam, el cual me parece que solo va en una dirección, pero y que tal si te equivocas al agregar la palabra por X causa, entonces se agregaría otro comando para quitarla y también uno mas para verificación. Lo ideal seria usar el mismo, pero con parámetros de +, - y ?, en donde:
+ = agrega palabra
- = elimina la palabra
? = muestra la lista de excepciones
Una ves explicado eso, nos quedaría algo como:
Código: [Seleccionar]
on *:TEXT:*:#: {
  ; == Aquí se agregaran las excepciones, el nick debe ser op en el canal e iniciar con .addexspam la frase
  if (($nick isop $chan) && (.addexspam == $strip($1))) { var %a $left($2,1), %b $right($2,-1)
    if ((+ = %a) ||  (%a = -) || (%a = ?)) { goto %a
      :+
      if ($istok(%excepciones.spam,%b,32)) { .notice $nick ya esta agregada %b en las excepciones }
      else { set %excepciones.spam $addtok(%excepciones.spam,%b,32) | .notice $nick fue agregado %b $+, compruébelo usando: .addexspam ? }
      return
      :-
      if (!$istok(%excepciones.spam,%b,32)) { .notice $nick No esta agregada %b en las excepciones }
      else { set %excepciones.spam $remtok(%excepciones.spam,%b,32) | .notice $nick fue eliminado %b $+, compruébelo usando: .addexspam ? }
      return
      :? | .notice $nick Las excepciones son: %excepciones.spam | return
    }
    else { .notice $nick Por favor $nick use: .addexspam (?/+/-)la*pabra (se permite el uso de comodines *) | return }
  }
  ; === si el nick no es un nick regular(@,v) entonces termina
  if (!$nick(#,$nick,r)) { return }
  ; === si la cadena de texto tiene algún tipo de spam, entrara
  if ($regex($strip($1-),/\b(?:http|www|com|org|net)\b/i)) {
    ; === revisa si esta la excepción y si lo esta sale
    var %a 1 | while ($gettok(%excepciones.spam,%a,32)) { if ($wildtok($strip($1-),$ifmatch,0,32)) { return } | inc %a }
    ; === No se encontró una excepción, procede a sancionar.
    ban -ku600 $chan $nick 2 Publicidad no permitida en el canal | msg #canaldebug Web Expulsando a $+($nick,$chr(40),$address,$chr(41)) por : $1-
  }
}
;EOF

El nick que usa el comando siempre debe ser op en el canal, para poder modificar las excepciones.
Para agregar una palabra seria con .addexspam +*you*tube* (si ya esta agregada nos notifica)
Para quitar una palabra seria con .addexspam -*youtu.be* (si NO esta agregada nos notifica)
Para ver la lista de excepciones con .addexspam ?

Ya para concluir debo hacer notar que si estas armando un bot, para la moderación lo ideal sera poner todas las protecciones en un evento :text:, y ya sea mediante el uso de eventos signal o alias especificar las otras protecciones(malaspalabras, spam, repeticiones, colores,flood, etc) y para controlar usar un nivel de operador en otro evento distinto de TEXT, por ejemplo on 100:text:, con el fin de controlar el bot.

Saludos

PD:Por lo general en cada red si es grande, hay canales de #scripting y/o #msl, seria bueno pasar a darse una vuelta y saludar, en ocasiones es más rápido tener una respuesta o sugerencias con respecto a la programación en msl.

Desconectado Hanna

  • Miembro Junior
  • **
  • Mensajes: 81
  • Karma: +14/-5
Re:Antispam
« Respuesta #5 en: Marzo 20, 2021, 07:45:48 pm »
Buenas tardes!

Muchísimas gracias por la explicación, pero me surgen dudas.

Código: [Seleccionar]
1-  on *:TEXT:*:#: {  --> si solo fuera en un canal podría poner #canal y si son varios lo dejo así no?

2- ¿Y si quiero que solo puedan hacerlo gente de cierto nivel en el bot? ¿Cómo podría hacerlo?

¡Gracias!  ;D

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 195
  • Karma: +239/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Antispam
« Respuesta #6 en: Marzo 20, 2021, 09:34:18 pm »
Bueno eso

Código: [Seleccionar]
on *:TEXT:*:#: {
te permite ponerlo en todos, si quieres especificar el canal pudiera ser agregándolo en esa parte o poner una variable que modifique los canales o meterla abajo con un if de comparación si es un canal asignado si no que regrese, ejemplos:
Código: [Seleccionar]
on *:TEXT:*:#canal1: {para un solo canal seria
Código: [Seleccionar]
on *:TEXT:*:#: {
if ($chan != %canales-donde.el.bot.trabajara) { return }
;codigos abakjo
bla bla bla bla
}
para varios canales entonces...
Código: [Seleccionar]
on *:TEXT:*:#: {
if ($chan !isin %canales-donde.el.bot.trabajara) { return }
;codigos abakjo
bla bla bla bla
}

Y así otros mas ejemplos que pudieran darse, con respecto al punto dos, pues tendrías que trabajar con el comando auser para agregar usuarios con nivel y usar entonces el evento con un nivel ejemplo si das un nivel de 120 como los que pueden agregar seria como

Código: [Seleccionar]
on 120:TEXT:*:#: {
  ; == Aquí se agregaran las excepciones, el nick debe ser op en el canal e iniciar con .addexspam la frase, ya no requiere ser op del canal
  if (.addexspam == $strip($1)) { var %a $left($2,1), %b $right($2,-1)
    if ((+ = %a) ||  (%a = -) || (%a = ?)) { goto %a
      :+
      if ($istok(%excepciones.spam,%b,32)) { .notice $nick ya esta agregada %b en las excepciones }
      else { set %excepciones.spam $addtok(%excepciones.spam,%b,32) | .notice $nick fue agregado %b $+, compruébelo usando: .addexspam ? }
      return
      :-
      if (!$istok(%excepciones.spam,%b,32)) { .notice $nick No esta agregada %b en las excepciones }
      else { set %excepciones.spam $remtok(%excepciones.spam,%b,32) | .notice $nick fue eliminado %b $+, compruébelo usando: .addexspam ? }
      return
      :? | .notice $nick Las excepciones son: %excepciones.spam | return
    }
    else { .notice $nick Por favor $nick use: .addexspam (?/+/-)la*pabra (se permite el uso de comodines *) | return }
  }
  ; === fin de la manipulación de la variable
 }
y agregar el otro código de revisión para usuarios normales, pero pondrías un if para que no afecte al momento de manipular la variable de excepciones ejemplo un
 if ($ulevel = 120) { return }
Código: [Seleccionar]
on *:TEXT:*:#: {
  ; == Aquí revisa si el usuario tiene un nivel, de modificación para que no sea tomado en cuenta al validar su texto
  if ($ulevel = 120) { return }
  ; === si el nick no es un nick regular(@,v) entonces termina
  if (!$nick(#,$nick,r)) { return }
  ; === si la cadena de texto tiene algún tipo de spam, entrara
  if ($regex($strip($1-),/\b(?:http|www|com|org|net)\b/i)) {
    ; === revisa si esta la excepción y si lo esta sale
    var %a 1 | while ($gettok(%excepciones.spam,%a,32)) { if ($wildtok($strip($1-),$ifmatch,0,32)) { return } | inc %a }
    ; === No se encontró una excepción, procede a sancionar.
    ban -ku600 $chan $nick 2 Publicidad no permitida en el canal | msg #canaldebug Web Expulsando a $+($nick,$chr(40),$address,$chr(41)) por : $1-
  }
}

siendo que así quedaría la otra parte,pero sin tomar el punto de tu duda 1, con respecto a que canales seria aplicada ya que dejo a tu criterio la manera en que lo implementes, dejarlo como mencione en el post anterior

Código: [Seleccionar]
on *:TEXT:*:#: {
  ; == Aquí revisa si el usuario tiene un nivel, de modificación para que no sea tomado en cuenta al validar su texto
  if ($ulevel = 120) { return }
; --- alias de revisión antispam
alias.antispam $1-
}
; ----- alias de protecciones
alias -l alias.antispam { aquí va el código de revisión y sanciones aplicables }
alias -l alias.anti_colores { aquí va el código de revisión y sanciones aplicables }
alias -l alias.anti_malaspalabras{ aquí va el código de revisión y sanciones aplicables }
alias -l alias.anti_otra_cosa{ aquí va el código de revisión y sanciones aplicables }
;----- sin de protecciones
o usar los eventos con signal. Todo eso anterior son ejemplos ilustrativos, tendrían que desarrollarse c/u por separado, pero por lo menos es una idea para que me entiendas como podría hacerse.

Saludos.

Pd: Por eso decía que entre más se vaya desarrollando ya no seria un código simple, ya llegaría ser un addon.

Desconectado Hanna

  • Miembro Junior
  • **
  • Mensajes: 81
  • Karma: +14/-5
Re:Antispam
« Respuesta #7 en: Marzo 21, 2021, 12:33:15 pm »
Buenas tardes.

Muchas gracias por todos los ejemplos, pero me interesaría eso que dice en varias salas a la vez.

Código: [Seleccionar]
on *:TEXT:*:#: {
if ($chan !isin %canalesactivos) { return }
var %canalesactivos #cadiz #sevilla #madrid

¿Seria así?

Saludos.

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 195
  • Karma: +239/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Antispam
« Respuesta #8 en: Marzo 21, 2021, 05:33:25 pm »
es correcto pero la variable de %canalesactivos debe ser declarada antes de el if, para que tenga efectos.
Ya se que optes por
Código: [Seleccionar]
on *:TEXT:*:#: {
 var %canalesactivos #cadiz #sevilla #madrid
 if ($chan !isin %canalesactivos) { return }
o por un
Código: [Seleccionar]
on *:TEXT:*:#: {
 var %canalesactivos #cadiz #sevilla #madrid
 if (!$wildtok(%canalesactivos,$chan,0,32)) { return }
la diferencia es que en el primero si el canal no esta insertado en la variable de %canalesactivos no actuara, pero si existe un canal de #cadiz y un #cadiz_ops, actuara en ambos.
En el segundo busca en la variable el canal y si lo encuentra es negado y continua, pero si el canal no esta entonces regresa, igual puedes usar otro tipo de identificador para verificar el token, pero tendrías que negarlo con !, si es que deseas un resultado similar.

Igual puedes hacer una estructura similar que la que se usa en el .addexspam +,-,? para tener la variable %canalesactivos como permanente así controlarle a la distancia, obviamente reaccionaria a un comando diferente u otra forma re-estructurar ese código y solo hacer peticiones para que se encargue un alias de la modificación de las variables por medio del uso de los corchetes ya que si seria mas facil si es que piensas meter otras protecciones a futuro como antibadwords y sus excepciones, antibadnicks y excepciones, etc.

Saludos

Desconectado Hanna

  • Miembro Junior
  • **
  • Mensajes: 81
  • Karma: +14/-5
Re:Antispam
« Respuesta #9 en: Marzo 22, 2021, 02:25:09 am »
Buenas noches, si no estoy mal entendido, si quiero que solo afecte a los canales "generales" y no a los ops, lo mejor es la segunda opción, no?

Ahora mismo lo tengo así:

Código: [Seleccionar]
on *:TEXT:*:#: {
 var %canalesactivos #cadiz #sevilla #madrid
 if (!$wildtok(%canalesactivos,$chan,0,32)) { return }
   ; == Aquí revisa si el usuario tiene un nivel, de modificación para que no sea tomado en cuenta al validar su texto
  if ($ulevel = 100) { return }
  ; == Aquí se agregaran las excepciones, el nick debe ser op en el canal e iniciar con .addexspam la frase
  if (($nick isop $chan) && (.addexspam == $strip($1))) { var %a $left($2,1), %b $right($2,-1)
    if ((+ = %a) ||  (%a = -) || (%a = ?)) { goto %a
      :+
      if ($istok(%excepciones.spam,%b,32)) { msg # 3[Web]: Ya esta agregada %b en las excepciones }
      else { set %excepciones.spam $addtok(%excepciones.spam,%b,32) | msg # 3[Web]: Fue agregado %b $+, compruébelo usando: .addexspam ? }
      return
      :-
      if (!$istok(%excepciones.spam,%b,32)) { msg # 3[Web]: No esta agregada %b en las excepciones }
      else { set %excepciones.spam $remtok(%excepciones.spam,%b,32) | 3[Web]: Fue eliminado %b $+, compruébelo usando: .addexspam ? }
      return
      :? | msg # 3[Web]: Las excepciones son: %excepciones.spam | return
    }
    else { msg # 3[Web]: Por favor $nick use: .addexspam (?/+/-)la*pabra (se permite el uso de comodines *) | return }
  }
  ; === si el nick no es un nick regular(@,v) entonces termina
  if (!$nick(#,$nick,r)) { return }
  ; === si la cadena de texto tiene algún tipo de spam, entrara
  if ($regex($strip($1-),/\b(?:http|https|www|com|org|net)\b/i)) {
    ; === revisa si esta la excepción y si lo esta sale
    var %a 1 | while ($gettok(%excepciones.spam,%a,32)) { if ($wildtok($strip($1-),$ifmatch,0,32)) { return } | inc %a }
    ; === No se encontró una excepción, procede a sancionar.
    ban -ku600 $chan $nick 2 [Web] Publicidad no permitida en el canal | msg #cogotazos 3[Web]:  Expulsando a $+($nick,$chr(40),$address,$chr(41)) por : $1-
  }
}
;EOF

¿Está todo correcto así?

Saludos!!!!

Desconectado rayco

  • Miembro Junior
  • **
  • Mensajes: 79
  • Karma: +1/-73
Re:Antispam
« Respuesta #10 en: Marzo 29, 2021, 04:37:59 pm »
Buenas noches.

Pues yo probé el código que pusiste, y tiene un error.

Código: [Seleccionar]
on *:TEXT:*:#: {
  ; == Aquí se agregaran las excepciones, el nick debe ser op en el canal e iniciar con .addexspam la frase
  if (($nick isop $chan) && (.addexspam == $strip($1))) { var %a $left($2,1), %b $right($2,-1)
    if ((+ = %a) ||  (%a = -) || (%a = ?)) { goto %a
      :+
      if ($istok(%excepciones.spam,%b,32)) { .notice $nick ya esta agregada %b en las excepciones }
      else { set %excepciones.spam $addtok(%excepciones.spam,%b,32) | .notice $nick fue agregado %b $+, compruébelo usando: .addexspam ? }
      return
      :-
      if (!$istok(%excepciones.spam,%b,32)) { .notice $nick No esta agregada %b en las excepciones }
      else { set %excepciones.spam $remtok(%excepciones.spam,%b,32) | .notice $nick fue eliminado %b $+, compruébelo usando: .addexspam ? }
      return
      :? | .notice $nick Las excepciones son: %excepciones.spam | return
    }
    else { .notice $nick Por favor $nick use: .addexspam (?/+/-)la*pabra (se permite el uso de comodines *) | return }
  }
  ; === si el nick no es un nick regular(@,v) entonces termina
  if (!$nick(#,$nick,r)) { return }
  ; === si la cadena de texto tiene algún tipo de spam, entrara
  if ($regex($strip($1-),/\b(?:http|www|com|org|net)\b/i)) {
    ; === revisa si esta la excepción y si lo esta sale
    var %a 1 | while ($gettok(%excepciones.spam,%a,32)) { if ($wildtok($strip($1-),$ifmatch,0,32)) { return } | inc %a }
    ; === No se encontró una excepción, procede a sancionar.
    ban -ku600 $chan $nick 2 Publicidad no permitida en el canal | msg #canaldebug Web Expulsando a $+($nick,$chr(40),$address,$chr(41)) por : $1-
  }
}
;EOF

Código: [Seleccionar]
16:29:01 <uxue> Sí y me lo comí
16:29:01 rand pone modo +b *!*@Cnl.72G.j4bA1C.virtual
16:29:02 Baneados: uxue
16:29:02 Kick: uxue fue kickeado por rand [ Publicidad no permitida en el canal ]

Por si tienes que darle un repaso.  ;)

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 195
  • Karma: +239/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Antispam
« Respuesta #11 en: Marzo 29, 2021, 08:38:05 pm »
el problema es el acento rayco

quizás sea un bug en el mirc, ya que cualquier palabra acentuada la esta tomando, es que contiene una buscada en el regex, o quizás esta mal la implementacion, no soy tan experto en expresiones regulares(https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular), pero si me han facilitado muchas cosas. quizás alguien que si sea experto podría encontrar la solución a ello o se puede poner un while o wildtok,instok,etc para el chequeo, lo que impilicaria meter bucles para cada palabra y/o meter un filtro para que no metan caracteres especiales, que siendo los acentos se toman como caracteres especiales, y lo mas probable es que suceda lo mismo, lo anterior dicho se puede comprobar con:

//var %a comí | if ($regex($strip(%a),/\b(?:http|www|com|org|net)\b/i)) { echo -a detectado }
//var %a comi | if ($regex($strip(%a),/\b(?:http|www|com|org|net)\b/i)) { echo -a detectado }
//var %a comií | if ($regex($strip(%a),/\b(?:http|www|com|org|net)\b/i)) { echo -a detectado }


lo que se puede hacer es un tokenize para poner en minúsculas y usar un replace, por que es mas fácil poner los replaces de un carácter en especifico que usar uno para mayúsculas y otro minúsculas, según la tabla ascii, o que estar agregando excepciones por cada wwwá,wwwé..... sucesivamente hasta............ netú --> http|www|com|org|net
á => ASCII: 225 Octal: \341 HEX: \xE1
é => ASCII: 233 Octal: \351 HEX: \xE9
í => ASCII: 237 Octal: \355 HEX: \xED
ó => ASCII: 243 Octal: \363 HEX: \xF3
ú => ASCII: 250 Octal: \372 HEX: \xFA

Una ves explicado el punto, seria cuestión de agregar una linea que nos haga el trabajo sucio de los acentos
Código: [Seleccionar]
tokenize 32 $replace($lower($1-),$chr(225),a,$chr(233),e,$chr(237),i,$chr(243),o,$chr(250),u)el cual debe ser agregado después de la linea que contiene
Código: [Seleccionar]
if (!$nick(#,$nick,r)) { return }
Probando el tokenize individualmente
Código: [Seleccionar]
//var %a holá ¿cómo estÁs tú? | tokenize 32 $replace($lower(%a),$chr(225),a,$chr(233),e,$chr(237),i,$chr(243),o,$chr(250),u) | echo -a *variable%a* %a **remplazo** -- $1-
nos da como resultado:
*variable%a* holá ¿cómo estÁs tú? **remplazo** -- hola ¿como estas tu?

Sin más por el momento.

Desconectado rayco

  • Miembro Junior
  • **
  • Mensajes: 79
  • Karma: +1/-73
Re:Antispam
« Respuesta #12 en: Marzo 29, 2021, 09:07:21 pm »
Buenas noches.

Pues yo acabo de leerlo... y no me enterado de nada (lo del Wikipedia), y no me enterado de mucho o nada xDDDDDDDDD

¡Te agradezco la ayuda!

Tengo otra duda, en el código que puso Hanna he visto que se puede poner que solo puedan usar el comando de cierto nivel, y mi duda es, está bien puesto como lo ha puesto Hanna?

Es que me parece muy buena idea esa.

¡Gracias!

Desconectado Quetzalcoatl

  • Miembro de pleno derecho
  • ***
  • Mensajes: 195
  • Karma: +239/-2
  • HipercomputoHipermegared
    • elchatirc
Re:Antispam
« Respuesta #13 en: Marzo 29, 2021, 11:26:17 pm »
Citar
Tengo otra duda, en el código que puso Hanna he visto que se puede poner que solo puedan usar el comando de cierto nivel, y mi duda es, está bien puesto como lo ha puesto Hanna?
No habia mirado como lo puso, pero se supone que
Código: [Seleccionar]
   ; == Aquí revisa si el usuario tiene un nivel, de modificación para que no sea tomado en cuenta al validar su texto
  if ($ulevel = 100) { return }
debe de estar dependiendo del uso que se implemente como se menciona en la respuesta #6 de este tema, en la parte final hay otras opciones, que quizás te sean de interés.

En el caso de lo que ha puesto Hanna esa linea de verificación de nivel debe estar antes de la evaluación de antispam, es decir así como lo tiene, debe ir  antes y/o después de
Código: [Seleccionar]
if (!$nick(#,$nick,r)) { return } o mezclada con ella con ||, quedando como
Código: [Seleccionar]
if ((!$nick(#,$nick,r)) || ($ulevel = 100)) { return } específicamente para el código que Hanna puso en la respuesta #9 debido a que los que pueden agregar las excepciones serian los ops del canal, pero usuarios que no sean regulares(+@,+v,+~,+%) estarán exentos de poner lineas que contengan spam. Eso se menciona en la respuesta #6, siendo que no se sancionaran los usuarios de ese nivel igual se tendría que modificar agregando la verificación de nivel para que también pudieran agregar excepciones sin ser ops o dar un rango como un (100 <= $ulevel <= 120), si es que se meteran personal en el bot como root, master, mantenimiento, protegidos, etc.

Saludos.

PD: la misma posdata de la respuesta #6.

Desconectado Hanna

  • Miembro Junior
  • **
  • Mensajes: 81
  • Karma: +14/-5
Re:Antispam
« Respuesta #14 en: Marzo 30, 2021, 08:11:20 pm »
Buenas tardes.

Entonces si no he entendido mal.

- Si pongo que solo puedan añadir y quitar listar el spam ciertos usuarios con nivel en mi Bot.
- Y que solo actué en ciertos canales el spam.
- ¿Es posible que se vaya a un documento de texto en vez de a una variable?


¿Cómo podría hacerlo para que solo puedan usar el comando de agregar/quitar/listar gente de nivel?

He puesto la línea que has dicho, pero arriba sigue la del @ + % y no me gustaría que esos pudieran añadir spam en mi bot, si no como está abajo solo usuarios con nivel 100.

Así tengo ahora el código dime por favor que línea debo borrar.

Código: [Seleccionar]
on *:TEXT:*:#: {
  var %canalesactivos #cadiz #sevilla #madrid
  if (!$wildtok(%canalesactivos,$chan,0,32)) { return }
  ; == Aquí se agregaran las excepciones, el nick debe ser op en el canal e iniciar con .addexspam la frase
  if (($nick isop $chan) && (.addexspam == $strip($1))) { var %a $left($2,1), %b $right($2,-1)
    if ((+ = %a) ||  (%a = -) || (%a = ?)) { goto %a
      :+
      if ($istok(%excepciones.spam,%b,32)) { .notice $nick ya esta agregada %b en las excepciones }
      else { set %excepciones.spam $addtok(%excepciones.spam,%b,32) | .notice $nick fue agregado %b $+, compruébelo usando: .addexspam ? }
      return
      :-
      if (!$istok(%excepciones.spam,%b,32)) { .notice $nick No esta agregada %b en las excepciones }
      else { set %excepciones.spam $remtok(%excepciones.spam,%b,32) | .notice $nick fue eliminado %b $+, compruébelo usando: .addexspam ? }
      return
      :? | .notice $nick Las excepciones son: %excepciones.spam | return
    }
    else { .notice $nick Por favor $nick use: .addexspam (?/+/-)la*pabra (se permite el uso de comodines *) | return }
  }
  ; === si el nick no es un nick regular(@,v) entonces termina
  if ((!$nick(#,$nick,r)) || ($ulevel = 100)) { return }
  tokenize 32 $replace($lower($1-),$chr(225),a,$chr(233),e,$chr(237),i,$chr(243),o,$chr(250),u)
  ; === si la cadena de texto tiene algún tipo de spam, entrara
  if ($regex($strip($1-),/\b(?:https|www|com|org|net)\b/i)) {
    ; === revisa si esta la excepción y si lo esta sale
    var %a 1 | while ($gettok(%excepciones.spam,%a,32)) { if ($wildtok($strip($1-),$ifmatch,0,32)) { return } | inc %a }
    ; === No se encontró una excepción, procede a sancionar.
    ban -ku600 $chan $nick 2 Publicidad no permitida en el canal | msg #canaldebug Web Expulsando a $+($nick,$chr(40),$address,$chr(41)) por : $1-
  }
}
;EOF

Muchas gracias!!!

Desconectado Cadaver

  • Miembro de pleno derecho
  • ***
  • Mensajes: 116
  • Karma: +149/-3
  • Sexo: Masculino
Re:Antispam
« Respuesta #15 en: Marzo 31, 2021, 05:39:37 pm »
Ya en el foro se había publicado por mí algo similar para "malas palabras"  que al fin de cuentas sirve para este mismo caso incluía los comandos de agregar palabras y excepciones, nada mas busquen el post.

Este código esta bien y debería funcionar en todas las versiones pero no es así (v7.32 funciona):
Código: [Seleccionar]
//var %a comií | if ($regex($strip(%a),/\b(?:http|www|com|org|net)\b/i)) { echo -a detectado }
Dando una revisada por el foro, el código que les mencione fue eliminado como muchos otros de mi autoría.
« última modificación: Marzo 31, 2021, 05:49:30 pm por Cadaver »

Desconectado Cadaver

  • Miembro de pleno derecho
  • ***
  • Mensajes: 116
  • Karma: +149/-3
  • Sexo: Masculino
Re:Antispam
« Respuesta #16 en: Marzo 31, 2021, 10:14:27 pm »
Aquí les dejo un código que hice y esta funcionando para agregar canales donde debe funcionar y agregar excepciones debes ser nivel 200, el comando para agregar canal es .linkc +#prueba o .linkc -#prueba para quitar, el comando para agregar excepción es .linke +*ejemplo.com* o .#linke -*ejemplo.com* para quitar, no es necesario agregar youtube lo rechaza en automático. Le pueden agregar otras opciones en el avance que ya tenían.

Código: [Seleccionar]
on *:TEXT:*:#: {
  var %t = $strip($1-)
  ;; Tienes que ser nivel 200 para ejecutar, agregar quitar los canales donde funcionara y las excepciones ;;
  if ($ulevel = 200) {
    var %d = $left($2,1), %d1 = $right($2,-1)
    if ($1 == .linkc) {
      if (%d = +) {
        var %x $read($mircdirscripts/link.chan.txt,w,%d1)
        if (%x) { msg # Ya existe: %d1 - Total: $lines($mircdirscripts/link.chan.txt) }
        if (!%x) { write $mircdirscripts/link.chan.txt %d1 | msg # Agregado: %d1 - Total: $lines($mircdirscripts/link.chan.txt) }
      }
      if (%d = -) {
        var %x $read($mircdirscripts/link.chan.txt,w,%d1)
        if (%x) { write $+(-dl,$readn) $mircdirscripts/link.chan.txt | msg # Borrado: %d1 - Total: $lines($mircdirscripts/link.chan.txt) }
        if (!%x) { msg # No existe: %d1 - Total: $lines($mircdirscripts/link.chan.txt) }
      }
    }
    if ($1 == .linke) {
      if (%d = +) {
        var %x $read($mircdirscripts/link.exc.txt,w,%d1)
        if (%x) { msg # Ya existe: %d1 - Total: $lines($mircdirscripts/link.exc.txt) }
        if (!%x) { write $mircdirscripts/link.exc.txt %d1 | msg # Agregado: %d1 - Total: $lines($mircdirscripts/link.exc.txt) }
      }
      if (%d = -) {
        var %x $read($mircdirscripts/link.exc.txt,w,%d1)
        if (%x) { write $+(-dl,$readn) $mircdirscripts/link.exc.txt | msg # Borrado: %d1 - Total: $lines($mircdirscripts/link.exc.txt) }
        if (!%x) { msg # No existe: %d1 - Total: $lines($mircdirscripts/link.exc.txt) }
      }
    }
  }
  ;; Ahora si viene lo bueno ... ;;
  ;; Aqui revisa si el nick es regular y si el texto es dicho en alguno de los canales agregados y si contiene algún link y revisa que no sea de youtube ;;
  if ($nick isreg #) && ($regex(%t,/(^[+-]|(https?|www\.)(www\.)?[\S]*)/Si)) && ($read($mircdirscripts/link.chan.txt,w,#)) {
    var %z = 1
    while (%z <= $lines($mircdirscripts/link.exc.txt)) {
      var %x $read($mircdirscripts/link.exc.txt,%z)
      if (!$wildtok(%t,%x,0,32)) {
        if ($regex($gettok(%t,$gettok(%t,%x,32),32),/(^[+-]|(https?|www\.)(www\.)?[\S]*)/Si)) && (!$regex($gettok(%t,$gettok(%t,%x,32),32),/(?:^https?:\/\/|www\.)(?:[\S]*youtube\.com|youtu\.be)/i)) { ban -ku600 $chan $nick 2 Publicidad no permitida en el canal | msg #canaldebug Web Expulsando a $+($nick,$chr(40),$address,$chr(41)) por: $gettok(%t,$gettok(%t,%x,32),32) }
      }
      inc %z
    }
  }
}
« última modificación: Marzo 31, 2021, 10:28:34 pm por Cadaver »

Desconectado Hanna

  • Miembro Junior
  • **
  • Mensajes: 81
  • Karma: +14/-5
Re:Antispam
« Respuesta #17 en: Abril 10, 2021, 06:10:21 pm »
Buenas tardes

Perdón por la tardanza en responder, he tenido mucho lio y no he podido responder antes.

excelente código Cadaver

Muchisimas gracias Cadaver y Quetzalcoatl

 

anything