This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

detect bad word hidden in long nicks

Help for those learning Tcl or writing their own scripts.
s
simo
Revered One
Posts: 1090
Joined: Sun Mar 22, 2015 2:41 pm

Post by simo »

this is what i have so far


Code: Select all

set bnick {
     "badnick"
   "someverylongbadword"
   "somewordthatsbad"
   "veryabussivelongword"
}


bind join - * join:badnick
bind nick - * nick:badnick

proc nick:badnick {nick uhost hand chan newnick} {
   join:badnick $newnick $uhost $hand $chan
}


proc join:badnick {nick uhost hand chan} {
   global bnick temp
   regsub -all -- {(.)\1+} $nick {\1} nick2x2

   set temp 0
   foreach i [string tolower $bnick] {
      if {[regexp -- {[bn2reg $i]} [string tolower $nick2x2]]} {
         set badpart $i
         set temp 1
      }
   }

   if {!$temp} { return } {
      pushmode $chan +b *$badpart*!*@*
   }
}





proc bn2reg {text} {
   set sep {[^\s]*}
   set reg $sep
   for {set i 0} {$i<=[string length $text]} {incr i} {
      append reg [string index $text $i]$sep
   }
   return $reg
}

User avatar
CrazyCat
Revered One
Posts: 1252
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

Try to explain simply what you want to do if you really want help. I'm fed up with reading between lines or wait for another post to decrypt what you try to do.

You now have all the leads you need to do your script.
s
simo
Revered One
Posts: 1090
Joined: Sun Mar 22, 2015 2:41 pm

Post by simo »

thanks CrazyCat i got it to work as i wanted to

Apreciated.
User avatar
caesar
Mint Rubber
Posts: 3776
Joined: Sun Oct 14, 2001 8:00 pm
Location: Mint Factory

Post by caesar »

Would be a good idea to stop the loop once you found a match, cos that's the intended purpose, right? I mean after:

Code: Select all

set temp 1
just add a 'break' to stop the loop. Also you don't need the if .. else part in this:

Code: Select all

 if {!$temp} { return } {
      pushmode $chan +b *$badpart*!*@*
   } 
just go directly with if:

Code: Select all

 if {$temp} {
      pushmode $chan +b *$badpart*!*@*
   }
Oh, and you could optimize this and add a 'reahsh' bind where you build the regexp only once into a different variable and use it from there, no point on building it every time a user joins the channel. This should save you some time/resources.
Once the game is over, the king and the pawn go back in the same box.
s
simo
Revered One
Posts: 1090
Joined: Sun Mar 22, 2015 2:41 pm

Post by simo »

Thanks ceasar
s
simo
Revered One
Posts: 1090
Joined: Sun Mar 22, 2015 2:41 pm

Post by simo »

for those that might need this as well not sure if its properly constructed but it seems to work well.


Code: Select all


# to enable on channel via partyline Syntax: .chanset #channel +badnickchecker
# or to enable in channel !badnick on / off

bind PUB -|- !badnick badnick:checker
 
 
bind PUB n !badnick badnick:checker
 

proc badnick:checker {nick uhost hand chan arg} {
  switch -nocase -- [lindex [split $arg] 0] {
    on {
      if {[channel get $chan badnickchecker]} {
        putserv "NOTICE $nick :badnickchecker is already enabled on $chan."
      } else {
        channel set $chan +badnickchecker
        putserv "NOTICE $nick :badnickchecker is now enabled."
}
    }
    off {
      if {![channel get $chan badnickchecker]} {
        putserv "NOTICE $nick :badnickchecker is already disabled on $chan."
      } else {
        channel set $chan -badnickchecker
        putserv "NOTICE $nick :badnickchecker is now disabled."
     }
    }   
  }
}


setudef flag badnickchecker

 


set bnick {
    "SomeVeryLongBadNick"
    "SomeVeryLongBadNick"
    "SomeVeryLongBadNick"
    "SomeVeryLongBadNick"
    "SomeVeryLongBadNick"
    "SomeVeryLongBadNick"
    "SomeVeryLongBadNick"
 }


bind join - * join:badnick
bind nick - * nick:badnick

proc nick:badnick {nick uhost hand chan newnick} {
   join:badnick $newnick $uhost $hand $chan
}


proc join:badnick {nick uhost hand chan} {
    if {![channel get $chan badnickchecker]} { return }
   global bnick temp
   set temp 0
   foreach xix [string tolower $bnick] {
   if {[string match "[bn2reg $xix]" [string tolower $nick]]} {
         set bdpart [bn2reg $xix]
          regsub -all {\*{1,}} $bdpart "*" bdpartxc
         set badpart $bdpartxc
         set temp 1
         break
      }
   }

   if {$temp} {
        set chost [getchanhost $nick $chan]
        set masxs [maskhost $nick!$chost 2]
        pushmode $chan +b $badpart!*@*
   }
}





proc bn2reg {text} {
   set sep {*}
   set reg $sep
   for {set i 0} {$i<=[string length $text]} {incr i} {
      append reg [string index $text $i]$sep
   }
   return $reg
}

Post Reply