### BanManager script by CyBex # # This script is under GNU General Public License # You can modify code, you can add code, you can # add your name, but let the orignal authors in # the header. # # Public Commands: # !banlist [channel] [public] # !bandel [channel] [public] # Query/Msg Commands: # banlist # bandel # DCC/Partyline Commands: # .banlist # .bandel # # first byte 02.12.2005 # last update 04.12.2005 # proc pub:banlist {n u h c t} { set c [string tolower $c]; set t [string tolower $t] set tc [string trim [lindex [split $t] 0]]; set oc $c if {$tc!=""} { if {![string match pub* $tc] && ![validchan $tc]} { putbanout $n "The channel $tc isn't valid! Syntax: \002$::lastbind \[#channel\]\002"; return 1 } elseif {![string match pub* $tc] && ![botonchan $tc]} { putbanout $n "I'm not on $tc! Syntax: \002$::lastbind \[#channel\]\002"; return 1 } elseif {![string match pub* $tc] && ![botisop $tc]} { putbanout $n "I dont have op on $tc! I can't remove bans!"; set c $tc } elseif {[string match pub* $tc]} { } { set c $tc } } if {[string match *pub* $t]} { listbans $oc $c } { listbans $n $c } } proc pub:delban {n u h c t} { if {![isop $n $c] && ![matchattr $h nmo|nmo $c]} { putbanout $n "You have not enough rights to remove bans." return 1 } if {[string len [string trim $t]]==0} {putbanout $i "Syntax: \002$::lastbind banmask\002"; return 1} set c [string tolower $c]; set t [string tolower $t] set tc [string trim [lindex [split $t] 0]]; set oc $c if {[validchan $tc]} { if {![botonchan $tc]} { putbanout $n "I'm not on $tc! Syntax: \002$::lastbind \[#channel\] banmask\002"; return 1 } elseif {![botisop $tc]} { putbanout $n "I dont have op on $tc! I can't remove bans!"; return 1 } set m [lindex [split $t] 1] set c $tc } { set m $tc } if {$m==""} { putbanout $n "Syntax: \002$::lastbind \[#channel\] banmask\002"; return 1 } elseif {![validchan $c]} { putbanout $n "The channel $c isn't valid!"; return 1 } elseif {![botonchan $c]} { putbanout $i $n "I'm not on $c!"; return 1 } elseif {![botisop $c]} { putbanout $i "I dont have op on $c! I can't remove bans!"; return 1 } if {[string match *pub* $t]} { removebans $n $h $oc $c $m } { removebans $n $h $n $c $m } return 1 } proc msg:banlist {n u h t} { set t [string trim [string tolower $t]] if {[string len [string trim $t]]==0} {putbanout $n "Syntax: \002$::lastbind #channel\002"; return 1} set c [lindex [split $t] 0] if {![validchan $c]} { putbanout $n "The channel $c isn't valid! Syntax: \002$::lastbind #channel\002"; return 1 } elseif {![botonchan $c]} { putbanout $n "I'm not on $c! Syntax: \002$::lastbind #channel\002"; return 1 } elseif {![botisop $c]} { putbanout $n "I dont have op on $c! I can't remove bans!"; } listbans $n $c } proc msg:delban {n u h t} { set t [string trim [string tolower $t]] if {[string len [string trim $t]]==0} {putbanout $n "Syntax: \002$::lastbind #channel banmask\002"; return 1} foreach {c m} [split $t] {break} if {![validchan $c]} { putbanout $n "The channel $c isn't valid! Syntax: \002$::lastbind #channel banmask\002"; return 1 } elseif {![botonchan $c]} { putbanout $n "I'm not on $c! Syntax: \002$::lastbind #channel banmask\002"; return 1 } elseif {![botisop $c]} { putbanout $n "I dont have op on $c! I can't remove bans!"; } if {![isop $n $c] && ![matchattr $h nmo|nmo $c]} { putbanout $n "You have not enough rights to remove bans." return 1 } if {$m==""} { putbanout $n "Syntax: \002$::lastbind #channel banmask\002"; return 1 } elseif {![validchan $c]} { putbanout $n "The channel $c isn't valid!"; return 1 } elseif {![botonchan $c]} { putbanout $i $n "I'm not on $c!"; return 1 } elseif {![botisop $c]} { putbanout $i "I dont have op on $c! I can't remove bans!"; return 1 } removebans $n $h $n $c $m } proc dcc:banlist {f i t} { set t [string trim [string tolower $t]] if {[string len [string trim $t]]==0} {putbanout $i "Syntax: \002$::lastbind #channel\002"; return 1} set c [lindex [split $t] 0] if {![validchan $c]} { putbanout $i "The channel $c isn't valid! Syntax: \002$::lastbind #channel\002"; return 1 } elseif {![botonchan $c]} { putbanout $i $n "I'm not on $c! Syntax: \002$::lastbind #channel\002"; return 1 } elseif {![botisop $c]} { putbanout $i "I dont have op on $c! I can't remove bans!"; } listbans $i $c return 1 } proc dcc:delban {f i t} { set t [string trim [string tolower $t]] if {[string len [string trim $t]]==0} {putbanout $i "Syntax: \002$::lastbind #channel banmask\002"; return 1} foreach {c m} [split $t] {break} if {$m==""} { putbanout $i "Syntax: \002$::lastbind #channel banmask\002"; return 1 } elseif {![validchan $c]} { putbanout $i "The channel $c isn't valid!"; return 1 } elseif {![botonchan $c]} { putbanout $i $n "I'm not on $c!"; return 1 } elseif {![botisop $c]} { putbanout $i "I dont have op on $c! I can't remove bans!"; return 1 } removebans [hand2nick $f] $f $i $c $m return 1 } proc stringtopattern {string} {return [string map [list \\ \\\\ \[ \\\[ \] \\\] \* \\\* \? \\\?] $string]} proc stringtowildpattern {string} {return [string map [list \\ \\\\ \[ \\\[ \] \\\] ] $string]} proc putbanout {dest text} { if {[string is digit -strict $dest]} { putdcc $dest $text } elseif {[string index $dest 0]=="#"} { putmsg $dest $text } { putnotc $dest $text } } proc listbans {dest chan} { set num 0 set gb [banlist] set cb [banlist $chan] set cbl [chanbans $chan] set found 0; foreach ban $cbl { foreach {mask from since} $ban {break} if {[lsearch $cb *[stringtopattern $mask]*]==-1 && [lsearch $gb *[stringtopattern $mask]*]==-1} { if {!$found} {putbanout $dest "Channel Bans in $chan: (need to be op in channel)"; set found 1} incr num putbanout $dest "\[[format %4s $num]\] \002$mask\002 from \037$from\037"; set otxt [list] set etxt [duration $since] if {[lsearch [split $etxt] day*]!=-1} {set etxt [join [lrange [split $etxt] 0 [lsearch [split $etxt] day*]]]} lappend otxt "Since $etxt" putcmdlog "otxt:$otxt" putbanout $dest "[format %-6s ""] [join $otxt ", "]" } } set found 0; foreach ban $cb { foreach {mask comment expire added lastseen creator} $ban {break} if {!$found} {putbanout $dest "Bans in $chan: (need to be op in channel to remove)"; set found 1} incr num if {[lsearch $cbl *[stringtopattern $mask]*]==-1} {set active 0} {set active 1} putbanout $dest "\[[format %4s $num]\] \002$mask\002 from \037$creator\037"; set otxt [list] if {$comment!=""} {putbanout $dest "[format %-6s ""] reason: $comment"} if {$active} {lappend otxt "Active"} {lappend otxt "Inactive"} if {$expire!=0} { set etxt [duration [expr {$expire-[unixtime]}]] if {[lsearch [split $etxt] day*]!=-1} {set etxt [join [lrange [split $etxt] 0 [lsearch [split $etxt] day*]]]} lappend otxt "Expire in $etxt" } { lappend otxt "Never expire" } set etxt [duration [expr {[unixtime]-$added}]] if {[lsearch [split $etxt] day*]!=-1} {set etxt [join [lrange [split $etxt] 0 [lsearch [split $etxt] day*]]]} lappend otxt "Added $etxt ago" if {$lastseen!=0} { set etxt [duration [expr {[unixtime]-$lastseen}]] if {[lsearch [split $etxt] day*]!=-1} {set etxt [join [lrange [split $etxt] 0 [lsearch [split $etxt] day*]]]} lappend otxt "Seen $etxt ago" } { lappend otxt "Never seen" } if {$otxt!=[list]} {putbanout $dest "[format %-6s ""] [join $otxt ", "]"} } set found 0; foreach ban $gb { foreach {mask comment expire added lastseen creator} $ban {break} if {!$found} {putbanout $dest "Global Bans: (need to be global op or channel master to remove)"; set found 1} incr num if {[lsearch $cbl *[stringtopattern $mask]*]==-1} {set active 0} {set active 1} putbanout $dest "\[[format %4s $num]\] \002$mask\002 from \037$creator\037"; set otxt [list] if {$comment!=""} {putbanout $dest "[format %-6s ""] reason: $comment"} if {$active} {lappend otxt "Active"} {lappend otxt "Inactive"} if {$expire!=0} { set etxt [duration [expr {$expire-[unixtime]}]] if {[lsearch [split $etxt] day*]!=-1} {set etxt [join [lrange [split $etxt] 0 [lsearch [split $etxt] day*]]]} lappend otxt "Expire in $etxt" } { lappend otxt "Never expire" } set etxt [duration [expr {[unixtime]-$added}]] if {[lsearch [split $etxt] day*]!=-1} {set etxt [join [lrange [split $etxt] 0 [lsearch [split $etxt] day*]]]} lappend otxt "Added $etxt ago" if {$lastseen!=0} { set etxt [duration [expr {[unixtime]-$lastseen}]] if {[lsearch [split $etxt] day*]!=-1} {set etxt [join [lrange [split $etxt] 0 [lsearch [split $etxt] day*]]]} lappend otxt "Seen $etxt ago" } { lappend otxt "Never seen" } if {$otxt!=[list]} {putbanout $dest "[format %-6s ""] [join $otxt ", "]"} } if {$num==0} { putbanout $dest "I dont have found any bans on $chan." } } proc removebans {nick hand dest chan remove} { set num 0 set gb [banlist] set cb [banlist $chan] set cbl [chanbans $chan] set found 0 if {![isop $nick $chan] && ![matchattr $hand nmo|nmo $chan]} { putbanout $dest "You have not enough rights to remove bans." return } foreach ban $cbl { foreach {mask from since} $ban {break} if {[lsearch $cb *[stringtopattern $mask]*]==-1 && [lsearch $gb *[stringtopattern $mask]*]==-1} { incr num if {[string is digit -strict $remove] && $remove==$num} { putbanout $dest "Remove other ban $num with mask $mask" pushmode $chan -b $mask set found 1 } elseif {![string is digit -strict $remove] && ([string match -nocase $remove $mask] || [string equal -nocase $remove $mask])} { putbanout $dest "Remove other ban $num with mask $mask" pushmode $chan -b $mask set found 1 } } } foreach ban $cb { foreach {mask comment expire added lastseen creator} $ban {break} incr num if {[string is digit -strict $remove] && $remove==$num} { if {[killchanban $chan $mask]} { set found 1 putbanout $dest "Remove channel ban $num with mask $mask" } { putbanout $dest "Failed to remove channel ban $num with mask $mask" } } elseif {![string is digit -strict $remove] && ([string match -nocase $remove $mask] || [string equal -nocase $remove $mask])} { if {[killchanban $chan $mask]} { putbanout $dest "Remove channel ban $num with mask $mask" set found 1 } { putbanout $dest "Failed to remove channel ban $num with mask $mask" } } } foreach ban $gb { foreach {mask comment expire added lastseen creator} $ban {break} incr num if {[string is digit -strict $remove] && $remove==$num && [matchattr $hand nmo|nm $chan]} { if {[killban $mask]} { putbanout $dest "Remove global ban $num with mask $mask" set found 1 } { putbanout $dest "Failed to remove global ban $num with mask $mask" } } elseif {![string is digit -strict $remove] && ([string match -nocase $remove $mask] || [string equal -nocase $remove $mask]) && [matchattr $hand nmo|nm $chan]} { if {[killban $mask]} { putbanout $dest "Remove global ban $num with mask $mask" set found 1 } { putbanout $dest "Failed to remove global ban $num with mask $mask" } } elseif {![matchattr $hand nmo|nm $chan]} { putbanout $dest "You have not enough rights to remove global bans." } } if {$num==0} { putbanout $dest "I dont have found any bans on $chan." } elseif {$found==0} { putbanout $dest "I dont have found any bans with $remove" } } bind pub - !banlist pub:banlist bind pub - !banlists pub:banlist bind pub - !listban pub:banlist bind pub - !listbans pub:banlist bind msg - banlist msg:banlist bind msg - banlists msg:banlist bind msg - listban msg:banlist bind msg - listbans msg:banlist bind msg - !banlist msg:banlist bind msg - !banlists msg:banlist bind msg - !listban msg:banlist bind msg - !listbans msg:banlist bind dcc - banlists dcc:banlist bind dcc - listbans dcc:banlist bind pub - !delban pub:delban bind pub - !delbans pub:delban bind pub - !removeban pub:delban bind pub - !removebans pub:delban bind pub - !bandel pub:delban bind pub - !banremove pub:delban bind pub - !unban pub:delban bind msg - delban msg:delban bind msg - delbans msg:delban bind msg - removeban msg:delban bind msg - removebans msg:delban bind msg - bandel msg:delban bind msg - banremove msg:delban bind msg - unban msg:delban bind msg - !delban msg:delban bind msg - !delbans msg:delban bind msg - !removeban msg:delban bind msg - !removebans msg:delban bind msg - !bandel msg:delban bind msg - !banremove msg:delban bind msg - !unban msg:delban bind dcc - delbans dcc:delban bind dcc - removebans dcc:delban bind dcc - unban dcc:delban putlog "BanManager loaded" return "load \"[info script]\",8,1\nloading\nready\nrun"