From d69afe130b30a4bb2074902018f48217db47e67a Mon Sep 17 00:00:00 2001 From: Teh PeGaSuS Date: Mon, 2 Mar 2026 01:14:20 +0100 Subject: [PATCH] Update Chanban/chanban.tcl Improve protection logic and code --- Chanban/chanban.tcl | 63 ++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/Chanban/chanban.tcl b/Chanban/chanban.tcl index e778b3e..d918416 100644 --- a/Chanban/chanban.tcl +++ b/Chanban/chanban.tcl @@ -44,9 +44,9 @@ namespace eval cmgmt { # 9 nick!*@*.host variable banMask "2" - # Masks to protect from bans + # Masks to protect from bans, always on the format *!ident@hostname variable protectMasks { - "*!*@services.ptirc.org" + *!*@services.ptirc.org } # Mask type to use to track hostmasks that should not trigger auto adding bans @@ -55,14 +55,14 @@ namespace eval cmgmt { # Nicks to ignore for auto adding bans variable noAddNicks { - "ChanServ" - "NickServ" - "ChanBot" + ChanServ + NickServ + ChanBot } # Masks to ignore for auto adding bans variable noAddMasks { - "*!*@services.ptirc.org" + *!*@services.ptirc.org } # ---------- @@ -112,14 +112,41 @@ namespace eval cmgmt { # ---------- proc abans {nick uhost hand chan mode target} { # putlog "DEBUG autobans: nick=$nick chan=$chan mode=$mode target=$target" - set hostmask [maskhost ${nick}![getchanhost $nick $chan] $::cmgmt::noAddType] set banReason "$::cmgmt::banReason \(auto-added\)" - if {![channel get $chan addBans]} { - return 0 - } + if {$nick ne "$::botnick" && $nick ni $::cmgmt::noAddNicks} { + foreach pmask $::cmgmt::protectMasks { + if {[matchstr $pmask $target] || [matchstr $target $pmask]} { + pushmode $chan -b $target + flushmode $chan + return 0 + } + } - if {$nick ne "$::botnick" && $nick ni $::cmgmt::noAddNicks && $hostmask ni $::cmgmt::noAddMasks && $hostmask ni $::cmgmt::protectMasks} { + foreach nmask $::cmgmt::noAddMasks { + if {[matchstr $nmask $target] || [matchstr $target $nmask]} { + pushmode $chan -b $target + flushmode $chan + return 0 + } + } + + foreach user [userlist] { + if {[matchattr $user mno|mno $chan]} { + foreach host [getuser $user HOSTS] { + if {[matchstr $target $host] || [matchstr $host $target]} { + pushmode $chan -b $target + flushmode $chan + return 0 + } + } + } + } + + if {![channel get $chan addBans]} { + return 0 + } + # We also need to deal with the addition of extbans, since we don't deal with them internally if {[matchstr "~*" $target] && ![isban $target $chan]} { newchanban $chan $target $nick EXTBAN 0 sticky @@ -140,10 +167,10 @@ namespace eval cmgmt { } if {$nick ne "$::botnick"} { - if {[matchstr "~*" $target] && ![isban $target $chan]} { + if {[matchstr "~*" $target] && [isban $target $chan]} { killchanban $chan $target return 0 - } else { + } elseif {[isban $target $chan]} { killchanban $chan $target putserv "PRIVMSG $chan :$target auto-removed from ${chan}'s ban list." return 0 @@ -205,7 +232,7 @@ namespace eval cmgmt { set bhost [string trim [getchanhost $target $chan] ~] foreach pmask $::cmgmt::protectMasks { - if {[matchstr $pmask "${target}!$bhost"]} { + if {[matchstr $pmask "${target}!$bhost"] || [matchstr "${target}!$bhost" $pmask]} { putserv "NOTICE $nick :You can't use this command on the nick $target." return 0 } @@ -256,7 +283,7 @@ namespace eval cmgmt { set bhost [string trim [getchanhost $target $chan] ~] foreach pmask $::cmgmt::protectMasks { - if {[matchstr $pmask "${target}!$bhost"]} { + if {[matchstr $pmask "${target}!$bhost"] || [matchstr "${target}!$bhost" $pmask]} { putserv "NOTICE $nick :You can't use this command on the nick $target." return 0 } @@ -497,7 +524,7 @@ namespace eval cmgmt { set bhost [string trim [getchanhost $target $chan] ~] foreach pmask $::cmgmt::protectMasks { - if {[matchstr $pmask "${target}!$bhost"]} { + if {[matchstr $pmask "${target}!$bhost"] || [matchstr "${target}!$bhost" $pmask]} { putserv "PRIVMSG $nick :You can't use this command on the nick $target." return 0 } @@ -560,7 +587,7 @@ namespace eval cmgmt { set bhost [string trim [getchanhost $target $chan] ~] foreach pmask $::cmgmt::protectMasks { - if {[matchstr $pmask "${target}!$bhost"]} { + if {[matchstr $pmask "${target}!$bhost"] || [matchstr "${target}!$bhost" $pmask]} { putserv "PRIVMSG $nick :You can't use this command on the nick $target." return 0 } @@ -705,7 +732,7 @@ namespace eval cmgmt { set tstamp [lindex $botban 3] set date [clock format $tstamp -format "%d/%m/%Y - %H:%M:%S"] set creator [lindex $botban end] - puts $blist "\[${i}\] Banmask: $banmask :: Added by: $creator :: Date: $date" + puts $blist "\[${i}\] Banmask: $banmask :: Reason: $freason :: Added by: $creator :: Date: $date" puts $blist "" incr i }