From 509369f59d24ba83dd67f1e2e8372b1f3150cfe0 Mon Sep 17 00:00:00 2001 From: Teh PeGaSuS Date: Sat, 28 Feb 2026 23:16:04 +0100 Subject: [PATCH] Update Chanban/chanban.tcl --- Chanban/chanban.tcl | 156 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 154 insertions(+), 2 deletions(-) diff --git a/Chanban/chanban.tcl b/Chanban/chanban.tcl index 389d04f..77f94d3 100644 --- a/Chanban/chanban.tcl +++ b/Chanban/chanban.tcl @@ -41,6 +41,21 @@ namespace eval cmgmt { # 9 nick!*@*.host variable banMask "2" + # Channel flag to auto add bans to the bot ban list + setudef flag addBans + + # Nicks to ignore for auto adding bans + variable noAddNicks { + "ChanServ" + "NickServ" + "ChanBot" + } + + # Masks to ignore for auto adding bans + variable noAddMasks { + "*!*@services.network.tld" + } + # ---------- # Binds # ---------- @@ -50,6 +65,7 @@ namespace eval cmgmt { bind pub * ${::cmgmt::trigger}kick ::cmgmt::kick_pub bind pub * ${::cmgmt::trigger}unban ::cmgmt::unban_pub bind pub * ${::cmgmt::trigger}banlist ::cmgmt::banlist_pub + bind pub * ${::cmgmt::trigger}autoadd ::cmgmt::autoadd_pub bind pub * ${::cmgmt::trigger}opcmds ::cmgmt::opcmds_pub ### Private @@ -58,7 +74,14 @@ namespace eval cmgmt { bind msg * kick ::cmgmt::kick_msg bind msg * unban ::cmgmt::unban_msg bind msg * banlist ::cmgmt::banlist_msg + bind msg * autoadd ::cmgmt::autoadd_msg bind msg * opcmds ::cmgmt::opcmds_msg + + # ---------- + # Auto add bans + # ---------- + bind mode * * ::cmgmt::abans + # ---------- # End of configuration # ---------- @@ -68,7 +91,24 @@ namespace eval cmgmt { # # If you touch the code below and then complain the script "suddenly stopped working" I'll touch you at night. # ---------- - variable scriptName "Channel Management v1.0 by PeGaSuS" + variable scriptName "Channel Management v1.1 by PeGaSuS" + + # ---------- + # Auto add bans + # ---------- + proc abans {nick uhost hand chan mode target} { + set hostmask [maskhost ${nick}![getchanhost $nick $chan] 2] + set banReason "$::cmgmt::banReason \(auto-added\)" + if {$mode eq "+b" && [channel get $chan addBans]} { + if {$nick ne $::botnick && $nick ni $::cmgmt::noAddNicks && $hostmask ni $::cmgmt::noAddMasks && ![matchstr "~*" $target] && ![isban $target $chan]} { + newchanban $chan $target $nick $banReason 0 + putserv "PRIVMSG $chan :$target auto-added to ${chan}'s ban list." + return 0 + } else { + return 0 + } + } + } # ---------- # Public procs @@ -253,6 +293,56 @@ namespace eval cmgmt { return 0 } + ### Auto add bans + proc autoadd_pub {nick uhost hand chan text} { + if {![matchattr $hand o|o $chan]} { + putserv "NOTICE $nick :ERROR! You don't have access, ${nick}." + return 0 + } + + set option [lindex [split $text] 0] + + switch $option { + on { + if {[channel get $chan addBans]} { + putserv "PRIVMSG $chan :ERROR! Automatic ban adding is already enabled on ${chan}." + return 0 + } else { + channel set $chan +addBans + putserv "PRIVMSG $chan :SUCCESS! Automatic ban adding enabled on ${chan}." + return 0 + } + } + + off { + if {![channel get $chan addBans]} { + putserv "PRIVMSG $chan :ERROR! Automatic ban adding is already disabled on ${chan}." + return 0 + } else { + channel set $chan -addBans + putserv "PRIVMSG $chan :SUCCESS! Automatic ban adding disabled on ${chan}." + return 0 + } + } + + status { + if {[channel get $chan addBans]} { + set turned "enabled" + } else { + set turned "disabled" + } + putserv "PRIVMSG $chan :STATUS: Automatic ban adding is $turned on ${chan}." + return 0 + } + + default { + putserv "PRIVMSG $chan :ERROR! Syntax ${::cmgmt::trigger}autoadd " + return 0 + } + } + return 0 + } + ### OPcmds proc opcmds_pub {nick uhost hand chan text} { if {![matchattr $hand o|o $chan]} { @@ -260,7 +350,7 @@ namespace eval cmgmt { return 0 } - putserv "PRIVMSG $chan :Available commands ${::cmgmt::trigger}ban, ${::cmgmt::trigger}tban, ${::cmgmt::trigger}kick, ${::cmgmt::trigger}unban, ${::cmgmt::trigger}banlist" + putserv "PRIVMSG $chan :Available commands ${::cmgmt::trigger}ban, ${::cmgmt::trigger}tban, ${::cmgmt::trigger}kick, ${::cmgmt::trigger}unban, ${::cmgmt::trigger}banlist, ${::cmgmt::trigger}autoadd" return 0 } @@ -506,6 +596,68 @@ namespace eval cmgmt { return 0 } + ### Auto add bans + proc autoadd_pub {nick uhost hand text} { + set chan [lindex [split $text] 0] + + if {![matchstr "#*" $chan]} { + putserv "PRIVMSG $nick :ERROR! Syntax: autoadd <#chan> " + return 0 + } + + if {![validchan $chan]} { + putserv "PRIVMSG $nick :ERROR! I'm not on ${chan}!" + return 0 + } + + if {![matchattr $hand o|o $chan]} { + putserv "PRIVMSG $nick :ERROR! You don't have access, ${nick}." + return 0 + } + + set option [lindex [split $text] 1] + + switch $option { + on { + if {[channel get $chan addBans]} { + putserv "PRIVMSG $nick :ERROR! Automatic ban adding is already enabled on ${chan}." + return 0 + } else { + channel set $chan +addBans + putserv "PRIVMSG $nick :SUCCESS! Automatic ban adding enabled on ${chan}." + return 0 + } + } + + off { + if {![channel get $chan addBans]} { + putserv "PRIVMSG $nick :ERROR! Automatic ban adding is already disabled on ${chan}." + return 0 + } else { + channel set $chan -addBans + putserv "PRIVMSG $nick :SUCCESS! Automatic ban adding disabled on ${chan}." + return 0 + } + } + + status { + if {[channel get $chan addBans]} { + set turned "enabled" + } else { + set turned "disabled" + } + putserv "PRIVMSG $nick :STATUS: Automatic ban adding is $turned on ${chan}." + return 0 + } + + default { + putserv "PRIVMSG $nick :ERROR! Syntax autoadd <#chan> " + return 0 + } + } + return 0 + } + ### Opcmds proc opcmds_msg {nick uhost hand text} { set chan [lindex [split $text] 0]