Update Chanban/cmgmt.tcl

This commit is contained in:
Teh PeGaSuS
2026-03-05 14:41:07 +01:00
parent 646491f3a0
commit 92c67edbe7
+233
View File
@@ -39,6 +39,10 @@ namespace eval cmgmt {
# 9 nick!*@*.host
variable banMask "2"
# Mask type to be used when adding an op. Same types as above
# We advise to use 1, as it's more secure
variable addOpMask "1"
# Masks to protect from bans, always on the format *!ident@hostname
variable protectMasks {
*!*@services.ptirc.org
@@ -70,6 +74,9 @@ namespace eval cmgmt {
bind pub * ${::cmgmt::trigger}banlist ::cmgmt::banlist_pub
bind pub * ${::cmgmt::trigger}autoadd ::cmgmt::autoban_pub
bind pub * ${::cmgmt::trigger}opcmds ::cmgmt::opcmds_pub
bind pub * ${::cmgmt::trigger}addop ::cmgmt::addop_pub
bind pub * ${::cmgmt::trigger}delop ::cmgmt::delop_pub
bind pub * ${::cmgmt::trigger}ops ::cmgmt::chanops_pub
### Private
bind msg * addban ::cmgmt::addban_msg
@@ -82,6 +89,9 @@ namespace eval cmgmt {
bind msg * banlist ::cmgmt::banlist_msg
bind msg * autoadd ::cmgmt::autoban_msg
bind msg * opcmds ::cmgmt::opcmds_msg
bind msg * addop ::cmgmt::addop_msg
bind msg * delop ::cmgmt::delop_msg
bind msg * ops ::cmgmt::chanops_msg
# ----------
# Auto add bans
@@ -509,6 +519,100 @@ namespace eval cmgmt {
return 0
}
### Pub Addop
proc addop_pub {nick uhost hand chan text} {
set target [lindex [split $text] 0]
if {![matchattr $hand n]} {
putserv "NOTICE $nick :[format [::msgcat::mc error.no.access] $nick]"
return 0
}
if {$target eq ""} {
putserv "PRIVMSG $chan :[format [::msgcat::mc error.syntax] $::cmgmt::trigger]addop <nick>"
return 0
}
if {![onchan $target $chan]} {
putserv "PRIVMSG $chan :[format [::msgcat::mc not.on.chan] $target $chan]"
return 0
}
if {$target eq "$::botnick"} {
return 0
}
set opMask [maskhost ${target}![getchanhost $target $chan] $::cmgmt::addOpMask]
if {[validuser $target]} {
if {[matchattr [nick2hand $target] mno|o $chan]} {
putserv "PRIVMSG $chan :[format [::msgcat::mc got.oflag] $target $chan]"
return 0
} else {
chattr $target |+o $chan
putserv "PRIVMSG $chan :[format [::msgcat::mc added.chanop] $target $chan]"
return 0
}
}
adduser $target $opMask
chattr $target |+o $chan
putserv "PRIVMSG $chan :[format [::msgcat::mc added.chanop] $target $chan]"
return 0
}
### Pub Delop
proc delop_pub {nick uhost hand chan text} {
set visop 0
if {![matchattr $hand n]} {
putserv "NOTICE $nick :[format [::msgcat::mc error.no.access] $nick]"
return 0
}
set target [lindex [split $text] 0]
if {$target eq ""} {
putserv "PRIVMSG $chan :[format [::msgcat::mc error.syntax] $::cmgmt::trigger]delop <nick>"
return 0
}
if {![validuser $target]} {
putserv "PRIVMSG $chan :[format [::msgcat::mc inexistent.user] $target]"
return 0
}
set user [nick2hand $target]
chattr $user |-o $chan
foreach tc [channels] {
if {[matchattr $user |o $tc]} {
incr visop
}
}
if {$visop == 0 && ![matchattr $user mno]} {
deluser $user
putserv "PRIVMSG $chan :[format [::msgcat::mc op.deleted] $target $chan]"
putserv "NOTICE $nick :[format [::msgcat::mc db.user.deleted] $target]"
return 0
} else {
putserv "PRIVMSG $chan :[format [::msgcat::mc op.deleted] $target $chan]"
return 0
}
}
# Pub Ops
proc chanops_pub {nick uhost hand chan text} {
if {![matchattr $hand n]} {
putserv "NOTICE $nick :[format [::msgcat::mc error.no.access] $nick]"
return 0
}
putserv "PRIVMSG $chan :[format [::msgcat::mc chanop.list] $chan] [join [userlist |o $chan] {, }]"
return 0
}
# ----------
# Private procs
# ----------
@@ -999,6 +1103,135 @@ namespace eval cmgmt {
return 0
}
### PM Addop
proc addop_msg {nick uhost hand text} {
set chan [lindex [split $text] 0]
if {![matchstr "#*" $chan]} {
putserv "PRIVMSG $nick :[::msgcat::mc pm.error.syntax] addop <#chan> <nick>"
return 0
}
if {![validchan $chan]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc bot.not.onchan] $chan]"
return 0
}
if {![matchattr $hand n]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc error.no.access] $nick]"
return 0
}
set target [lindex [split $text] 1]
if {$target eq ""} {
putserv "PRIVMSG $nick :[format [::msgcat::mc error.syntax] $::cmgmt::trigger]addop <#chan> <nick>"
return 0
}
if {![onchan $target $chan]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc not.on.chan] $target $chan]"
return 0
}
if {$target eq "$::botnick"} {
return 0
}
set opMask [maskhost ${target}![getchanhost $target $chan] $::cmgmt::addOpMask]
if {[validuser $target]} {
if {[matchattr [nick2hand $target] mno|o $chan]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc got.oflag] $target $chan]"
return 0
} else {
chattr $target |+o $chan
putserv "PRIVMSG $nick :[format [::msgcat::mc added.chanop] $target $chan]"
return 0
}
}
adduser $target $opMask
chattr $target |+o $chan
putserv "PRIVMSG $nick :[format [::msgcat::mc added.chanop] $target $chan]"
return 0
}
### PM Delop
proc delop_msg {nick uhost hand text} {
set chan [lindex [split $text] 0]
set visop 0
if {![matchstr "#*" $chan]} {
putserv "PRIVMSG $nick :[::msgcat::mc pm.error.syntax] delop <#chan> <nick>"
return 0
}
if {![validchan $chan]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc bot.not.onchan] $chan]"
return 0
}
if {![matchattr $hand n]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc error.no.access] $nick]"
return 0
}
set target [lindex [split $text] 1]
if {$target eq ""} {
putserv "PRIVMSG $nick :[format [::msgcat::mc error.syntax] $::cmgmt::trigger]delop <#chan> <nick>"
return 0
}
if {![validuser $target]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc inexistent.user] $target]"
return 0
}
set user [nick2hand $target]
chattr $user |-o $chan
foreach tc [channels] {
if {[matchattr $user |o $tc]} {
incr visop
}
}
if {$visop == 0 && ![matchattr $user mno]} {
deluser $user
putserv "PRIVMSG $nick :[format [::msgcat::mc op.deleted] $target $chan]"
putserv "PRIVMSG $nick :[format [::msgcat::mc db.user.deleted] $target]"
return 0
} else {
putserv "PRIVMSG $nick :[format [::msgcat::mc op.deleted] $target $chan]"
return 0
}
}
# PM Ops
proc chanops_msg {nick uhost hand text} {
set chan [lindex [split $text] 0]
if {![matchstr "#*" $chan]} {
putserv "PRIVMSG $nick :[::msgcat::mc pm.error.syntax] ops <#chan>"
return 0
}
if {![validchan $chan]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc bot.not.onchan] $chan]"
return 0
}
if {![matchattr $hand n]} {
putserv "PRIVMSG $nick :[format [::msgcat::mc error.no.access] $nick]"
return 0
}
putserv "PRIVMSG $nick :[format [::msgcat::mc chanop.list] $chan] [join [userlist |o $chan] {, }]"
return 0
}
# ---------- DON'T TOUCH UNLESS YOU KNOW WHAT YOU'RE DOING ---------- #
# ----------
# Auto add bans