;Dialog items
dialog bad_channel {
title "Bad Channel Ban"
size -1 -1 149 125
option dbu
text "Bad Channels", 1, 10 10 60 8, center
combo 2, 10 20 60 100, drop sort size edit
box "Exemptions", 3, 73 6 37 40
check "Ops", 4, 75 13 30 8
check "Half-Ops", 5, 75 21 30 8
check "Voice", 6, 75 29 30 8
check "Regular", 7, 75 37 30 8
check "Timed Check", 8, 73 50 40 8
edit "", 9, 73 60 40 10
button "Check Now", 10, 115 10 30 10
button "Apply", 11, 115 20 30 10
button "Close", 12, 115 30 30 10, cancel
}
on *:dialog:bad_channel:init:*:{
channels
}
on *:dialog:bad_channel:sclick:2:{
var %chan = $did(2).seltext, %timed = $gettok($hget(bad_channel,%chan),1,32), %exempt = $gettok($hget(bad_channel,%chan),2,32)
did $iif(%timed,-c,-u) $dname 8
did $iif(%timed,-evra,-bhr) $dname 9 $duration(%timed,3)
did $iif($mid(%exempt,1,1) == o,-c,-u) $dname 4
did $iif($mid(%exempt,2,1) == h,-c,-u) $dname 5
did $iif($mid(%exempt,3,1) == v,-c,-u) $dname 6
did $iif($mid(%exempt,4,1) == r,-c,-u) $dname 7
}
on *:dialog:bad_channel:dclick:2:{
.hdel bad_channel $did(2).seltext
.channels
}
on *:dialog:bad_channel:sclick:8:{
did -r $+ $iif($did(8).state,ev,bh) $dname 9
}
on *:dialog:bad_channel:sclick:11:{
if $did(8).state {
var %time = $iif($did(9) isnum,$calc($did(9) * 60),$iif($chr(58) isin $did(9),$duration($did(9))))
$+(.timer,bad_channel_check,.,$cid,.,$chan) 0 %time bad.channel $chan
}
var %exempt
if $did(4).state { %exempt = o }
if $did(5).state { %exempt = %exempt $+ h }
if $did(6).state { %exempt = %exempt + v }
if $did(7).state { %exempt = %exempt + r }
.hadd -m bad_channel $did(2) $iif(%time,$v1,0) $+($did(4).state,$did(5).state,$did(6).state,$did(7).state)
.channels
}
;Aliases
alias -l channels {
did -bhr bad_channel 9
did -u bad_channel 4-8
did -r bad_channel 2
var %a = 1, %b = $hget(bad_channel,0).item
while %a <= %b {
did -a bad_channel 2 $hget(bad_channel,%a).item
inc %a
}
}
alias -l bad.channel {
if $me isop $1 {
var %exempt = $gettok($hget(bad_channel,%chan),2,32), %a = 1
while %a <= $nick($1,0,a,%exempt) {
.enable #bad.chan.whois
.whois $nick($1,%a,a,%exempt)
inc %a
}
}
}
;Groups
#bad.chan.whois off
raw 318:*:{
.disable #bad.chan.whois
haltdef
}
raw 319:*:{
var %b = 1, %c = $numtok($3-,32)
while %b <= %c {
if $hfind(bad_channel,$gettok($3-,%b,32)) && ($me isop %chan) {
.ban -k %chan $2 2 Bad Channels detected
}
inc %b
}
}
#bad.chan.whois end
;Ops remote access
on op:text:!list:*:{
var %a = 1, %b = $hget(bad_channel,0).item
while %a <= %b {
var %chan = $hget(bad_channel,%a).data
.timer 1 %a .msg $nick $hget(bad_channel,%a).item $duration($gettok(%chan,1,32),3) $gettok(%chan,2,32)
inc %a
}
}
on op:text:!add*:*:{
if !$2 {
.msg $nick Format is !add <channel> <timing> <exemption status>
.msg $nick ....
halt
}
if !$3 || $3 !isnum || $chr(58) !isin $3 {
.msg $nick <timing> must be in minutes or hh:mm:ss format
.msg $nick Use 0 if no automatic check is to be used
.msg $nick ....
halt
}
if !$4 {
.msg $nick <exemption status> must be in ohvr format
.msg $nick any or all of those are valid
.msg $nick ....
halt
}
.hadd -m bad_channel $2 $iif($3 isnum,$calc(60 * $3),$iif($chr(58) isin $3,$duration($3),0)) $4
if $gettok($hget(bad_channel,$2),1,32) {
$+(.timer,bad_channel_check,.,$cid,.,$2) 0 $v1 bad.channel $2
}
}
on op:text:!remove*:*:{
if !$2 {
.msg $nick Format is !remove <channel> <timing> <exemption status>
.msg $nick <timing> and <exemption status> are optional
.msg $nick Use 0 for <timing> to turn it off and change the exemption status
.msg $nick <exemption status> must be in ohvr format
.msg $nick any or all of those are valid
.msg $nick ....
}
elseif $3 == $null {
$+(.timer,bad_channel_check,.,$cid,.,$2) off
.hdel bad_channel $2
.msg $nick $2 has been removed
}
elseif $3 == 0 && $4 {
$+(.timer,bad_channel_check,.,$cid,.,$2) off
.hadd -m bad_channel $2 0 $remove($gettok($hget(bad_channel,$2),2,32),$4)
}
elseif !$4 {
var %time = $iif($3 isnum,$calc(60 * $3),$iif($chr(58) isin $3,$duration($3),0))
$+(.timer,bad_channel_check,.,$cid,.,$2) 0 %time bad.channel $2
}
else {
var %time = $iif($3 isnum,$calc(60 * $3),$iif($chr(58) isin $3,$duration($3),0))
.hadd -m bad_channel $2 %time $remove($gettok($hget(bad_channel,$2),2,32),$4)
$+(.timer,bad_channel_check,.,$cid,.,$2) 0 %time bad.channel $2
}
}
on !@*:join:#:{
.enable #bad.chan.whois
.whois $nick
}
menu nicklist,channel {
Bad Channel Dialog : dialog $iif(!$dialog(bad_channel),-md,-ev) bad_channel bad_channel
}
on *:start:{
if !$hget(bad_channel) { .hmake bad_channel 100 }
if $exists(bad_channel.hsh) { .hload bad_channel bad_channel.hsh }
}
on *:disconnect:{
.hsave -o bad_channel bad_channel.hsh
}
on *:exit:{
.hsave -o bad_channel bad_channel.hsh
}
on *:op:#:{
.auser -a op $opnick
}
on *:serverop:#:{
.auser -a op $opnick
}
on op:nick:{
.ruser op $nick
.auser -a op $newnick
}