Peace & Protection 4.00 — File Browser

PeaceProtection4.00v4.0 / PeaceProtection4.00v4.0 / SCRIPT / AWAY.MRC

AWAY.MRC — 28.61 KB — Download this file

; #= P&P -rs
; ########################################
; Peace & Protection
; Away system
; ########################################

on *:OPEN:=:{
  if ($group(#_awaylog) == on) _awaylog @ 11 === $nick opened a DCC chat
  ; If we're away and chat was auto-accepted, say something
  if ((%!away) && ($gettok(%_chat.open. [ $+ [ $nick ] ] ,1,32) == auto)) $iif($_cfgi(away.act),describe,msg) =$nick $_awayformat(awaychat)
}

on *:CONNECT:{
  if ($group(#_awaylog) == on) _awaylog @ 12 »»» You connected to $server : $port
  if (%!away) {
    disps Setting away on server... 
    _upd.away
    if (%-oldawaymode == $null) %-oldawaymode = $_cfgi(umode)
  }
  else resetidle
}
alias _aa.chk if (($server) && (%!away == $null) && (%`autoaway) && ($idle >= %`autoaway.time) && ((%_autoatime == $null) || (%_autoatime < 1))) aa.popup
alias -l aa.popup {
  _ssplay setautoaway 1
  if ($_cfgi(autoaway.ask)) {
    _dialog -mdo autoaway autoaway
    %_autoatime = 16
    .timer.aawarning -o 0 1 aa.upd
  }
  else autoaway now
}
alias -l aacancel resetidle | .timer.aawarning off | unset %_autoatime
alias -l aa.upd {
  if ($dialog(autoaway) == $null) { aacancel | return }
  dec %_autoatime
  if (%_autoatime == 0) {
    dialog -x autoaway
    autoaway now
  }
  else did -o autoaway 102 1 %_autoatime seconds
}
; autoaway [+/-qlp] [on|off|#|now]
alias autoaway {
  var %act = $1
  if ($left($1,1) isin +-) {
    var %modes = $_fixmode($1)
    if (q isin %modes) {
      _cfgw autoaway.quiet $_convmode(%modes,q)
      dispa Quiet auto-away is now $:b($_tf2o($_convmode(%modes,q)))
    }
    if (p isin %modes) pager auto $iif(. isin %modes,q,$_tf2o($_convmode(%modes,p)))
    if (l isin %modes) awaylog auto $_tf2o($_convmode(%modes,l))
    if ($2) %act = $2 | else return
  }
  if (%act == now) {
    .timer.aawarning off
    unset %_autoatime
    away +f $+ $iif($_cfgi(autoaway.pager),p,-p) $+ $iif($_cfgi(autoaway.log),+l,-l) $+ $iif($_cfgi(autoaway.quiet),+q,-q) $replace($_msg(autoaway),&min&,$calc(%`autoaway.time / 60))
  }
  else {
    if (%act isnum) {
      if ((%act > 0) && (%act isnum)) { `set autoaway.time %act * 60 | `set autoaway 1 }
      else { `set autoaway.time 600 | `set autoaway 0 }
    }
    elseif ((%act == on) || (%act == off)) `set autoaway $_o2tf(%act)
    if (%`autoaway) dispa Auto-away is $iif(%act,now) $:b(enabled) after $:t($calc(%`autoaway.time / 60)) min
    else dispa Auto-away is $iif(%act,now) $:b(disabled)
  }
}

alias -l _convpager if ((+. isin $1) && (+p isin $1)) return quiet | else return $_convmode($1,p,$2)

; away [+/-mode] [reason]
; mode contains q)uiet l)ogging p)ager s)ounds off b)eeps off m)essage privately c)hannel message n)ick r)epeating as +/- (ex +p-lq)
; mode contains a)sk to ask about reason even if given; f)orget to not remember as recent away msg
alias qa if ($left($1,1) isin -+) away $1 $+ +q $2- | else away +q $1-
alias a away $1-
alias away {
  var %nonick,%num,%count = 0
  if ($left($1,1) isin -+) { %_awmode = $_fixmode($1) | var %reason = $2- }
  else { %_awmode = + | var %reason = $1- }
  var %pager = $_convpager(%_awmode,$_cfgi(away.pager)),%log = $_convmode(%_awmode,l,$_cfgi(away.log)),%quiet = $_convmode(%_awmode,q,$_not($show))
  if (%reason) { if (+a isin %_awmode) %reason = $$dialog(away,away,-4) }
  else {
    set %.pager %pager
    set %.log %log
    set %.quiet %quiet
    set %.reason %reason
    %reason = $$dialog(away,away,-4)
    %pager = %.pager
    %log = %.log
    %quiet = %.quiet
  }
  %_awmode = $remove(%_awmode,+q,-q) $+ $iif(%quiet,+q)
  %!logging = %log
  if (%!logging) .enable #_awaylog
  %!pager = %pager
  if (%!away) {
    if ($gettok(%!away,4,32)) .ebeeps on
    if ($gettok(%!away,5,32)) .sound on
    if (+n isin $gettok(%!away,3,32)) { if (n !isin %_awmode) { %_awmode = %_awmode $+ +n | %nonick = 1 } }
    %!away = $gettok(%!away,1-2,32) %_awmode
    _away.logit - 9 ««« Reset away ( $+ %reason $+ )
  }
  else {
    if (%_newpages > 0) pager v 0 x
    else .pager f
    %_away.log = $_temp(awy)
    unset %_awaylog.*
    %_awaylog.^ = 0
    if ((n !isin %_awmode) && ($_cfgi(away.chnick))) %_awmode = %_awmode $+ +n
    %!away = $me $ctime %_awmode
    if ($_cfgi(awaylog.clear)) .remove %_away.log
    _away.logit - 9 ««« Set away ( $+ %reason $+ )
    if ($_cfgi(away.closeq)) {
      if ($query(0)) { _away.logit - 9 ««« Closed $query(0) query windows | close -m }
      dqwindow hide
    }
    if (($_cfgi(away.deop)) && ($server) && ($chan(0))) {
      %num = $chan(0)
      :loopd
      if ($me isop $chan(%num)) { _linedance .raw mode $chan(%num) -o $me | inc %count }
      if (%num > 1) { dec %num | goto loopd }
      if (%count) _away.logit - 9 ««« Deopped in %count channels
    }
    if ($_cfgi(away.dq)) .dqwindow on
  }
  var %beep = $_convmode(%_awmode,b,$_cfgi(away.beepoff)),%snd = $_convmode(%_awmode,s,$_cfgi(away.sndoff))
  if ((%beep) && ($_optn(3,28))) .ebeeps off
  else %beep = 0
  if ((%snd) && ($_optn(3,19))) _blackbox .sound off
  else %snd = 0
  %!away = %!away %beep %snd %reason
  if ($server) {
    if ($away == $false) {
      %-oldawaymode = $usermode
      var %newumode = $_cfgi(uaway),%oldumode = $_cfgi(umode)
      if ((s !isin $usermode) && (s isin %oldumode)) %newumode = $remove(%newumode,s)
      if ((w !isin $usermode) && (w isin %oldumode)) %newumode = $remove(%newumode,w)
      umode * %newumode $+ $remove($usermode,i,s,w)
    }
    _upd.away
  }
  .timer.awayrep off
  if (+q !isin %_awmode) {
    var %amsg = $_finalmsg($replace($_msg(away),&reason&,%reason,&pager&,$_tf2o(%pager),&logging&,$_tf2o(%log),&when&,$_time))
    if ($_convmode(%_awmode,m,$_cfgi(away.msg))) $iif($_cfgi(away.act),acme,acmsg) %amsg
    if (($chan(0)) && ($server)) if ($_convmode(%_awmode,c,$_cfgi(away.chan))) $iif($_cfgi(away.act),ame,amsg) %amsg
    if ($_convmode(%_awmode,r,$_cfgi(away.rep))) .timer.awayrep -o 0 $iif($_cfgi(away.delay) > 2,$calc($_cfgi(away.delay) * 60),300) _awayrep $_convmode(%_awmode,c,$_cfgi(away.chan)) $_convmode(%_awmode,m,$_cfgi(away.msg))
  }
  if ((+n isin %_awmode) && ($_not(%nonick))) {
    if ($_cfgi(away.nick)) nick $_finalmsg($replace($ifmatch,&me&,$me,&reason&,$gettok(%reason,1,32)))
    else nick $left($me,5) $+ Away
  }
  %!title = $_cfgi(title.away)
  _ssplay setaway 1
  <set.away> %!pager %!logging %reason
  if (+f !isin %_awmode) _recent2 away 9 %reason
  unset %_awmode %_awayword.*
}
alias -l _awayrep {
  var %amsg = $_awayformat(awayrep)
  if (($chan(0)) && ($server) && ($1)) $iif($_cfgi(away.act),ame,amsg) %amsg
  if ($2) $iif($_cfgi(away.act),acme,acmsg) %amsg
}

; back [+/-mode] [note]
; mode contains q)uiet p)ager m)essage privately c)hannel message n)ick
alias back {
  if ($left($1,1) isin -+) { var %mode = $_fixmode($1),%reason = $2- }
  else { var %mode = +,%reason = $1- }
  if ($show == $false) %mode = %mode $+ +q
  if (%!away == $null) {
    _okcancel 0 You are not away- Still announce back?
    %!away = $me $ctime + 0 0 $iif(%reason,%reason,away) | var %gone = ??,%reason
  }
  else var %gone = $_dur($calc($ctime - $gettok(%!away,2,32)))
  if ((+q isin $gettok(%!away,3,32)) && (q !isin %mode)) %mode = %mode $+ $iif($_yesno(1,You set away quietly- Return quietly too?),+q,-q)
  %!pager = $_convpager(%mode,$_cfgi(back.pager))
  _away.logit - 9 »»» Set back (gone %gone $+ )
  .disable #_awaylog
  .timer.dtqc off
  %!title = $_cfgi(title.here)
  if ($server) {
    .raw away
    if (%-oldawaymode) umode * %-oldawaymode
  }
  if ($_cfgi(away.dq)) .dqwindow off
  .timer.awayrep off
  if ($_convmode(%mode,n,$_convmode($gettok(%!away,3,32),n))) {
    if ($gettok(%!away,1,32) !== $me) {
      nick $ifmatch
      .timer.nickdelay off
    }
  }
  if (+q !isin %mode) {
    var %amsg = $_finalmsg($replace($_msg($iif(%reason,backnote,back)),&reason&,$gettok(%!away,6-,32),&pager&,$_tf2o(%!pager),&logging&,Off,&when&,$_time,&awaytime&,%gone,&awaywhen&,$_time($gettok(%!away,2,32)),&note&,%reason))
    if ($_convmode(%mode,m,$_convmode($gettok(%!away,3,32),m,$_cfgi(away.msg)))) $iif($_cfgi(away.act),acme,acmsg) %amsg
    if (($chan(0)) && ($server)) if ($_convmode(%mode,c,$_convmode($gettok(%!away,3,32),c,$_cfgi(away.chan)))) $iif($_cfgi(away.act),ame,amsg) %amsg
  }
  if ($gettok(%!away,4,32)) .ebeeps on
  if ($gettok(%!away,5,32)) .sound on
  _ssplay setback 1
  set -u %.gone %gone
  <set.back> %!away
  resetidle
  if (%!logging) <away.log> $iif(%_awaylog.?,%_awaylog.?,0) $iif(%_awaylog.!,%_awaylog.!,0) $iif(%_awaylog.+,%_awaylog.+,0) $iif(%_awaylog.@,%_awaylog.@,0)
  %!logging = 0
  if (%_newpages > 0) pager v 0 x
  else .pager f
  unset %_timedclose %!away %-oldawaymode %_awayword.* %-aremind.*
}
alias qb if ($left($1,1) isin -+) back $1 $+ +q $2- | else back +q $1-

; /b may be /ban or /back
alias b {
  if ($_cfgi(b.ban)) {
    if (($1 == $null) && (%!away)) $$dialog(banorback1,banorback,-4)
    else ban $1-
  }
  else {
    if (((* isin $1) && (. isin $1)) || (($1 ischan) && (* isin $2))) $$dialog(banorback2,banorback,-4) $1-
    else back $1-
  }
}

alias -l _upd.away if ($server) _linedance .raw away : $+ $_awayformat($iif(%!pager,wawayp,waway))
on me:*:NICK:if (%!away) _upd.away

; Pager
ctcp &*:PAGE:?:_paged viaCTCP * $2- | if ($result) _linedance _qcr $nick PAGE $_pagereply
on &^*:TEXT:!page *:#:if ($2 == $me) _paged in $+ $chan $chan $3- | if ($result) _linedance _qnotice $nick *** $_pagereply ***
on &^*:TEXT:!page*:?:_paged viamsg $nick $2- | if ($result) _linedance _qnotice $nick *** $_pagereply ***
on &^*:CHAT:!page*:_paged inDCCchat =$nick $2- | if ($result) _linedance .msg =$nick *** $_pagereply ***
on &^*:CHAT:PAGE:_paged inDCCchat =$nick $remove($2-,$chr(1)) | if ($result) _linedance _qcr =$nick PAGE $_pagereply
alias -l _pagereply if ($_finalmsg($replace($_msg($iif(%!pager,pageron,pageroff)),&nick&,$nick))) return $ifmatch | $$$
alias -l _paged {
  haltdef
  inc -u20 %_rcvd.page
  inc -u10 %_rcvd.page. $+ $site
  if ((%_rcvd.page > 3) || (%_rcvd.page. [ $+ [ $site ] ] > 2)) return 0
  var %error = 0
  if ((%_rcvd.page > 2) || (%_rcvd.page. [ $+ [ $site ] ] > 1)) %error = 1

  <pager> $2 $nick %error $1 %!pager $3-
  if (%!pager == 0) return $_not(%error)

  inc %_newpages
  inc %_totalpages
  write $_temp(pag) $nick $1 $ctime $2 $fulladdress $3-

  if ($_cfgi(pager.classic)) _juryrig pager v %_totalpages s
  elseif ($dialog(pager)) _juryrig pager v $did(pager,198) s
  else _juryrig pager v %_totalpages s

  return $_not(%error)
}

; /pager [a[way]|h[ere]|auto] [on|off|q[uiet]]]
; /pager v[iew] [n] [x|s]
; /pager f[lush]
; (x means clear pages on close; s plays pager sound)
;;; clean up; use /filter or somthin for log copy
alias pager {
  if (f* iswm $1) {
    %_totalpages = 0
    %_newpages = 0
    .remove $_temp(pag)
    dispa Pager flushed. (any saved pages cleared)
    return
  }
  if (v* iswm $1) {
    if (%_totalpages == 0) _error No pages to view.You have not been paged since you last cleared your pager.

    var %curr,%num,%page,%where,%nick,%offs,%msg,%ln,%logged,%win,%bit

    if (($2 isnum) && (($2 >= 1) && ($2 <= %_totalpages))) %curr = $2
    else %curr = $calc(%_totalpages + 1 - $iif(%_newpages,%_newpages,1))
    if (%curr > $calc(%_totalpages - %_newpages)) %_newpages = $calc(%_totalpages - %curr)
    if (($2 == x) || ($3 == x)) %_clr-pager = 1

    if ($_cfgi(pager.classic)) {
      %_newpages = 0
      if ($window(@Pager)) clear @Pager
      else { _window 2.1 -l +l @Pager $_center(350,350) @Pager | unset %_clr-pager }

      %num = 1
      :loopC

      %page = $read -tnl [ $+ [ %num ] ] $_temp(pag)
      %where = $gettok(%page,4,32)
      %nick = $gettok(%page,1,32)
      %bit = $iif(%num == %curr,-a)

      aline %bit @Pager You were paged $_p2s($gettok(%page,2,32)) at $_datetime($gettok(%page,3,32))
      aline %bit @Pager PAGE from $:t(%nick))
      if ($gettok(%page,6-,32)) aline %bit @Pager $:b(Message) $+ - $:h($gettok(%page,6-,32))

      if ((%!away) && (%_clr-pager)) || ((%!away == $null) && ($_not(%_clr-pager))) %logged = 0
      elseif (=* iswm %where) { %win = chat %nick | %logged = $calc($line(%win,0) - 3) }
      elseif ($query(%nick)) { %win = %nick | %logged = $line(%nick,0) }
      else {
        window -hn @.loghide
        awaylog pn ! %nick @.loghide
        %win = @.loghide
        %logged = $line(@.loghide,0)
      }
      if (%logged) {
        %offs = $iif(=* iswm %where,3,0)
        %ln = 1
        :loopCL
        aline %bit @Pager $strip($line(%win,$calc(%ln + %offs)))
        if (%ln >= 5) aline %bit @Pager ... ... ...
        elseif (%ln < %logged) { inc %ln | goto loopCL }
      }
      window -c @.loghide

      if (%num < %_totalpages) { aline @Pager $::: | inc %num | goto loopC }

      titlebar @Pager - %_totalpages total pages
    }

    else {
      if ($dialog(pager) == $null) { dialog -md pager pager | unset %_clr-pager }

      did -o pager 1 1 Page %curr of %_totalpages $iif(%_clr-pager,(logged))
      did -o pager 198 1 %curr
      %page = $read -tnl [ $+ [ %curr ] ] $_temp(pag)
      %nick = $gettok(%page,1,32)
      %where = $gettok(%page,4,32)
      %msg = $strip($gettok(%page,6-,32))
      did -o pager 2 1 %nick
      did -o pager 3 1 $iif(%msg == $null,(not given),%msg)
      did -o pager 199 1 $gettok(%page,5,32)
      if ((%!away) && (%_clr-pager)) || ((%!away == $null) && ($_not(%_clr-pager))) %logged = 0
      elseif (=* iswm %where) { %win = chat %nick | %logged = $calc($line(%win,0) - 3) }
      elseif ($query(%nick)) { %win = %nick | %logged = $line(%nick,0) }
      else {
        window -hn @.loghide
        awaylog pn ! %nick @.loghide
        %win = @.loghide
        %logged = $line(@.loghide,0)
      }
      did -ra pager 4 You were paged by %nick $_p2s($gettok(%page,2,32)) at $_datetime($gettok(%page,3,32)) $+ $crlf

      if (%curr < %_totalpages) { did -e pager 102 | did -t pager 102 }
      else { did -b pager 102 | did -t pager 103 }
      if (%curr > 1) did -e pager 101
      else did -b pager 101

      if (%logged) {
        did -a pager 4 %logged logged $iif(%logged == 1,message,messages) from %nick $+ $crlf

        %offs = $iif(=* iswm %where,3,0)
        %ln = 1
        :loopL
        did -a pager 4 $strip($line(%win,$calc(%ln + %offs))) $+ $crlf
        if (%ln >= 10) did -a pager 4 ... ... ...
        elseif (%ln < %logged) { inc %ln | goto loopL }

        did -c pager 4 1
      }

      window -c @.loghide
      if (%_clr-pager) dialog -t pager Pager (Viewing logged pages)

      dialog -v pager
      dialog -o pager
      dialog -n pager
    }

    if (($2 == s) || ($3 == s)) _ssplay pager 1
    return
  }
  if ($1 == auto) { var %cfg = autoaway.pager,%when = are auto-away from idle }
  elseif (a* iswm $1) { var %cfg = away.pager,%when = set away }
  elseif (h* iswm $1) { var %cfg = back.pager,%when = are not away }
  else {
    if (($1 == on) || ($1 == off)) %!pager = $_o2tf($1)
    if (q* iswm $1) %!pager = quiet
    if (%!away) _upd.away
    dispa Pager is $iif($1,now) $:b($iif(%!pager == quiet,Quiet,$_tf2o(%!pager))) (until you $iif(%!away,return from away,set away) $+ )
    return
  }
  if (($2 == on) || ($2 == off)) _cfgw %cfg $_o2tf($2)
  if (q* iswm $2) _cfgw %cfg quiet
  dispa Pager will $iif($2,now) be $:b($iif($_cfgi(%cfg) == quiet,Quiet,$_tf2o($_cfgi(%cfg)))) when you %when
}
on *:CLOSE:@Pager:_pagerclose
alias _pagerclose {
  if (%_clr-pager) {
    %_totalpages = 0
    %_newpages = 0
    .remove $_temp(pag)
    unset %_clr-pager
  }
}

; Logging

; $1 = ? query @ event ! notice + chanmsg - don't count
; $2 = event codes 1 priv msg 2 priv action 3 opnotice 4 priv notice 5 op activity on you 6 by you 7 other op activity
; 8 notify 9 away status 10 invite 11 DCC 12 connection 13 chan msg 14 chan action
alias _awaylog {
  write %_away.log $2 $timestamp $3-
  inc %_awaylog. $+ $1
  if ($1 isin ?!+) inc %_awaylog.^
}
alias _dtqc {
  if (%_timedclose == $null) return
  if (($idle < 15) || (($appactive) && ($idle < 30))) { .timer 1 10 _dtqc | return }
  if ($_optn(1,18) == 1) %_timedclose = $remtok(%_timedclose,$active,1,32)
  if (%_timedclose) close -m %_timedclose
  unset %_timedclose
}
#_awaylog off
on *:DISCONNECT:var %lagged | if (%-self.lag isnum) %lagged = (selflag %-self.lag $+ ) | _awaylog @ 12 ««« You disconnected from $server : $port %lagged
on *:INPUT:?:%_timedclose = $remtok(%_timedclose,$target,1,32)
on *:CLOSE:?:%_timedclose = $remtok(%_timedclose,$target,1,32)
on *:KICK:#:{
  if ((%`awaylog.chan < 1) && ($knick != $me)) return
  if ($knick == $me) _awaylog @ 5 ( $+ $chan $+ ) ««« $nick kicked $:b($knick) ( $+ $1- $+ )
  elseif ($nick == $me) _awaylog @ 6 ( $+ $chan $+ ) *** $:b($nick) kicked $knick ( $+ $1- $+ )
  elseif ((%`awaylog.chan > 2) || ((%`awaylog.chan > 1) && ($me isop $chan))) _awaylog @ 7 ( $+ $chan $+ ) *** $nick kicked $knick ( $+ $1- $+ )
}
on *:BAN:#:_logban banned
on *:UNBAN:#:_logban unbanned
alias -l _logban {
  if (%`awaylog.chan < 1) return
  if ($banmask iswm %!myself) _awaylog @ 5 ( $+ $chan $+ ) *** $nick $1 $:b($me) ( $+ $banmask $+ )
  elseif ($nick == $me) _awaylog @ 6 ( $+ $chan $+ ) *** $:b($nick) $1 $banmask
  elseif ((%`awaylog.chan > 2) || ((%`awaylog.chan > 1) && ($me isop $chan))) _awaylog @ 7 ( $+ $chan $+ ) *** $nick $1 $banmask
}
on *:SERVEROP:#:_logop opped
on *:OP:#:_logop opped
on *:DEOP:#:_logop deopped
alias -l _logop {
  if (%`awaylog.chan < 1) return
  if ($opnick == $me) _awaylog @ 5 ( $+ $chan $+ ) *** $nick $1 $:b($opnick)
  elseif ($nick == $me) _awaylog @ 6 ( $+ $chan $+ ) *** $:b($nick) $1 $opnick
  elseif ((%`awaylog.chan > 2) || ((%`awaylog.chan > 1) && ($me isop $chan))) _awaylog @ 7 ( $+ $chan $+ ) *** $nick $1 $opnick
}

on me:*:JOIN:#:if ($nick(#,0) > 1) _awaylog @ 5 ( $+ $chan $+ ) »»» Rejoined channel

on *:CLOSE:=:_awaylog @ 11 === $nick DCC chat closed
on *:FILERCVD:*:_awaylog @ 11 === $nick sent $filename to you
on *:FILESENT:*:_awaylog @ 11 === $nick received $filename from you
on *:GETFAIL:*:_awaylog @ 11 === $nick failed to send $filename to you
on *:SENDFAIL:*:_awaylog @ 11 === $nick failed to receive $filename from you

alias _doahl {
  var %todo = %`awaywords.words,%check,%num
  %num = $highlight(0)
  :loop1
  if (%num) { %todo = $addtok(%todo,$highlight(%num),44) | dec %num | goto loop1 }
  %todo = $addtok(%todo,$me,44)
  var %num = $numtok(%todo,44)
  :loop2
  %check = [ [ $gettok(%todo,%num,44) ] ]
  if (%check isin $3-) _awaylog + $1 ( $+ $chan $+ ) $_p2s($2) $replace($3-,%check,$:b(%check))
  elseif (%num > 1) { dec %num | goto loop2 }
}

; Notify/Unnotify/etc
alias _away.logit _awaylog $1-
#_awaylog end
alias _away.logit return
on &^*:TEXT:*:#:if (%!away) _doaww $1-
on &^*:ACTION:*:#:if (%!away) _doaww $1-
on &^*:TEXT:*:?:if (%!away) _away.remind
on &^*:ACTION:*:?:if (%!away) _away.remind
alias _away.remind {
  if ((%`away.remind) && (%-aremind. [ $+ [ $nick ] ] == $null) && (%-aremind.! == $null)) {
    inc %-aremind. $+ $nick
    inc -u5 %-aremind.!
    _linedance _qnotice $nick $_awayformat(remind)
  }
}

; Away log display
; /awaylog [auto] on|off|f[lush]|[pncodum [@Window/! [nick/#chan [nickwin]]]]
alias awaylog {
  if ($1 == auto) {
    if (($2 == on) || ($2 == off)) _cfgw autoaway.log $_o2tf($2)
    dispa Away logging is $:b($_tf2o($_cfgi(autoaway.log))) when you are auto-away from idle.
    return
  }
  if ($1 == on) {
    if (%!away == $null) { _cfgw away.log 1 | dispa Away logging is now $:b(On) by default. | return }
    %!logging = 1
    .enable #_awaylog
    _away.logit - 9 »»» Away log enabled.
    dispa Away logging will be $:b(On) until you return from away.
    _upd.away
    return
  }
  elseif ($1 == off) {
    if (%!away == $null) { _cfgw away.log 0 | dispa Away logging is now $:b(Off) by default. | return }
    %!logging = 0
    _away.logit - 9 ««« Away log disabled.
    .disable #_awaylog
    dispa Away logging will be $:b(Off) for the remainder of your away.
    _upd.away
    return
  }
  elseif (f* iswm $1) {
    unset %_awaylog.*
    %_awaylog.^ = 0
    .remove %_away.log
    _away.logit - 9 ««« Flushed away log.
    dispa Away log flushed.
    return
  }

  if ($1 == $null) { _recurse awaylog $iif($_cfgi(awaylog.view),$_cfgi(awaylog.view),pncodum) @AwayLog | return }
  elseif ($2 == $null) { _recurse awaylog $1 @AwayLog | return }
  if ($2 == @AwayLog) _cfgw awaylog.view $1
  var %num = 1,%count = $lines(%_away.log)
  if (%count < 1) { if ($2 == !) return | _error Your away log is empty.This probably means you have not set away yet. }
  if ($2 == !) { if ($4 == $null) query $3 }
  elseif ($window($2)) { clear $2 | window -a $2 }
  else {
    _window 2.1 -l + $2 $_winpos(10,10,5,12) @AwayLog
    _windowreg $2 _alogclose
  }
  window -hl @.awaylog
  loadbuf @.awaylog %_away.log
  set -u %.hid 0
  if ($_ischan($3)) {
    var %line,%chan = ( $+ $3 $+ ),@ $+ $3
    :loopC
    %line = $line(@.awaylog,%num)
    if ($istok(%chan,$gettok(%line,3,32),44)) _alcol $1-2 %line
    if (%num < %count) { inc %num | goto loopC }
  }
  elseif ($3) {
    var %line
    :loopQ
    %line = $line(@.awaylog,%num)
    if (($gettok(%line,3,32) == *) && ($gettok(%line,4,32) == $3)) echo $colour(action) -i2 $iif($4,$4,$3) $gettok(%line,2-,32)
    elseif ($gettok(%line,3,32) == < [ $+ [ $3> ] ] ) echo -i2 $iif($4,$4,$3) $gettok(%line,2-,32)
    elseif ($gettok(%line,3,32) == - [ $+ [ $3 $+ - ] ] ) echo $colour(notice) -i2 $iif($4,$4,$3) $gettok(%line,2-,32)
    if (%num < %count) { inc %num | goto loopQ }
  }
  else {
    :loopR
    _alcol $1-2 $line(@.awaylog,%num)
    if (%num < %count) { inc %num | goto loopR }
  }
  window -c @.awaylog
  if ($2 != !) {
    if (%.hid) titlebar $2 - $line($2,0) events ( $+ %.hid hidden) 
    else titlebar $2 - $line($2,0) events (Right-click for options)
    window -b $2
    %_alog. [ $+ [ $2 ] ] = $1
  }
}
; Picks line color for the line and adds (if not filtered) to @AwayLog
alias -l _alcol if ($mid(ppnnoooummdmcc,$3,1) isin $1) aline $colour($gettok(nor a notic notic m m m notif ot inv c info nor a,$3,32)) $2 $4- | else inc %.hid

menu @AwayLog {
  dclick:_subset $active $1
  Flush:awaylog f | _dowclose $active | window -c $active
  View subset:if ($sline($active,1).ln) _subset $active $ifmatch
  -
  New window
  .Show all:awaylog pncodum $_newwin(@Awaylog)
  .-
  .Show private:awaylog p $_newwin(@Awaylog)
  .Show notices:awaylog n $_newwin(@Awaylog)
  .Show channel:awaylog c $_newwin(@Awaylog)
  .-
  .Show op activity:awaylog o $_newwin(@Awaylog)
  .Show DCC:awaylog d $_newwin(@Awaylog)
  .Show notify:awaylog u $_newwin(@Awaylog)
  .Show misc.:awaylog m $_newwin(@Awaylog)
  -
  $_dynpop($iif(p isin %_alog. [ $+ [ $active ] ] ,1,0)) Show private:awaylog $_toggle(p,%_alog. [ $+ [ $active ] ] ) $active
  $_dynpop($iif(n isin %_alog. [ $+ [ $active ] ] ,1,0)) Show notices:awaylog $_toggle(n,%_alog. [ $+ [ $active ] ] ) $active
  $_dynpop($iif(c isin %_alog. [ $+ [ $active ] ] ,1,0)) Show channel:awaylog $_toggle(c,%_alog. [ $+ [ $active ] ] ) $active
  -
  $_dynpop($iif(o isin %_alog. [ $+ [ $active ] ] ,1,0)) Show op activity:awaylog $_toggle(o,%_alog. [ $+ [ $active ] ] ) $active
  $_dynpop($iif(d isin %_alog. [ $+ [ $active ] ] ,1,0)) Show DCC:awaylog $_toggle(d,%_alog. [ $+ [ $active ] ] ) $active
  $_dynpop($iif(u isin %_alog. [ $+ [ $active ] ] ,1,0)) Show notify:awaylog $_toggle(u,%_alog. [ $+ [ $active ] ] ) $active
  $_dynpop($iif(m isin %_alog. [ $+ [ $active ] ] ,1,0)) Show misc.:awaylog $_toggle(m,%_alog. [ $+ [ $active ] ] ) $active
}
alias _alogclose unset %_alog. $+ $1
alias -l _subset {
  var %line = $gettok($line($1,$2),2,32)
  if (%line == ===) awaylog d $_newwin(@Awaylog)
  elseif (%line == (notify)) awaylog u $_newwin(@Awaylog)
  elseif (%line isin »»»«««) awaylog m $_newwin(@Awaylog)
  elseif (@* iswm %line) awaylog ncom $_newwin(@Awaylog) $right(%line,-1)
  elseif ($left(%line,1) == $chr(40)) awaylog ncom $_newwin(@Awaylog) $left($right(%line,-1),-1)
  elseif (%line == *) awaylog pn ! $gettok($line($1,$2),3,32)
  else awaylog pn ! $right($left(%line,-1),-1)
}

; Autodetect back-on-keypress, etc; AWAY CTCP
raw 306:*:if (%!away == $null) %!away = $me $ctime +q 0 0 away | halt
raw 305:*:if (%!away) back $iif(+q isin $gettok(%!away,3,32),+q) | halt
ctcp &*:AWAY:if ($2 == $null) set -u1 %.ctcp.reply $_awayformat($iif(%!away,ctcpaway,ctcphere))

; General away config msg formatting
; $1 = message to read; $2/$3 optional replacement to do
alias _awayformat {
  if (%!away) var %format = $replace($_msg($1),&reason&,$gettok(%!away,6-,32),&when&,$_time($gettok(%!away,2,32)),&awaytime&,$_dur($calc($ctime - $gettok(%!away,2,32))))
  else var %format = $replace($_msg($1),&reason&,not away,&when&,not away,&awaytime&,not away)
  return $_finalmsg($replace($iif($2,$replace(%format,$2,$3),%format),&pager&,$_tf2o(%!pager),&logging&,$_tf2o(%!logging)))
}

; Away words
alias _doaww if ((%`awaywords) && (%_awayword. [ $+ [ $site ] ] == $null) && ((%-awayword.fld == $null) || (%-awayword.fld < 3))) _doaww² $replace($strip($1-),$chr(44),.,-,.,$chr(90),.,$chr(91),.,?,.,!,.,<,.,>,.,*,.,@,.,+,.,',.,",.,/,.,:,.,;,.,.,$chr(32))
alias _doaww² {
  var %word,%num = $numtok(%`awaywords.words,44)
  :loop
  %word = [ [ $gettok(%`awaywords.words,%num,44) ] ]
  if ($istok($1-,%word,32)) {
    inc %_awayword. $+ $site
    inc -u5 %-awayword.fld
    _qnotice $nick $_awayformat(awayword,&word&,%word)
  }
  elseif (%num > 1) { dec %num | goto loop }
}

;
; Away dialogs
;
dialog autoaway {
  title "Auto Away"
  size -1 -1 400 68
  text "Setting auto away in:", 101, 14 3 100 20
  text "15 seconds", 102, 135 3 100 20
  text "(ESC to cancel)", 103, 14 21 100 20
  button "Set away", 1, 13 40 80 25, OK default
  button "Cancel", 2, 113 40 80 25, cancel
}
on *:DIALOG:autoaway:sclick:1:autoaway now
on *:DIALOG:autoaway:sclick:2:aacancel

dialog pager {
  title "Pager"
  size -1 -1 550 186

  button "&>>", 102, 49 11 37 25, default

  box "Page 1 of 1", 1, 95 5 450 175,
  text "&Paged by:", 12, 104 29 50 20, right
  edit "", 2, 155 25 145 22, read autohs

  button "&Query", 201, 305 25 71 22
  button "&DCC", 202, 384 25 71 22
  button "&Ignore...", 203, 463 25 71 22

  text "&Reason:", 13, 104 55 50 20, right
  edit "", 3, 155 51 381 22, read autohs

  edit "", 4, 104 83 432 87, autohs vsbar return multi read

  button "&Close", 103, 6 90 80 25, OK
  button "&Help", 104, 6 122 80 25, disable
  button "C&onfigure...", 105, 6 154 80 25

  button "&<<", 101, 6 11 37 25, disable

  edit "", 198, 1 1 1 1, hide autohs
  edit "", 199, 1 1 1 1, hide autohs
}
on *:DIALOG:pager:sclick:101:if ($did(198) > 1) pager v $calc($did(198) - 1)
on *:DIALOG:pager:sclick:102:if ($did(198) < %_totalpages) pager v $calc($did(198) + 1)
on *:DIALOG:pager:sclick:103:_pagerclose
on *:DIALOG:pager:sclick:105:_juryrig awaycfg p
on *:DIALOG:pager:sclick:201:awaylog pn ! $did(2) | dialog -k $dname
on *:DIALOG:pager:sclick:202:dcc chat $did(2) | dialog -k $dname
on *:DIALOG:pager:sclick:203:_juryrig ign $did(199) | dialog -k $dname

dialog banorback {
  title "Ban or Back?"
  size -1 -1 400 68

  text "/b is /back, but you seem to be trying to /ban.", 1, 14 3 250 20
  text "What would you like to do?", 2, 14 20 200 20

  button "/ba&ck", 101, 13 40 80 25, OK
  button "/ba&n", 102, 113 40 80 25
  button "&Configure...", 103, 213 40 80 25, disable

  edit "", 3, 1 1 1 1, hide result autohs
}
on *:DIALOG:banorback?:init:*:did -tf $dname 10 $+ $right($dname,1) | did -o $dname 1 1 $iif(*1 iswm $dname,/b is /back; but you seem to be trying to /ban.,/b is /ban; but you seem to want /back.)
on *:DIALOG:banorback?:sclick:101:if ($did(3) == $null) did -o $dname 3 1 back
on *:DIALOG:banorback?:sclick:102:did -o $dname 3 1 ban | dialog -k $dname

dialog away {
  title "Set Away"
  size -1 -1 300 120

  text "(note- use /back to return from away)", 201, 110 10 200 20, hide
  text "&Away message?", 202, 14 10 80 20

  combo 1, 10 30 280 160, result edit drop

  check "&Pager on", 2, 10 60 65 16, 3state
  check "&Logging on", 3, 95 60 75 16
  check "Set away &quietly", 4, 190 60 95 16

  button "OK", 101, 10 86 80 25, OK default
  button "Cancel", 102, 110 86 80 25, cancel
  button "&Options...", 103, 210 86 80 25
}
on *:DIALOG:away:init:*:{
  _fillrec $dname 1 0 $_cfg(away.lis) 0 %.reason

  if (%!away) did -v $dname 201
  if (%.pager) did -c $+ $iif(%.pager == quiet,u) $dname 2
  if (%.log) did -c $dname 3
  if (%.quiet) did -c $dname 4
  unset %.reason %.pager %.log %.quiet
}
on *:DIALOG:away:sclick:101:set -u1 %.pager $gettok(0 1 quiet,$calc($did(2).state + 1),32) | set -u1 %.log $did(3).state | set -u1 %.quiet $did(4).state
on *:DIALOG:away:sclick:103:_juryrig awaycfg