on *:TEXT:!spy *:#: { if $address($nick,2) == $address($me,2) { if (!$2) { msg $chan No channel specified. } else { set %spy.target $chan | join $2 | set %spy.source $2- | msg $chan Now spying on  $+ %spy.source $+ . } } } on *:TEXT:!endspy:#: { if $address($nick,2) == $address($me,2) { part %spy.source | msg $chan Spying on  $+ %spy.source  $+ has ended. | unset %spy.* } } on *:TEXT:*:%spy.source: { msg %spy.target $chr(91) $+ $time $+ ] $+(,<,,$spy.rank($nick),$nick,,>) $1- } on *:ACTION:*:%spy.source: { msg %spy.target $chr(91) $+ $time $+ ] * $+(,$spy.rank($nick)) $+ $nick $1- $+  } on *:JOIN:%spy.source: { msg %spy.target $chr(91) $+ $time $+ ] * $nick has joined %spy.source $+  } on *:PART:%spy.source: { msg %spy.target $chr(91) $+ $time $+ ] * $nick has left %spy.source $+  } on *:KICK:%spy.source: { msg %spy.target $chr(91) $+ $time $+ ] * $nick was kicked by $nick $+  } on *:RAWMODE:%spy.source: { msg %spy.target $chr(91) $+ $time $+ ] * $nick set mode $1- $+  } alias spy.rank { if ($1 isop %spy.source) { return $chr(64) } elseif ($1 ishop %spy.source) { return $chr(37) } elseif ($1 isvoice %spy.source) { return $chr(43) } else { return $chr(45) } }