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.

badwhois

Support & discussion of released scripts, and announcements of new releases.
Post Reply
b
buuhuu
Voice
Posts: 5
Joined: Tue Jan 27, 2009 5:01 pm

badwhois

Post by buuhuu »

Hey guys,

Im using badwhois.tcl at the moment but ive got a little problem :(
The chan checker isnt accurate because if i activate the script in #channel with ".chanset #channel +badwhois" and put #channel2 on the bwhois(chans) category, the script is banning every user who joins #channel because #channel matchs #channel2 :/

can u tell me maybe what i have to do?

thats the code:

Code: Select all


## ¤ BadWhois
# version 0.1
# caesar <cezarica [at] prietenii [dot] com>
# #eggdrop @ Undernet.org
# http://www.r0x0ring.com/

###
## ¤ Description:
# Performs a whois on join and places a *!*@host ban if mathes a banned realname or a banned channel.

###
## ¤ Available commands:
#
#     Where  Flag Command   Description
#     -----  ---- -------   -----------
#     PUB : N/A
#
#     MSG : N/A
#
#     DCC :  n|n .chanset   Use .chanset to set what protections to active for the particular channel or not.
#                           Example: .chanset #mychan +badwhois
#                                    .chanset #otherchan -badwhois

###
## ¤ Custom channel flags:
#
#  Flag:       Description:
#  -----       ------------
#  +badwhois  Channels marked with this flag will be "checked" for bad realnames and bad channels on join.
#
# Attention!
#  By default the channel flag (badwhois) is disabled. Enable it on the channels you wish.
#  Don't use this script
#

##
# Adjust the folowing things to suit your needs!

# .1. What bad realnames should be banned?
set bwhois(list) {
"*eggdrop*"
"*bot by*"
}

# .2. What bad channels should be banned?
set bwhois(chans) {#channel #channel2 #channel3}

# .3. Specify the ban reason and the ban time (in minutes) for a bad realname:
set bwhois(br) {"Sorry, you are not welcome in here!" 10}

# .4. Specify the ban reason and the ban time (in minutes) for a bad channel:
set bwhois(bc) {"Sorry, you are not allowed to be in any blacklisted channels while in here!" 1}

# .4. Number of joins in seconds do a delayed whois.
set bwhois(flud) "5:3:6"

#
## ¤ Don't edit past here unless you know TCL! ¤
#

set bwhois(version) "0.1"
setudef flag badwhois

##
# ¤ binds

bind join * * badwhois:join
bind part - * badwhois:part
bind raw - 311 badwhois:check
bind raw - 319 badwhois:chans

##
# ¤ whois on join

proc badwhois:join {nick uhost hand chan} {
  global bflud bwhois
  if {![channel get $chan badwhois] || [isbotnick $nick ] || [matchattr $hand f|f $chan]} {
    return
  }
  if {![info exists bflud($chan)]} {
    set bflud($chan) 0
  }
  incr bflud($chan)
  utimer [lindex [set bla [split $bwhois(flud) ":"]] 1] [list incr bflud($chan) -1]
  if {$bflud($chan) >= [lindex $bla 0]} {
    puthelp "WHOIS $nick"
    } else {
    utimer [lindex $bla 2] [puthelp "WHOIS $nick"]
  }
  lappend bwhois(whois) "$nick:$chan:*!*@[lindex [split $uhost @] 1]"
}

##
# ¤ realname check

proc badwhois:check {from key txt} {
  global bwhois
  if {![info exists bwhois(whois)]} {
    set bwhois(whois) ""
  }
  if {[isbotnick [set nick [lindex [split $txt] 1]]] || [validuser [nick2hand $nick]]} {
    return
  }
  set realname [stripcodes bcruag [string range [join [lrange [split $txt] 5 end]] 1 end]]
  foreach bla $bwhois(list) {
    if {[string match -nocase $bla $realname]} {
      set position [lsearch $bwhois(whois) "*:[set mask *!*@[lindex [split $txt] 3]]*"]
      if {[botisop [set chan [lindex [set t [split [lindex $bwhois(whois) $position] :]] 1]]]} {
        putquick "KICK $chan $nick :[lindex $bwhois(br) 0]" -next
      }
      newchanban $chan $mask BadWhois [lindex $bwhois(br) 0] [lindex $bwhois(br) 1]
      set bwhois(whois) [lreplace $bwhois(whois) $position $position]
      break
    }
  }
}

##
# ¤ channels check

proc badwhois:chans {from key txt} {
  global bwhois
  if {[isbotnick [set nick [lindex [split $txt] 1]]] || [validuser [nick2hand $nick]]} {
    return
  }
  if {[set position [lsearch $bwhois(whois) "*$nick:*"]] != -1} {
    foreach bla [lrange $txt 2 e] {
      if {[string match -nocase "*[string trimleft $bla ":@+"]*" $bwhois(chans)]} {
        if {[botisop [set chan [lindex [set t [split [lindex $bwhois(whois) $position] :]] 1]]]} {
          putserv "PRIVMSG $nick :You have been banned for being on a bad channel"
          putquick "KICK $chan [lindex $t 0] :[lindex $bwhois(bc) 0]" -next
        }
        newchanban $chan [lindex $t 2] BadWhois [lindex $bwhois(bc) 0] [lindex $bwhois(bc) 1]
        set bwhois(whois) [lreplace $bwhois(whois) $position $position]
        break
      }
    }
  }
}

##
# ¤ array remove

proc badwhois:part {nick uhost hand chan msg} {
  global bflud
  if {[isbotnick $nick] && [string match -nocase "*$chan*" [array names bflud]]} {
    array unset bflud $chan
  }
}

putlog "badwhois v$bwhois(version) loaded.."

n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

This script would have to be rewritten in several locations, as channel-checking is currently done like this:

Code: Select all

if {[string match -nocase "*$chan*" $bwhois(chans)]} {
Unfortunately, this cannot be straight swapped with an lsearch, as lsearch does not support case-insensitive searching, and case may vary on the channelname. One workaround would be to always make sure channel-names are treated in lowercase (using string tolower) all throughout the script.
NML_375
b
buuhuu
Voice
Posts: 5
Joined: Tue Jan 27, 2009 5:01 pm

Post by buuhuu »

Hey,

first of all thx for being that fast :D

Unfortunately, its not working :(
Now its doing nothing if i join a chan while i do idle in a bad one

i did replace:

Code: Select all

if {[string match -nocase "*[string trimleft $bla ":@+"]*" $bwhois(chans)]} { 
with this:

Code: Select all

if {[string match -nocase "*$chan*" $bwhois(chans)]} {
but if it would be fine, u did ignore this part:

Code: Select all

"*[string trimleft $bla ":@+"]*"
didnt you?´

one more thing is, you wrote that this script should be rewritten in several locations and i did search a couple of hours for any help for this script or any other but it seems to be the only script for checking for bad chans and bad realname, so maybe it would be expedient if someone could write a new one? :P
I would be really happy about this and i guess a lot more people as well because ive seen a lot of problems with this script when i was looking for help for my problem with ist :/
C
Callisto
Halfop
Posts: 86
Joined: Sun Mar 13, 2005 11:04 am

Post by Callisto »

Hi, I use banchan by MC8, you can search for it in the TCL archive or go to http://www.egghelp.org/cgi-bin/tcl_arch ... load&id=32
Hope this works better for you
b
buuhuu
Voice
Posts: 5
Joined: Tue Jan 27, 2009 5:01 pm

Post by buuhuu »

Hey,

yeah, i know this script as well but there is no real name check and there is an interval check for checking the whole channel every X min but if u have more than 200 ppl on your chan u cant use it.. :/
moreover this script got no floodprotection.
n
nml375
Revered One
Posts: 2860
Joined: Fri Aug 04, 2006 2:09 pm

Post by nml375 »

buuhuu, I'm not quite sure you actually read my post.
I never suggested replacing various matches with a new string match test. Instead I pointed at the possibility of altering the script to use lsearch on a list, aswell as pointing out the issue of case sensitivity. The highlighted code is just one of several string-based matches done in the code that would have to be altered.

So, no, I did not ignore any part, nor did I provide a complete solution, rather ideas on how this could be achieved. Personally, I try to avoid posting works based on other works not under an open source license, or released in the public domain.
In most cases, "we" recommend trying to get in touch with the author whenever possible. Unfortunately, this may not always be possible for various reasons, or the author may choose not to provide any further assistance.
I cannot say whether you've been in touch with the author, or under what kind of license (if any) this script is released under, so I am thus uncomfortable making a complete rewrite of the script.
NML_375
User avatar
Sir_Fz
Revered One
Posts: 3794
Joined: Sun Apr 27, 2003 3:10 pm
Location: Lebanon
Contact:

Post by Sir_Fz »

AllProtection has bad/excess channels protection + it scans on interval (with queuing to avoid flooding out on huge channels), try it if suitable.
b
buuhuu
Voice
Posts: 5
Joined: Tue Jan 27, 2009 5:01 pm

Post by buuhuu »

Hey,

thx, it looks really great :)
Do you think that you can add a realname check on it as well?
Its because i dont think that it would be clever to load a second script for this because the user would be whoised twice :-/
User avatar
Sir_Fz
Revered One
Posts: 3794
Joined: Sun Apr 27, 2003 3:10 pm
Location: Lebanon
Contact:

Post by Sir_Fz »

I won't promise anything since it has been long since I updated the script but I will keep this in consideration whenever I decide to modify the script.
b
buuhuu
Voice
Posts: 5
Joined: Tue Jan 27, 2009 5:01 pm

Post by buuhuu »

yeah, i think that would be a nice extension and shouldnt take too much time to add it ;)
Post Reply