Blacklist

Old posts that have not been replied to for several years.
Locked
S
Skipper
Voice
Posts: 29
Joined: Sun Aug 21, 2005 10:00 am

Blacklist

Post by Skipper »

Code: Select all

set blacklist_file "scripts/dbase/blacklist"


bind MSG  m|- \$blacklist  blacklist:list
bind MSG  m|- \$blackadd   blacklist:add
bind MSG  m|- \$blackdel   blacklist:del
bind TIME -|- "0* * * * *" blacklist:sentry
bind JOIN -|- *            blacklist:join


proc blacklist:list {nickname hostname handle channel arguments} {
 global blacklist
  set entrys 0
  puthelp "NOTICE $nickname :Blacklist entrys"
  puthelp "NOTICE $nickname :Nr. Owner           Hostmask"
  foreach entry [array names blacklist] {
    incr entrys
    set owner [lindex $blacklist($entry) 0]
    while {[string length $owner] < 15} {
      set owner "$owner "
    }
    if {[string length $entrys] < 2} {
      set target "$entrys "
    } else {
      set target $entrys
    }
    puthelp "NOTICE $nickname :#$target $owner $entry"
  }
  puthelp "NOTICE $nickname :End of list."
}


proc blacklist:add {nickname hostname handle channel arguments} {
 global blacklist
  set arguments [blacklist:clean $arguments]
  set banmask [blacklist:validate:host [lindex $arguments 0]]
  if {([regexp -all -- {!} $banmask] > 1) || ([regexp -all -- {@} $banmask] > 1)} {
    puthelp "NOTICE $nickname :Sorry, couldn't add that hostmask."
    return
  }
  set owner $handle
  if {[regexp {^(\d{1,2}|[0-3][0-6][0-5])$} [lindex $arguments 1]]} {
   set expire [expr ([lindex $arguments 1] * 86400) + [unixtime]]
   set reason [join [lrange $arguments 2 end]]
  } else {
   set expire 0
   set reason [join [lrange $arguments 1 end]]
  }
  if {[llength $reason] >= 1} {
    if {![info exists blacklist($banmask)]} {
      set blacklist($banmask) "$owner $expire $reason"
      puthelp "NOTICE $nickname :Done. $banmask blacklisted successfully (reason: $reason)."
      blacklist:sentry
    } else {
      puthelp "NOTICE $nickname :Sorry, couldn't add that hostmask."
    }
  } else {
    puthelp "NOTICE $nickname :You forgot to type a blacklist reason."
  }
}


proc blacklist:del {nickname hostname handle channel arguments} {
 global blacklist
  set arguments [blacklist:clean $arguments]
  set banmask [lindex $arguments 0]
  set success 0
  if {[regexp {^#([0-9]+)$} $banmask tmp number]} {
    set item 0
    foreach entry [array names blacklist] {
      incr item
      if {$item == $number} {
        unset blacklist($entry)
        set success 1
      }
    }
  } else {
    if {[info exists blacklist($banmask)]} {
      unset blacklist($banmask)
      set success 1
    }
  }
  if {$success == 0} {
    puthelp "NOTICE $nickname :Couldn't delete the requested ban. Use \$blacklist to view them."
  } else {
    puthelp "NOTICE $nickname :Done."
  }
}


proc blacklist:sentry {{minute "0"} {hour "0"} {day "0"} {week "0"} {year "0"}} {
 global blacklist
  foreach channel [channels] {
    if {![botisop $channel]} {continue}
    foreach target [chanlist $channel] {
      set userhost [blacklist:weirdclean "$target![getchanhost $target]"]
      foreach entry [array names blacklist] {
        set expire [lindex $blacklist($entry) 1]
        if {$expire >= [unixtime] || ($expire == 0)} {
          set reason [lrange [blacklist:clean $blacklist($entry)] 2 end]
          set blackhost [blacklist:weirdclean $entry]
          if {[string match -nocase $blackhost $userhost]} {
            putquick "MODE $channel -o+b $target $entry"
            putquick "KICK $channel $target :[join $reason]"
          }
        } else {
          unset blacklist($entry)
        }
      }
    }
  }
  blacklist:save
}


proc blacklist:join {nickname hostname handle channel} {
 global blacklist
  if {![botisop $channel]} {return}
  set userhost [blacklist:weirdclean "$nickname![getchanhost $nickname]"]
  foreach entry [array names blacklist] {
    set reason [lrange [blacklist:clean $blacklist($entry)] 2 end]
    set blackhost [blacklist:weirdclean $entry]
    if {[string match -nocase $blackhost $userhost]} {
      putquick "MODE $channel -o+b $nickname $entry"
      putquick "KICK $channel $nickname :[join $reason]"
    }
  }
}


proc blacklist:validate:host {i} {
  regsub -all {\*+} $i {*} i
  array set ban {
    ident *
    host *
  }
  set ban(nick) $i
  if {[regexp -- {!} $i]} {
    regexp -- {^(.+?)!(.*?)(@(.*))?$} $i tmp ban(nick) ban(ident) tmp ban(host)
  } elseif {[regexp -- {@} $i]} {
    regexp -- {^(.+!)?(.*?)(@(.*))?$} $i tmp ban(nick) ban(ident) tmp ban(host)
  }
  foreach item [array names ban] {
    if {[string length $ban($item)] < 1} {
      set ban($item) *
    }
  }
  return $ban(nick)!$ban(ident)@$ban(host)
}


proc blacklist:load {} {
 global blacklist blacklist_file
  regexp {(\S+/)?} $blacklist_file tmp blacklist_dir
  if {$blacklist_dir != ""} {
    if {![file isdirectory $blacklist_dir]} {
      file mkdir $blacklist_dir
      putlog "Created directory: $blacklist_dir"
    }
  }
  if {![file exists $blacklist_file]} {
    array set blacklist {}
    return
  }
  if {[array exists blacklist]} {
    array unset blacklist
  }
  set file [open $blacklist_file r]
  while {![eof $file]} {
    gets $file line
    if {[regexp -- {(\S+)\s(\S+)\s(\S+)\s(.+)} $line tmp banmask owner expire reason]} {
      if {$expire >= [unixtime] || ($expire == 0)} {
        set blacklist($banmask) "$owner $expire $reason"
      }
    }
  }
  close $file
}


proc blacklist:save {} {
 global blacklist blacklist_file
  set file "[open $blacklist_file w]"
  foreach entry [array names blacklist] {
    puts $file "$entry $blacklist($entry)"
  }
  close $file
}


proc blacklist:weirdclean {i} {
  regsub -all -- \\\\ $i \001 i
  regsub -all -- \\\[ $i \002 i
  regsub -all -- \\\] $i \003 i
  regsub -all -- \\\} $i \004 i
  regsub -all -- \\\{ $i \005 i
  return $i
}


proc blacklist:clean {i} {
  regsub -all -- \\\\ $i \\\\\\\\ i
  regsub -all -- \\\[ $i \\\\\[ i
  regsub -all -- \\\] $i \\\\\] i
  regsub -all -- \\\} $i \\\\\} i
  regsub -all -- \\\{ $i \\\\\{ i
  regsub -all -- \\\" $i \\\\\" i
  return $i
}


blacklist:load
I tried with the MSG bind that is.. to add the blacklist entried using a query window.. but am getting an error as

Code: Select all

<(Yammi> [15:50] Tcl error [blacklist:add]: wrong # args: should be "blacklist:add nickname hostname handle channel arguments"

Help me to fix this :) Also help me how to make this script kick for specified channels only.
User avatar
De Kus
Revered One
Posts: 1361
Joined: Sun Dec 15, 2002 11:41 am
Location: Germany

Post by De Kus »

remove "channel" from var list within proc declaration when using msg instead of pub.
De Kus
StarZ|De_Kus, De_Kus or DeKus on IRC
Copyright © 2005-2009 by De Kus - published under The MIT License
Love hurts, love strengthens...
S
Skipper
Voice
Posts: 29
Joined: Sun Aug 21, 2005 10:00 am

Post by Skipper »

Hello,

Hey thanks.. it works :) But as i said earlier the bans are getting added globally. I just want to make the bans for specific channels only..
what i should alter in it now?

And How do i set the same reason for all the bans.. instead of typing reason for everytime .. can i make a perm reason to be added in the tcl itself. ?

Rgds

Skipper
User avatar
Sir_Fz
Revered One
Posts: 3793
Joined: Sun Apr 27, 2003 3:10 pm
Location: Lebanon
Contact:

Post by Sir_Fz »

Why not use the .+ban dcc command instead, this way you can make it channel specific.
D
Dizzle
Op
Posts: 109
Joined: Thu Apr 28, 2005 11:21 am
Contact:

Post by Dizzle »

if you want it channel specified, it aint a blacklist anymore imo
What's this real life ppl keep talking about ??? And where can I download it ???
User avatar
Alchera
Revered One
Posts: 3344
Joined: Mon Aug 11, 2003 12:42 pm
Location: Ballarat Victoria, Australia
Contact:

Post by Alchera »

Dizzle wrote:if you want it channel specified, it aint a blacklist anymore imo
Since when? A blacklist is a blacklist, channel specific or otherwise. :P

Skipper:

Code: Select all

newchanban <channel> <ban> <creator> <comment> [lifetime] [options]
<comment> = your reason.
Add [SOLVED] to the thread title if your issue has been.
Search | FAQ | RTM
User avatar
demond
Revered One
Posts: 3073
Joined: Sat Jun 12, 2004 9:58 am
Location: San Francisco, CA
Contact:

Post by demond »

I've said that already, but I still hope Skipper will finally get a clue and will start using eggdrop in some sane way:

Skipper, you keep requesting feature scripts that simply don't make sense - either duplicating already existing eggdrop feature (eggdrop already has a built-in "blacklist", it's called banlist) or using eggdrop as a proxy for doing human op chores manually where such proxy isn't needed (your ops that you don't want added to bot's userlist should kick/ban/police a channel themselves, not using the bot); amazingly enough, you managed to find whole script that does the former (or did you write it yourself? a complete waste of time)
S
Skipper
Voice
Posts: 29
Joined: Sun Aug 21, 2005 10:00 am

Post by Skipper »

Hello,

Thanks for the help ppl.. i have done the channel specific one.. but left with the reason part alone.. Just that am lazy to add the blacklist reason everytime.. so wanted to put a reason permanently in the tcl itself.. wonder how to do it.. if someone can help pls do.. else stop commenting.. :)

Rgds

Skipper
C
CrazyEgg
Halfop
Posts: 47
Joined: Thu Jul 28, 2005 4:02 pm

Post by CrazyEgg »

make the modifications as you want

Code: Select all

if {$reason == ""} {
newchanban $chan $banmask $hand " Requested by $hand" [lifetime] [options]
} else {
newchanban $chan $banmask $hand " $reason" [lifetime] [options]
S
Skipper
Voice
Posts: 29
Joined: Sun Aug 21, 2005 10:00 am

Post by Skipper »

Code: Select all

set blacklist_file "scripts/dbase/blacklist"

setudef flag black


bind MSG  m|- \$blacklist  blacklist:list
bind MSG  m|- \$blackadd   blacklist:add
bind MSG  m|- \$blackdel   blacklist:del
bind JOIN -|- *            blacklist:join


proc blacklist:list {nickname hostname handle arguments} {
 global blacklist
  set entrys 0
  puthelp "PRIVMSG $nickname :BlackList Entrys"
  puthelp "PRIVMSG $nickname :Nr. Owner           HostMask"
  foreach entry [array names blacklist] {
    incr entrys
    set owner [lindex $blacklist($entry) 0]
    while {[string length $owner] < 15} {
      set owner "$owner "
    }
    if {[string length $entrys] < 2} {
      set target "$entrys "
    } else {
      set target $entrys
    }
    puthelp "PRIVMSG $nickname :#$target $owner $entry"
  }
  puthelp "PRIVMSG $nickname :End of list."
}


proc blacklist:add {nickname hostname handle arguments} {
 global blacklist
  set arguments [blacklist:clean $arguments]
  set banmask [blacklist:validate:host [lindex $arguments 0]]
  if {([regexp -all -- {!} $banmask] > 1) || ([regexp -all -- {@} $banmask] > 1)} {
    puthelp "PRIVMSG $nickname :Sorry, Couldn't Add That HostMask."
    return
  }
  set owner $handle
  if {[regexp {^(\d{1,2}|[0-3][0-6][0-5])$} [lindex $arguments 1]]} {
   set expire [expr ([lindex $arguments 1] * 86400) + [unixtime]]
   set reason [join [lrange $arguments 2 end]]
  } else {
   set expire 0
   set reason [join [lrange $arguments 1 end]]
  }
  if {[llength $reason] >= 1} {
    if {![info exists blacklist($banmask)]} {
      set blacklist($banmask) "$owner $expire $reason"
      puthelp "PRIVMSG $nickname :Done. $banmask BlackListed Successfully (Reason: $reason)."
      } else {
      puthelp "PRIVMSG $nickname :Sorry, Couldn't Add That HostMask."
    }
  } else {
    puthelp "PRIVMSG $nickname :You Forgot To Type A BlackList Reason."
  }
}


proc blacklist:del {nickname hostname handle arguments} {
 global blacklist
  set arguments [blacklist:clean $arguments]
  set banmask [lindex $arguments 0]
  set success 0
  if {[regexp {^#([0-9]+)$} $banmask tmp number]} {
    set item 0
    foreach entry [array names blacklist] {
      incr item
      if {$item == $number} {
        unset blacklist($entry)
        set success 1
      }
    }
  } else {
    if {[info exists blacklist($banmask)]} {
      unset blacklist($banmask)
      set success 1
    }
  }
  if {$success == 0} {
    puthelp "PRIVMSG $nickname :Couldn't Delete The Requested Ban. Use \$blacklist To View Them."
  } else {
    puthelp "PRIVMSG $nickname :Done."
  }
}

proc blacklist:join {nickname hostname handle chan} {
 global blacklist
  if {![botisop $chan]} {return}
  if {[lsearch -exact [channel info $chan] +black] == -1} {return 0}
  set userhost [blacklist:weirdclean "$nickname![getchanhost $nickname]"]
  foreach entry [array names blacklist] {
    set reason [lrange [blacklist:clean $blacklist($entry)] 2 end]
    set blackhost [blacklist:weirdclean $entry]
    if {[string match -nocase $blackhost $userhost]} {
      putquick "MODE $chan -o+b $nickname $entry"
      putquick "KICK $chan $nickname :[join $reason]"
    }
  }
}


proc blacklist:validate:host {i} {
  regsub -all {\*+} $i {*} i
  array set ban {
    ident *
    host *
  }
  set ban(nick) $i
  if {[regexp -- {!} $i]} {
    regexp -- {^(.+?)!(.*?)(@(.*))?$} $i tmp ban(nick) ban(ident) tmp ban(host)
  } elseif {[regexp -- {@} $i]} {
    regexp -- {^(.+!)?(.*?)(@(.*))?$} $i tmp ban(nick) ban(ident) tmp ban(host)
  }
  foreach item [array names ban] {
    if {[string length $ban($item)] < 1} {
      set ban($item) *
    }
  }
  return $ban(nick)!$ban(ident)@$ban(host)
}


proc blacklist:load {} {
 global blacklist blacklist_file
  regexp {(\S+/)?} $blacklist_file tmp blacklist_dir
  if {$blacklist_dir != ""} {
    if {![file isdirectory $blacklist_dir]} {
      file mkdir $blacklist_dir
      putlog "Created directory: $blacklist_dir"
    }
  }
  if {![file exists $blacklist_file]} {
    array set blacklist {}
    return
  }
  if {[array exists blacklist]} {
    array unset blacklist
  }
  set file [open $blacklist_file r]
  while {![eof $file]} {
    gets $file line
    if {[regexp -- {(\S+)\s(\S+)\s(\S+)\s(.+)} $line tmp banmask owner expire reason]} {
      if {$expire >= [unixtime] || ($expire == 0)} {
        set blacklist($banmask) "$owner $expire $reason"
      }
    }
  }
  close $file
}


proc blacklist:save {} {
 global blacklist blacklist_file
  set file "[open $blacklist_file w]"
  foreach entry [array names blacklist] {
    puts $file "$entry $blacklist($entry)"
  }
  close $file
}


proc blacklist:weirdclean {i} {
  regsub -all -- \\\\ $i \001 i
  regsub -all -- \\\[ $i \002 i
  regsub -all -- \\\] $i \003 i
  regsub -all -- \\\} $i \004 i
  regsub -all -- \\\{ $i \005 i
  return $i
}


proc blacklist:clean {i} {
  regsub -all -- \\\\ $i \\\\\\\\ i
  regsub -all -- \\\[ $i \\\\\[ i
  regsub -all -- \\\] $i \\\\\] i
  regsub -all -- \\\} $i \\\\\} i
  regsub -all -- \\\{ $i \\\\\{ i
  regsub -all -- \\\" $i \\\\\" i
  return $i
}


blacklist:load



Tcl is working perfect.

But theres a small bug.. which am unable to trace it out.. When i delete the blacklist.. its getting deleted.. but when i restart the bot.. the one which i deleted stays there still. How to fix it?

There is something to do with the delete part of the tcl.. i wonder what i should do there. :)

Rgds

Skipper
User avatar
demond
Revered One
Posts: 3073
Joined: Sat Jun 12, 2004 9:58 am
Location: San Francisco, CA
Contact:

Post by demond »

Skipper wrote:But theres a small bug.. which am unable to trace it out.. When i delete the blacklist.. its getting deleted.. but when i restart the bot.. the one which i deleted stays there still. How to fix it?
save your data after modifying it
There is something to do with the delete part of the tcl.. i wonder what i should do there. :)
you should ditch that useless & bloated thing and learn HOW TO USE EGGDROP'S BUILT-IN BAN SUPPORT, which is zillion times better than your lame stuff
S
Skipper
Voice
Posts: 29
Joined: Sun Aug 21, 2005 10:00 am

Post by Skipper »

Hello,

I know abt the eggdrops ban stuff as well. When i use this script there is some reason behind it.. Coz of the firewall probs i cant dcc the bot in my workplace.. thats the reason i have opted for this script..


Genuine helpers only reply pls :)


Rgds

Skipper.


P.S: Those who want to increase their post count.. kindly poke in some other topic.. and dont be a spoilsport.
User avatar
demond
Revered One
Posts: 3073
Joined: Sat Jun 12, 2004 9:58 am
Location: San Francisco, CA
Contact:

Post by demond »

then you should learn how to enable DCC - read the top sticky post in Eggdrop Help forum (and yes, this is a genuine advice)
S
Skipper
Voice
Posts: 29
Joined: Sun Aug 21, 2005 10:00 am

Post by Skipper »

Hello,

I have figured out the error and corrected it myself.. :)

Thanks for the help.

Rgds

Skipper
Locked