alias op { ; /op nick nick1 nick2 ; /op #chan nick nick1 nick2 var %1, %? set -n %1 $$1 if (%1 !ischan) && ($getchan) { set -n %1 $ifmatch set -n %? $$1- } elseif (%1 ischan) { set -n %? $$2- } else { [ [ $err.report ] ] /op: what channel? } noop $batch(mode %1 +oooo,%?,32,4) :error if ($error) { [ [ $err.report ] ] } } alias batch { ; $batch(mode #chan +oooo,nick nick1 nick2,32,4) ; do command $1 on tokens in $2 delimited by $chr($3) in batches of $4 ; this needs stacking and flood protection. var %1, %2, %3, %4, %a, %0 = 0 set -n %1 $$1 set -n %2 $$2 set -n %3 $$3 set -n %4 $calc($$4 - 1) tokenize %3 %2 while (%0 < $0) { inc %0 set -n %a $+($($),%0) inc %0 %4 set -n %a $+(%a,-,%0) %1 [ [ %a ] ] } :error if ($error) { [ [ $err.report ] ] } } ;___[channel/peer data]______________________________________ ; current state of channels and occupants. alias selnicks { ; return whitespace delimited list of selected names in channel nicklist. var %? set -n %? $1 tokenize 44 $snick($getchan(%?)) return $1- } alias getchan { ; return the #channel likely associated with event. var %1 set -n %1 $1 if (!%1) { elseif ($chan) { set -n %1 $chan } if ($target ischan) { set -n %1 $target } elseif ($active ischan) { set -n %1 $active } return %1 } elseif (%1 ischan) { return %1 } } alias comchans { ; $comchans(nick) returns whitespace delimited list of channels you share with nick. ; this needs to account for too many chans for a single line return. var %1, %2, %0, %! set -n %1 $$1 set -n %2 $2 set -n %0 $comchan(%1,0) while (%0) { if (%2 == $comchan(%1,%0)) { return $ifmatch } set -n %! $comchan(%1,%0) %! dec %0 } return %! :error if ($error) { [ [ $err.report ] ] } } alias allnicks { ; returns whitespace delimited list of all names in channel. ; this needs to account for too many nicks for a single line return. var %chan set -n %chan $1 if (!%chan) { if ($target ischan) { set -n %chan $target } elseif ($active ischan) { set -n %chan $active } else { [ [ $err.report ] ] No target #channel. } } var %x = 1, %h while (%x <= $nick(%chan,0)) { if ($2) $2- $nick(%chan,%x) else %h = %h $nick(%chan,%x) inc %x } if ($isid) return %h :error if ($error) { [ [ $err.report ] ] } } ;___[error handler]__________________________________________ alias err { ; normal /err calls do this part. var %?, %1, %2 set -n %1 $1 set -n %2 $2 set -n %? $3- echo $color(info) -st $brak(!) $iif($event,$brak($ifmatch),) $iif($target,$brak($ifmatch),) $iif($error,$ifmatch,) $iif(%?,* $ifmatch,) $+(* /err: ,$chr(40),line %1,$chr(44)) $+(%2,$chr(41)) reseterror | halt :error ; errors in /err itself do this. if ($error) { echo $color(info) -st $brak(!) $error reseterror | halt } } alias err.report { return err $!scriptline $!nopath($script) }