namespace eval modecontrol {
variable enforceModes "nt" #Always keep these set
variable restrictModes "+ikl" #Never permit these to be set
proc raw:modeCheck {from key text} {
variable enforceModes
variable restrictModes
set from [split $from "!"]
set nick [lindex $from 0]
set handle [nick2hand $nick]
#Sanity check
if {[isbotnick $nick] || [matchattr $handle "+mnb"]} { return 0 }
set items [split $text]
set enforce [split $enforceModes ""]
set restrict [split $restrictModes ""]
set target [lindex $items 0]
set add 1
set act 0
if {[matchattr [nick2hand $nick] n $target] || [isbotnick $nick]} { return 0 }
foreach mode [split [lindex $items 1] ""] {
switch -- $mode {
"+" {
set add 1
}
"-" {
set add 0
}
"I" -
"e" -
"b" {
set items [lreplace $items 2 2]
}
"k" {
if {$add} {
set key [lindex $items 2]
set items [lreplace $items 2 2]
}
}
"l" {
if {$add} {
set limit [lindex $items 2]
set items [lreplace $items 2 2]
}
}
default {
if {[lsearch $enforce $mode] >= 0 && !$add} {
pushmode $target "+$mode"
set act 1
} elseif {[lsearch $restrict $mode] >= 0 && $add} {
pushmode $target "-$mode"
set act 1
}
}
}
#Uncomment this to bounce key and limits
if {[info exists key]} {
pushmode $target -k $key
}
if {[info exists limit]} {
pushmode $target -l
}
}
if {$act && [llength $from] > 1} {
#puthelp "NOTICE $nick :Please let me handle the channel mode settings."
}
flushmode $target
return 0
}
bind raw - "MODE" [namespace current]::raw:modeCheck
}
15:55:28 @Motley Sets Mode on #test to: +l 22
15:55:28 @Silver-Eagle Sets Mode on #test to: -lk MODE
15:55:33 @Motley Sets Mode on #test to: -l
15:55:33 @Silver-Eagle Sets Mode on #test to: -k MODE
15:55:45 @Motley Sets Mode on #test to: -k kjdkjd
15:55:45 @Silver-Eagle Sets Mode on #test to: -k MODE
15:55:50 @Motley Sets Mode on #test to: +k kjdkjd
15:55:50 @Silver-Eagle Sets Mode on #test to: -k kjdkjd
15:55:59 @Motley Sets Mode on #test to: +v Motley
15:55:59 @Silver-Eagle Sets Mode on #test to: -k MODE
15:56:11 @Motley Sets Mode on #test to: +o Motley
15:56:11 @Silver-Eagle Sets Mode on #test to: -k MODE
while what is expected is
@Motley Sets Mode on #test to: +l 22
@Motley Sets Mode on #test to: -l
@Motley Sets Mode on #test to: -k kjdkjd
@Motley Sets Mode on #test to: +k kjdkjd
@Silver-Eagle Sets Mode on #test to: -k kjdkjd
@Motley Sets Mode on #test to: +v Motley
@Motley Sets Mode on #test to: +o Motley
Last edited by simo on Sat Oct 01, 2022 1:31 pm, edited 1 time in total.