Something like this:
on me::join:#: {
mode $chan +b
.timer 1 2 banlock_build $chan
}
alias banlock_build {
var %x = 1
while (%x <= $ibl($1,0)) {
if ($ibl($1,%x).by == $me) hadd -m banlock $+($1,.,$ibl($1,%x))
inc %x
}
}
on me::ban:#: {
hadd -m banlock $+($chan,.,$banmask)
}
on !:unban:#: {
if ($hfind(banlock,$+($chan,.,$banmask),w,1)) || ($hfind(banlock,$+($chan,.,$banmask),W,1)) {
if ($me isop $chan) || ($me ishop $chan) mode $chan +b $banmask
}
}
raw 367:: halt
raw 368:*: halt