All pastes #403868 Raw Edit

nub

public text v1 · immutable
·published 2007-03-20 18:09 UTC
rendered paste body
;;;;;;;;;;;;;;;;;;;
;;; Away system ;;;
;;;;;;;;;;;;;;;;;;;

;; Events

on *:START:{
  var %core = $shortfn($mircdir $+ core\core.mrc)
  if (!$script(%core)) .load -rs1 %core
  var %d = $awaypath(logs)
  if (!$isdir(%d)) .mkdir %d
  hmake away 20
  hload away $awaypath(awaysys.ah)
  if ($server) && ($awayget(auto)) .timeraway $+ $cid 1 $calc($awayget(idle) * 60) autoaway
}

on *:CONNECT:{
  if ($awayget(auto)) .timeraway $+ $cid 1 $calc($awayget(idle) * 60) autoaway
}

on *:UNLOAD:{
  hfree away
  .timeraway* off
  .timeran* off
}

on *:INPUT:*:{
  if ($left($1,1) != $cmdchar) {
    if ($awayget(auto)) && (!$away) .timeraway $+ $cid 1 $calc($awayget(idle) * 60) autoaway
    if ($away) && ($awayget(press)) away
  }
}

on *:TEXT:*:#:astore $1-

on *:ACTION:*:#:astore $1-

on *:NOTICE:*:#:astore $1-

ctcp *:*:#:astore $1-

on *:TEXT:*:?:astore2 $1-

on *:ACTION:*:?:astore2 $1-

on *:NOTICE:*:?:astore2 $1-

ctcp *:*:?:{
  if ($away) && ($1 == PAGE) && ($2) && ($awayget(pager)) {
    if ($isfile($awayget(sound))) .splay $+(",$awayget(sound),")
    awaypager $nick $ctime $2-
  }
  astore2 $1-
}

on *:dialog:awaysys:*:*:{
  if ($devent == init) {
    seticon 29
    setmdx
    sethelp 200
    mdx SetBorderStyle $dname 6,7,20,38,39 clientedge
    mdx SetBorderStyle $dname 14,18,21,40,46,48,50 staticedge
    mdx SetFont $dname 6,7 ANSI 20 700 Arial
    mdx SetFont $dname 10,16,19 ANSI 13 700 Tahoma
    window -hl @awayh
    window -hl @awayh2
    window -hl @awayh3
    window -hl @awayh4
    mdx SetControlMDX $dname 15,41,49,51 window > $dialogs
    did -a $dname 15 grab $window(@awayh).hwnd @awayh
    did -a $dname 41 grab $window(@awayh2).hwnd @awayh2
    did -a $dname 49 grab $window(@awayh3).hwnd @awayh3
    did -a $dname 51 grab $window(@awayh4).hwnd @awayh4
    mdx SetControlMDX $dname 17 listview rowselect report single showsel > $views
    did -i $dname 17 1 headerdims 116 86 67 62
    did -i $dname 17 1 headertext $+(Date,$tab,Network,$tab,Size,$tab,Entries)
    .copy -o $awaypath(awaymsg.ac) temp\awaymsg.ac
    loadbuf -ro $dname 5 temp\awaymsg.ac
    did -c $dname 5 $awayget(msg)
    if ($awayget(mode)) did -c $dname 13
    else did -c $dname 12
    did -a $dname 14 $awayget(format)
    did -a $dname 40 $awayget(bformat)
    did -a $dname 48 $awayget(nformat)
    did -a $dname 50 $awayget(tformat)
    aline @awayh $awayget(format)
    aline @awayh2 $awayget(bformat)
    aline @awayh3 $awayget(nformat)
    aline @awayh4 $awayget(tformat)
    if ($awayget(anick)) did -c $dname 8
    did -a $dname 9 $awayget(nick)
    hadd -m awayt log $awayget(log)
    hadd -m awayt notify $awayget(notify)
    hadd -m awayt show $awayget(show)
    if ($awayget(press)) did -c $dname 22
    if ($awayget(systray)) did -c $dname 23
    if ($awayget(sounds)) did -c $dname 24
    if ($awayget(prots)) did -c $dname 25
    if ($awayget(all)) did -c $dname 26
    if ($awayget(pager)) did -c $dname 35
    if ($awayget(deop)) did -c $dname 44
    if ($awayget(auto)) did -c $dname 27
    if ($awayget(timer)) did -c $dname 30
    did -a $dname 37 $awayget(sound)
    did -a $dname 28 $awayget(idle)
    did -a $dname 31 $awayget(delay)
    listfiles setoutput $remove($awaypath(logs),",$mircdir) $+ \<fname> <size>
    listfiles listfiles f > temp\awaylogs.t > $remove($awaypath(logs),") > *.log > > 1
    .fopen away temp\awaylogs.t
    while (1) {
      var %t = $fread(away)
      if (!%t) break
      var %f = $nopath($gettok(%t,1,32))
      var %d = $totime($gettok(%f,1,46))
      var %n = $remlast($gettok(%f,3-,46),4) ( $+ CID $gettok(%f,2,46) $+ )
      var %s = $bytes($gettok(%t,2,32)).suf
      var %e = $lines($gettok(%t,1,32))
      did -a $dname 17 $lv($+(%d,$tab,%n,$tab,%s,$tab,%e))
    }
    .fclose away
  }
  elseif ($devent == dclick) && ($did == 17) showawaylog $gettok($read(temp\awaylogs.t,n,$calc($did($dname,17).sel - 1)),1,32)
  elseif ($devent == edit) {
    if ($did == 14) away.pre @awayh
    elseif ($did == 40) away.pre @awayh2
    elseif ($did == 48) away.pre @awayh3
    elseif ($did == 50) away.pre @awayh4
  }
  elseif ($devent == sclick) {
    if ($did == 6) {
      var %m = $anainp(Message:)
      write temp\awaymsg.ac %m
      did -ac $dname 5 %m
    }
    elseif ($did == 7) {
      var %n = $did($dname,5).sel
      if (!%n) return
      did -d $dname 5 %n
      write -dl %n temp\awaymsg.ac
      if ($did($dname,5,1)) {
        if ($did($dname,5).lines >= %n) did -c $dname 5 %n
        else did -c $dname 5 $calc(%n - 1)
      }
      else did -r $dname 5
    }
    elseif ($did == 17) && ($gettok($did($dname,17,1),1,32) == rclick) awaypop 
    elseif ($did == 20) awaypop
    elseif ($did == 38) did -ra $dname 37 $$afile(sounds\ $+ *.wav,Select a sound,Ok)
    elseif ($did == 39) && ($isfile($did($dname,37))) .splay " $+ $did($dname,37) $+ "
    elseif ($did == 33) {
      .copy -o temp\awaymsg.ac $awaypath(awaymsg.ac)
      awaysave msg $iif($did($dname,5).sel,$v1,0)
      if ($did($dname,13).state) awaysave mode 1
      else awaysave mode 0
      awaysave format $dlgnotnull(14,is away "<msg>" • Log: <log> • Pager: <pager>)
      awaysave bformat $dlgnotnull(40,is back [<time>])
      awaysave nformat $dlgnotnull(48,I'm away • <msg> • [<time>])
      awaysave tformat $dlgnotnull(50,has been away for <time> • <msg>)
      awaysave anick $did($dname,8).state
      awaysave nick $dlgnotnull(9,<me>|OUT)
      awaysave log $hget(awayt,log)
      awaysave notify $hget(awayt,notify)
      awaysave show $hget(awayt,show)
      awaysave press $did($dname,22).state
      awaysave systray $did($dname,23).state
      awaysave sounds $did($dname,24).state
      awaysave prots $did($dname,25).state
      awaysave all $did($dname,26).state
      awaysave pager $did($dname,35).state
      awaysave deop $did($dname,44).state
      awaysave sound $dlgnotnull(37,...)
      awaysave auto $did($dname,27).state
      awaysave timer $did($dname,30).state
      awaysave idle $dlgisnum(28,15)
      awaysave delay $dlgisnum(31,20)
      var %i = 1
      while ($scon(%i)) {
        scon %i
        if ($awayget(auto)) && (!$away) .timeraway $+ $cid 1 $calc($awayget(idle) * 60) autoaway
        else .timeraway $+ $cid off
        inc %i
      }
      hsave -o away $awaypath(awaysys.ah)
      .remove temp\awaymsg.ac
      .remove temp\awaylogs.t
    }
    elseif ($did == 34) {
      .remove temp\awaymsg.ac
      .remove temp\awaylogs.t
    }
    elseif ($did == 200) adoc away
  }
}

on *:dialog:awaypager:*:*:{
  if ($devent == init) {
    seticon 29
    setmdx
    mdx SetBorderStyle $dname 4 clientedge
    mdx SetBorderStyle $dname 1,5,7,9,11 staticedge
    mdx SetFont $dname 6,10 ANSI 13 700 Tahoma
    var %i = 0
    var %f = $awaypath(awaypages.log)
    if ($isfile(%f)) {
      .fopen awaypager %f
      while (1) {
        var %t = $fread(awaypager)
        if (!%t) break
        did -ca $dname 3 $gettok(%t,1,32)
        var %t1 = %t
        inc %i
      }
      .fclose awaypager
    }
    if (%t1) {
      did -a $dname 6 Received on $totime($gettok(%t1,2,32))
      did -a $dname 8 $gettok(%t1,3-,32)
    }
    did -a $dname 10 Total messages: %i
  }
  elseif ($devent == sclick) {
    if ($did == 3) awaypager.aux
    if ($did == 4) {
      var %n = $did($dname,3).sel
      if (!%n) return
      did -d $dname 3 %n
      write -dl %n $awaypath(awaypages.log)
      if ($did($dname,3,1)) {
        if ($did($dname,3).lines >= %n) did -c $dname 3 %n
        else did -c $dname 3 $calc(%n - 1)
        awaypager.aux
      }
      else did -r $dname 3,6,8
      did -ra $dname 10 Total Messages: $did($dname,3).lines
    }
  }
}

on *:dialog:setaway:*:*:{
  if ($devent == init) {
    setmdx
    mdx SetBorderStyle $dname 6,7 staticedge
    .fopen awaymsgs $awaypath(awaymsg.ac)
    var %i = 1
    while (1) {
      var %t = $fread(awaymsgs)
      if (!%t) break
      did -a $dname 2 %t
      if ($awayget(msg) == %i) did -c $dname 2 %i
      inc %i
    }
    .fclose awaymsgs
    if ($awayget(anick)) did -a $dname 4 $awayget(nick)
    if ($awayget(all)) did -c $dname 5
    did -f $dname 2
  }
  elseif ($devent == sclick) && ($did == 8) {
    if ($did($dname,4) != $me) set -u %awaynick $v1
    if ($did($dname,5).state) {
      var %i = 1
      while ($scon(%i)) {
        scon %i
        if (!$away) away $did($dname,2)
        inc %i
      }
    }
    else away $did($dname,2)
    dialog -x setaway
  }
}

;; Dialogs

dialog awaysys {
  title "Away system"
  size -1 -1 376 253
  option pixels
  tab "Main", 1, 4 4 367 226
  text "Away message:", 4, 11 39 78 16, tab 1
  combo 5, 98 38 159 100, tab 1 size drop
  button "+", 6, 260 38 50 21, tab 1
  button "-", 7, 313 38 50 21, tab 1
  check "Away nick:", 8, 11 139 76 18, tab 1
  edit "", 9, 121 139 70 21, tab 1 autohs
  text "Use <me> as your nickname", 10, 195 141 170 16, disable tab 1
  text "Away mode:", 11, 11 66 74 16, tab 1
  radio "Silent", 12, 98 64 60 20, tab 1
  radio "Verbose", 13, 184 64 100 20, tab 1
  check "Enable pager", 35, 11 174 100 18, tab 1
  text "Pager sound:", 36, 30 197 73 16, tab 1
  edit "", 37, 122 195 69 20, tab 1 autohs
  button "Browse", 38, 195 196 54 20, tab 1
  button "!", 39, 251 196 22 20, tab 1
  check "Auto- away after", 27, 11 99 107 18, tab 1
  edit "", 28, 121 99 70 20, tab 1 autohs
  text "minutes idling", 29, 195 101 92 16, tab 1
  check "Notify every", 30, 11 119 106 18, tab 1
  edit "", 31, 121 119 70 20, tab 1 autohs
  text "minutes", 32, 195 121 92 16, tab 1
  edit "", 18, 13 90 350 2, tab 1
  edit "", 46, 13 166 350 2, tab 1
  tab "Logs", 2
  text "Double-click on  the logs to open them", 19, 14 40 218 16, disable tab 2
  button "Options", 20, 302 38 60 20, tab 2
  edit "", 21, 13 62 350 2, tab 2
  list 17, 12 69 351 150, tab 2 size extsel
  tab "Messages", 3
  text "Away message:", 42, 11 36 83 16, tab 3
  edit "", 14, 98 35 265 20, tab 3 autohs
  button "", 15, 98 56 265 20, tab 3
  text "Back message:", 43, 11 78 83 16, tab 3
  edit "", 40, 98 77 265 20, tab 3 autohs
  button "", 41, 98 98 265 20, tab 3
  text "Tags: <msg>, <pager>, <log> and <time>", 16, 98 204 268 18, disable tab 3
  text "Notice message:", 47, 11 120 83 16, tab 3
  edit "", 48, 98 119 265 20, tab 3 autohs
  button "", 49, 98 140 265 20, tab 3
  edit "", 50, 98 161 265 20, tab 3 autohs
  button "", 51, 98 182 265 20, tab 3
  text "Notify message:", 52, 11 162 83 16, tab 3
  tab "Miscellaneous", 45
  check "Cancel away on key press", 22, 20 60 162 20, tab 45
  check "Disable systray balloons while away", 23, 20 80 232 20, tab 45
  check "Disable sounds while away", 24, 20 100 172 20, tab 45
  check "Disable protections while away", 25, 20 120 230 20, tab 45
  check "Set away on all connections", 26, 20 140 220 20, tab 45
  check "When going to away status, deop myself", 44, 20 160 231 20, tab 45
  button "Ok", 33, 270 230 50 20, ok
  button "Cancel", 34, 322 230 50 20, cancel
  button "", 200, 0 0 0 0, hide
}

dialog setaway {
  title "Set away"
  size -1 -1 256 106
  option pixels
  text "Message:", 1, 5 12 53 16
  text "Nick:", 3, 7 36 50 16
  edit "", 4, 60 33 194 22, autohs
  check "Set away for all connections", 5, 7 55 189 20
  button "Set away", 8, 121 84 65 20, ok
  button "Cancel", 9, 188 84 65 20, cancel
  combo 2, 61 10 192 100, size edit drop
  edit "", 6, 5 4 249 2
  edit "", 7, 5 78 249 2
}

dialog awaypager {
  title "Away pager"
  size -1 -1 220 183
  option pixels
  edit "", 1, 5 5 210 2
  text "Nick:", 2, 6 12 28 16
  combo 3, 40 10 120 100, size drop
  button "Delete", 4, 164 10 50 21
  edit "", 5, 5 34 210 2
  text "", 6, 6 39 208 16, disable
  edit "", 7, 5 56 210 2
  edit "", 8, 3 61 213 93, read multi return autovs
  edit "", 9, 5 157 210 2
  text "", 10, 6 162 208 16, disable
  edit "", 11, 5 180 210 2
  button "", 12, 0 0 0 0, hide ok
}

;; Aliases

alias awaypager {
  dlgaux awaypager
  if ($3) {
    var %f = $awaypath(awaypages.log)
    write %f $1-
    did -ac awaypager 3 $1
    did -ra awaypager 6 Received on $totime($2)
    did -ra awaypager 8 $3-
    did -ra awaypager 10 Total Messages: $lines(%f)
  }
}

alias chgaway {
  if (!$away) return
  if (!$1) var %t = $anainp(New reason:,$read($awaypath(awaymsg.ac),n,$awayget(msg)))
  else var %t = $1-
  hadd -m away msg $+ $cid %t
  .raw away : $+ %t
}

alias autoaway away auto away after $awayget(idle) minutes idling

alias awayget return $hget(away,$1)

alias noawaynick {
  if ($hget(away,nick $+ $cid)) {
    nick $v1
    hdel away nick $+ $cid
  }
}

alias awaylog showawaylog $hget(away,clog $+ $cid)

alias away $iif($awayget(all),scid -a) away.aux $1-

alias -l away.aux {
  if (!$server) return
  if ($away) {
    if ($awayget(auto)) .timeraway $+ $cid 1 $calc($awayget(idle) * 60) autoaway
    .raw away
    if ($awayget(mode)) && ($chan(1)) ame $awayformat(bformat)
    .timeran $+ $cid off
    var %l = $hget(away,clog $+ $cid)
    if ($isfile(%l)) {
      if ($awayget(show)) showawaylog %l
      else stadisp You received $lines(%l) message(s) while being away, $fkeyt(awaylog) to view your log
    }
    noawaynick
  }
  else {
    if (!$1) var %t = $iif($read($awaypath(awaymsg.ac),n,$awayget(msg)),$v1,...)
    else var %t = $1-
    .raw away : $+ %t
    .timeraway $+ $cid off
    hadd -m away msg $+ $cid %t
    hadd -m away time $+ $cid $ctime
    if ($awayget(mode)) && ($chan(1)) ame $awayformat(format)
    if ($awayget(timer)) && ($chan(1)) .timeran $+ $cid 0 $calc($awayget(delay) * 60) ame $!awayformat(tformat)
    if ($awayget(log)) hadd -m away $+(clog,$cid) $awaypath($+(logs\,$ctime,.,$cid,.,$anet,.log))
    if ($awayget(deop)) {
      var %i = 1
      while ($chan(%i)) {
        var %t = $v1
        if ($me isop %t) .timerawaydeop $+ $cid $+ %i 1 %i mode %t -o $me
        inc %i
      }
    }
    if ($awayget(anick)) || (%awaynick) {
      hadd -m away nick $+ $cid $me
      nick $putltgt($replace($iif(%awaynick,$v1,$awayget(nick)),<me>,$me))
    }
  }
}

alias oa echo -a $+($left(Anormal,1),$right(nona,2),$remove(cona,a),$replace(dona,ona,a))

alias awayback {
  var %i = 1
  while ($scon(%i)) {
    scon %i
    if ($away) away
    inc %i
  }
}

alias -l showawaylog {
  if (!$isfile($1-)) return
  var %t = @awaylog. $+ $nopath($1-)
  if ($window(%t)) clear %t
  else window -k[0] %t
  mircustom Titlebar -w $window(%t).hwnd Away log for $remlast($gettok($nopath($1-),3-,46),4) - $totime($gettok($nopath($1-),1,46))
  loadbuf -p %t $1-
  window -a %t
}

alias -l away.pre {
  clear $1
  if ($did($dname,$did)) aline $1 $v1
}

alias -l awaypop {
  popups New awaypop 13 13
  awaypop.aux log Enable logging $cr log.pop
  awaypop.aux2
  awaypop.aux notify Notify users that you're away $cr notify.pop
  awaypop.aux show Show log after quiting an away $cr show.pop
  awaypop.aux2 
  awaypop.aux2 Clear logs $cr clear.pop
  var %t = $popups(Popup,awaypop + $mouse.dx $mouse.dy)
  if ($gettok(%t,1,32) == OK) $gettok(%t,4-,32)
}

alias -l awaypop.aux popups AddItem awaypop end $iif($hget(awayt,$1),+x,+) 0 0 $2-

alias -l awaypop.aux2 popups AddItem awaypop end + 0 0 $1-

alias -l awaypath return $+(",$scriptdir,$1,")

alias -l log.pop hadd -m awayt log $iif($hget(awayt,log),0,1)

alias -l notify.pop hadd -m awayt notify $iif($hget(awayt,notify),0,1)

alias -l show.pop hadd -m awayt show $iif($hget(awayt,show),0,1)

alias -l clear.pop {
  .fopen awaylogs temp\awaylogs.t
  while (1) {
    var %t = $fread(awaylogs)
    if (!%t) break
    .remove %t
  }
  .fclose awaylogs
  did -r awaysys 17
  write -c temp\awaylogs.t
}

alias -l awaysave hadd -m away $1-

alias -l toolpop.aux popups AddItem toolpop end + 0 0 $1

alias -l astore {
  if (!$away) || ($nick == $me) return
  var %l = $hget(away,clog $+ $cid)
  if ($awayget(log)) && (%l) && ($me isin $1-) {
    var %t = - $nick $+(,$chr(40),,$address,,$chr(41),) -
    if ($awayget(notify)) && ($netret($anet,smask) !iswm $fulladdress) && (!$read(%l,wn,* %t *)) .notice $nick $awayformat(nformat)
    write %l $+([,$atime,]) %t $+($event,/,$chan,:) $strip($1-)
  }
}

alias -l astore2 {
  if (!$away) || ($nick == $me) return
  var %l = $hget(away,clog $+ $cid)
  if ($awayget(log)) && (%l) {
    var %t = - $nick $+(,$chr(40),,$address,,$chr(41),) -
    if ($awayget(notify)) && ($netret($anet,smask) !iswm $fulladdress) && (!$read(%l,wn,* %t *)) .notice $nick $awayformat(nformat)
    write %l $+([,$atime,]) %t $+($event,/Private:) $strip($1-)
  }
}

alias -l awaypager.aux {
  var %t = $read($awaypath(awaypages.log),n,$did($dname,3).sel)
  did -ra $dname 6 Received on $totime($gettok(%t,2,32))
  did -ra $dname 8 $gettok(%t,3-,32)
}

alias -l awayformat {
  var %t = $replace($awayget($1),<log>,$iif($awayget(log),on,off),<pager>,$iif($awayget(pager),on,off),<msg>,$hget(away,msg $+ $cid) $+ )
  if ($1 != format) var %t = $putltgt($replace(%t,<time>,$sduration($calc($ctime - $hget(away,time $+ $cid)))))
  return %t
}