mIRC Home    About    Download    Register    News    Help

Print Thread
Joined: Feb 2003
Posts: 2,737
Raccoon Offline OP
Hoopy frood
OP Offline
Hoopy frood
Joined: Feb 2003
Posts: 2,737
Show someone's idle times for the server and each channel you share in common.
Handy if you're being a nosy stalker. Replaces /whois in most cases.

Usage: /idle Raccoon

* Raccoon signed on 2w1d, idle 1s, @#raccoon[1s] Query[1m5s] Chat[1m12s] @#irchelp[2h9m] +#politics[15h6m] #efnet[2w1d]

http://www.hawkee.com/snippet/10010/

Code:
; Use: /idle <nickname>
ALIAS idle { ; by Raccoon 10-July-2013 13-aug-2013
  .raw WHOIS $$1 $1
  .enable #idle_whois
  hinc -mu5 idle_whois cnt 1
  .timerIDLE_WHOIS 1 5 .disable #idle_whois
}
#idle_whois off
RAW 319:*: { hadd -mu5 idle_whois $cid $+ $2 $+ .chans $hget(idle_whois,$cid $+ $2 $+ .chans) $3- | halt }
RAW 317:*: { hadd -mu5 idle_whois $cid $+ $2 $+ .idle $3-4 | halt }
RAW 318:*: { 
  VAR %PRECISION = 2
  var %nick = $2
  var %chans = $hget(idle_whois,$cid $+ $2 $+ .chans)
  var %idles = $hget(idle_whois,$cid $+ $2 $+ .idle)
  var %idle = $gettok(%idles,1,32), %signon = $gettok(%idles,2,32)
  var %i = 1, %cidles, %rchans = %chans
  if ($query(%nick)) { var %cidles = $query(%nick).idle $+ :Query }
  if ($chat(%nick)) { var %cidles = %cidles $chat(%nick).idle $+ :Chat }
  WHILE $gettok(%chans,%i,32) {
    var %pchan = $v1
    var %chan = $regsubex(%pchan,/^[^ $chantypes ]*/x,)
    var %cidle = $nick(%chan,%nick).idle
    if (%cidle != $null) { 
      var %cidles = %cidles %cidle $+ : $+ %pchan
      var %rchans = $remtok(%rchans,%pchan,1,32)
    }
    inc %i
  }
  var %cidles = $sorttok(%cidles,32,n)
  var %i = 1, %chanidles
  WHILE $gettok(%cidles,%i,32) {
    var %pchan = $gettok($v1,2,58)
    var %cidle = $gettok($v1,1,58)
    var %chanidles = %chanidles %pchan $+ [[ $+ $dur(%cidle,%PRECISION) $+ ]]
    inc %i
  }
  echo -atic whois * $2 signed on $dur($calc($ctime - %signon),2) $+ , idle $dur(%idle,2) $+ , %chanidles %rchans
  hdel -w idle_whois $cid $+ $2 $+ .*
  hdec -m idle_whois cnt 1
  if (!$hget(idle_whois,cnt)) { .disable #idle_whois | hfree -w idle_whois }
  halt
}
RAW *:*: halt
#idle_whois end

;$duration(12345678) = 20wks 2days 21hrs 21mins 18secs / $dur(12345678) = 20w2d21h21m18s / $dur(12345678,2) = 20w2d
ALIAS dur { return $remove($gettok($regsubex($duration($1),/(\d+\w)\S*/g,\t),1- $+ $2,32),$chr(32)) } ; by Raccoon


Well. At least I won lunch.
Good philosophy, see good in bad, I like!
Joined: Feb 2003
Posts: 2,737
Raccoon Offline OP
Hoopy frood
OP Offline
Hoopy frood
Joined: Feb 2003
Posts: 2,737
Any suggestions on simplifying this script? It works nicely but doesn't look very elegant.


Well. At least I won lunch.
Good philosophy, see good in bad, I like!
D
Deega
Deega
D
Couple of things I see at a quick look

There's no reason for "var %nick = $2", just use $2.

Why loop channel/query/chat's twice?

Also just declare %rchans blank and add chans as needed.



Code:
  var %i = 1, %cidles, %rchans
  if ($query($2)) { %cidles = $+(Query[,$dur($query($2).idle,%PRECISION),]) }
  if ($chat($2)) { %cidles = %cidles $+(Chat[,$dur($chat($2).idle,%PRECISION),]) }
  WHILE $gettok(%chans,%i,32) {
    var %pchan = $v1, %chan = $regsubex(%pchan,/^[^ $chantypes ]*/x,)
    if ($nick(%chan,$2).idle isnum) { %cidles = %cidles $+(%pchan,[,$dur($v1,%PRECISION),]) }
    else %rchans = %rchans %pchan
    inc %i
  }


Also
Code:
alias dur return $regsubex($gettok($duration($1),1- $2,32),/[kayrinec ]s?/g,)


Last edited by Deega; 18/08/13 11:05 PM.
Joined: Jan 2004
Posts: 1,330
L
Hoopy frood
Offline
Hoopy frood
L
Joined: Jan 2004
Posts: 1,330
There is a reason to use var %nick = $2; readability and maintainability.

D
Deega
Deega
D
If you look at his original code you'll see that both "%nick" and "$2" are being used throughout (even after setting %nick), there goes readability laugh
As for maintainability, "$2" is always going to be... "$2" That will not change. wink

Joined: Jan 2004
Posts: 1,330
L
Hoopy frood
Offline
Hoopy frood
L
Joined: Jan 2004
Posts: 1,330
But %nick might not always be $2

Joined: Sep 2005
Posts: 2,630
H
Hoopy frood
Offline
Hoopy frood
H
Joined: Sep 2005
Posts: 2,630
I prefer to initialise everything at the start, but that's just a preference thing I guess. Also, as previously suggested you should use %nick for readability purposes. You may one day forget what $2 is in the context of a whois reply, but you'll always know what %nick means smile

Code:
; Use: /idle <nickname>
ALIAS idle { ; by Raccoon 10-July-2013 13-aug-2013
  .raw WHOIS $$1 $1
  .enable #idle_whois
  hinc -mu5 idle_whois cnt 1
  .timerIDLE_WHOIS 1 5 .disable #idle_whois
}
#idle_whois off
RAW 319:*: { hadd -mu5 idle_whois $cid $+ $2 $+ .chans $hget(idle_whois,$cid $+ $2 $+ .chans) $3- | halt }
RAW 317:*: { hadd -mu5 idle_whois $cid $+ $2 $+ .idle $3-4 | halt }
RAW 318:*: { 
  VAR %PRECISION = 2, %nick = $2, %chans = $hget(idle_whois,$cid $+ $2 $+ .chans), %idles = $hget(idle_whois,$cid $+ $2 $+ .idle), $&
  %idle = $gettok(%idles,1,32), %signon = $gettok(%idles,2,32), %i = 1, %cidles, %rchans = %chans, %pchan, %chan, %cidles, %cidle, %chanidles
  if ($query(%nick)) { %cidles = $query(%nick).idle $+ :Query }
  if ($chat(%nick)) { %cidles = %cidles $chat(%nick).idle $+ :Chat }
  WHILE $gettok(%chans,%i,32) {
    %pchan = $v1
    %chan = $regsubex(%pchan,/^[^ $chantypes ]*/x,)
    %cidle = $nick(%chan,%nick).idle
    if (%cidle != $null) { 
      %cidles = %cidles %cidle $+ : $+ %pchan
      %rchans = $remtok(%rchans,%pchan,1,32)
    }
    inc %i
  }
  %cidles = $sorttok(%cidles,32,n)
  %i = 1
  %chanidles = 
  WHILE $gettok(%cidles,%i,32) {
    %pchan = $gettok($v1,2,58)
    %cidle = $gettok($v1,1,58)
    %chanidles = %chanidles %pchan $+ [[ $+ $dur(%cidle,%PRECISION) $+ ]]
    inc %i
  }
  echo -atic whois * %nick signed on $dur($calc($ctime - %signon),2) $+ , idle $dur(%idle,2) $+ , %chanidles %rchans
  hdel -w idle_whois $cid $+ %nick $+ .*
  hdec -m idle_whois cnt 1
  if (!$hget(idle_whois,cnt)) { .disable #idle_whois | hfree -w idle_whois }
  halt
}
RAW *:*: halt
#idle_whois end

;$duration(12345678) = 20wks 2days 21hrs 21mins 18secs / $dur(12345678) = 20w2d21h21m18s / $dur(12345678,2) = 20w2d
ALIAS dur { return $remove($gettok($regsubex($duration($1),/(\d+\w)\S*/g,\t),1- $+ $2,32),$chr(32)) } ; by Raccoon

Joined: Feb 2025
Posts: 2
abi Offline
Bowl of petunias
Offline
Bowl of petunias
Joined: Feb 2025
Posts: 2
Originally Posted by Raccoon
Show someone's idle times for the server and each channel you share in common.
Handy if you're being a nosy stalker. Replaces /whois in most cases.

Usage: /idle Raccoon

* Raccoon signed on 2w1d, idle 1s, @#raccoon[1s] Query[1m5s] Chat[1m12s] @#irchelp[2h9m] +#politics[15h6m] #efnet[2w1d]

http://www.hawkee.com/snippet/10010/

Code
; Use: /idle <nickname>
ALIAS idle { ; by Raccoon 10-July-2013 13-aug-2013
  .raw WHOIS $$1 $1
  .enable #idle_whois
  hinc -mu5 idle_whois cnt 1
  .timerIDLE_WHOIS 1 5 .disable #idle_whois
}
#idle_whois off
RAW 319:*: { hadd -mu5 idle_whois $cid $+ $2 $+ .chans $hget(idle_whois,$cid $+ $2 $+ .chans) $3- | halt }
RAW 317:*: { hadd -mu5 idle_whois $cid $+ $2 $+ .idle $3-4 | halt }
RAW 318:*: { 
  VAR %PRECISION = 2
  var %nick = $2
  var %chans = $hget(idle_whois,$cid $+ $2 $+ .chans)
  var %idles = $hget(idle_whois,$cid $+ $2 $+ .idle)
  var %idle = $gettok(%idles,1,32), %signon = $gettok(%idles,2,32)
  var %i = 1, %cidles, %rchans = %chans
  if ($query(%nick)) { var %cidles = $query(%nick).idle $+ :Query }
  if ($chat(%nick)) { var %cidles = %cidles $chat(%nick).idle $+ :Chat }
  WHILE $gettok(%chans,%i,32) {
    var %pchan = $v1
    var %chan = $regsubex(%pchan,/^[^ $chantypes ]*/x,)
    var %cidle = $nick(%chan,%nick).idle
    if (%cidle != $null) { 
      var %cidles = %cidles %cidle $+ : $+ %pchan
      var %rchans = $remtok(%rchans,%pchan,1,32)
    }
    inc %i
  }
  var %cidles = $sorttok(%cidles,32,n)
  var %i = 1, %chanidles
  WHILE $gettok(%cidles,%i,32) {
    var %pchan = $gettok($v1,2,58)
    var %cidle = $gettok($v1,1,58)
    var %chanidles = %chanidles %pchan $+ [[ $+ $dur(%cidle,%PRECISION) $+ ]]
    inc %i
  }
  echo -atic whois * $2 signed on $dur($calc($ctime - %signon),2) $+ , idle $dur(%idle,2) $+ , %chanidles %rchans
  hdel -w idle_whois $cid $+ $2 $+ .*
  hdec -m idle_whois cnt 1
  if (!$hget(idle_whois,cnt)) { .disable #idle_whois | hfree -w idle_whois }
  halt
}
RAW *:*: halt
#idle_whois end

;$duration(12345678) = 20wks 2days 21hrs 21mins 18secs / $dur(12345678) = 20w2d21h21m18s / $dur(12345678,2) = 20w2d
ALIAS dur { return $remove($gettok($regsubex($duration($1),/(\d+\w)\S*/g,\t),1- $+ $2,32),$chr(32)) } ; by Raccoon
If it's just idle without having to have a whois script, is that possible?


Link Copied to Clipboard