Notice, there is no anti join flood
OCB short for One channel ban, can be setup to ban users connected to the server for under X seconds and for users who is on X channels.
fx:
if minchannels is set to 2, and a user join #channel, the eggdrop does a whois, and finds one channel (#channel), this user will be kicked and banned.
if minchannels is set to 6, and a user join #channel, the eggdrop does a whois, and finds two channels (#channel and #channel_2), this user will be kicked and anned.
if minchannels is set to 1, and a user join #channel, the eggdrop does a whois, and finds one channel (#channel), this user will NOT be kicked and banned.#
There is three channel flags, one master and two specific.
channel flag ocb - turned off this script won't run, this is the master switch.
channel flag ocb-require1 - checks for X channel on join.
channel flag ocb-require2 - checks for time connected to the server.
It also notifys a 'home' channel when a user is affected by the OCB script.
A trigger can be changed as well. - (default .ocb)
- .ocb [on] [off] [default]
.ocb OC [on] [off] [default]
.ocb NCU [on] [off] [default]
OC short for One channel.
NCU short for newly connected users.
Signontime is in seconds 600 = 10 minuttes and is the default time.
The kickmessage is changeable too.
**NEW** The bantime is changeable and specified in minuttes (0 for permanent)
**NEW** The exemptflags have been added so, you can add users (and yourself) and preventing the eggdrop to kick you.
**NEW** Set home for bot messages, or leave it blank to turn it off.
Have fun with the script, and please report bugs and error here at sp00fed.org.
If you have any suggestions please inform me.
Thanks.
- Code: Select all
setudef flag ocb
setudef flag ocb-require1
setudef flag ocb-require2
namespace eval ocb {
namespace eval variable {
variable home "#home"
variable minchannels 2
variable trigger ".ocb"
variable signontime 600
variable exemptflags "nmov|nmov"
variable bantime 10
variable kickmsg1 "kickmessage for being on X channels."
variable kickmsg2 "kickmessage for users connected to quakenet under X seconds."
}
if {[array exists hostmasks]} {
array unset hostmasks
}
array set hostmasks {
*sp00fed.org ""
*hostname1.net ""
*hostname2.com ""
}
bind join - * [namespace current]::onjoin
bind PUB o $::ocb::variable::trigger [namespace current]::menu
proc onjoin {nickname hostname handle channel} {
global ocb
if {[channel get $channel ocb]} {
if {![isbotnick $nickname]} {
if {![matchattr $handle $::ocb::variable::exemptflags $channel]} {
foreach {h i} [array get ocb::hostmasks] {
if {[string match $h $hostname]} {
return
}
}
set victim [string map {"\{" "\\\{" "\\" "\\\\" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]"} [string tolower $nickname]]
set userhostname [string trim $hostname "~"]
set channel [string tolower $channel]
set ocb($victim) "{$victim} {$channel} {$userhostname} {0}"
#putlog "making whois $victim "
bind raw - {319} [namespace current]::raw319
bind raw - {317} [namespace current]::raw317
putquick "WHOIS [join $victim] [join $victim]"
}
}
}
}
proc raw319 {server raw arguments} {
global ocb
catch { unbind RAW - {319} [namespace current]::raw319 }
set victim [string map {"\{" "\\\{" "\\" "\\\\" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]"} [string tolower [lindex [split $arguments] 1]]]
if {[info exists ocb($victim)]} {
set channel [join [lindex [split $ocb($victim)] 1]]
set hostname [join [lindex [split $ocb($victim)] 2]]
set result [join [lindex [split $ocb($victim)] 3]]
set channels [string tolower [lrange $arguments 2 e]]
if {[channel get $channel ocb-require1]} {
#putlog "channels $channels"
if {[llength $channels] < $::ocb::variable::minchannels} {
foreach user [chanlist $channel] {
if {[string match "$hostname" "[string trim [getchanhost $user $channel] "~"]"]} {
set banmask *!*[string trim $hostname "~"]
putquick "KICK $channel $user :$::ocb::variable::kickmsg1" -next
putquick "MODE $channel +b $banmask" -next
newchanban $channel $banmask OCB $::ocb::variable::kickmsg1 $::ocb::variable::bantime
if {[validchan $::ocb::variable::home]} {
putmsg $::ocb::variable::home "Kicked $user. Only [llength $channels] channels were were found."
}
}
set ocb($victim) "{$victim} {$channel} {$hostname} {1}"
}
}
}
}
}
proc raw317 {server raw arguments} {
global ocb
catch { unbind RAW - {317} [namespace current]::raw317 }
#putlog "Arguments: $arguments"
set victim [string map {"\{" "\\\{" "\\" "\\\\" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]"} [string tolower [lindex [split $arguments] 1]]]
if {[info exists ocb($victim)]} {
set channel [join [lindex [split $ocb($victim)] 1]]
set hostname [join [lindex [split $ocb($victim)] 2]]
#set result [join [lindex [split $ocb($victim)] 3]]
set signontime [lindex [split $arguments] 3]
#putlog "Sign on time: $signontime"
if {[channel get $channel ocb-require2]} {
if {[expr [unixtime] - $signontime] < $::ocb::variable::signontime} {
foreach user [chanlist $channel] {
if {[string match "$hostname" "[string trim [getchanhost $user $channel] "~"]"]} {
set banmask *!*[string trim $hostname "~"]
putquick "KICK $channel $user :$::ocb::variable::kickmsg2" -next
putquick "MODE $channel +b $banmask" -next
newchanban $channel $banmask OCB $::ocb::variable::kickmsg2 $::ocb::variable::bantime
if {[validchan $::ocb::variable::home]} {
putmsg $::ocb::variable::home "Kicked $user. Under [duration [expr [unixtime] - $signontime]] on [lindex [split $::server .] 2]."
}
}
}
}
}
}
}
proc menu {nickname hostname handle channel arguments} {
set first "[lindex $arguments 0]"
switch $first {
"on" {
channel set $channel +ocb
set status ""
append status "(\002NCU\002) Newly connected users is "
if {[channel get $channel ocb-require1]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
append status "(\002OC\002) One channel users is "
if {[channel get $channel ocb-require2]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
puthelp "NOTICE $nickname :(\002OCB\002) One channel ban is turned (\002\00309ON\003\002) - $status"
}
"off" {
channel set $channel -ocb
set status ""
append status "(\002NCU\002) Newly connected users is "
if {[channel get $channel ocb-require1]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
append status "(\002OC\002) One channel users is "
if {[channel get $channel ocb-require2]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
puthelp "NOTICE $nickname :(\002OCB\002) One channel ban is turned (\002\00304OFF\003\002) - $status"
}
"ncu" {
set second "[lindex $arguments 1]"
switch $second {
"on" {
channel set $channel +ocb-require1
puthelp "NOTICE $nickname :One channel ban for \002newly connected users\002 is turned (\002\00309ON\003\002)"
}
"off" {
channel set $channel -ocb-require1
puthelp "NOTICE $nickname :One channel ban for \002newly connected users\002 is turned (\002\00304OFF\003\002)"
}
"default" {
if {[channel get $channel ocb-require1]} {
puthelp "NOTICE $nickname :One channel ban for \002newly connected users\002 is (\002\00309ON\003\002)"
} else {
puthelp "NOTICE $nickname :One channel ban for \002newly connected users\002 is (\002\00304OFF\003\002)"
}
}
}
}
"oc" {
set second "[lindex $arguments 1]"
switch $second {
"on" {
channel set $channel +ocb-require2
puthelp "NOTICE $nickname :One channel ban for \002One channel users\002 is turned (\002\00309ON\003\002)"
}
"off" {
channel set $channel -ocb-require2
puthelp "NOTICE $nickname :One channel ban for \002One channel users\002 is turned (\002\00304OFF\003\002)"
}
"default" {
if {[channel get $channel ocb-require2]} {
puthelp "NOTICE $nickname :One channel ban for \002One channel users\002 is (\002\00309ON\003\002)"
} else {
puthelp "NOTICE $nickname :One channel ban for \002One channel users\002 is (\002\00304OFF\003\002)"
}
}
}
}
"default" {
if {[channel get $channel ocb]} {
set status ""
append status "(\002NCU\002) Newly connected users is "
if {[channel get $channel ocb-require1]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
append status "(\002OC\002) One channel users is "
if {[channel get $channel ocb-require2]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
puthelp "NOTICE $nickname :(\002OCB\002) One channel ban is (\002\00309ON\003\002) - $status"
} else {
set status ""
append status "(\002NCU\002) Newly connected users is "
if {[channel get $channel ocb-require1]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
append status "(\002OC\002) One channel users is "
if {[channel get $channel ocb-require2]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
puthelp "NOTICE $nickname :(\002OCB\002) One channel ban is (\002\00304OFF\003\002) - $status"
}
}
}
}
}