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
}