All pastes #458255 Raw Edit

Miscellany

public text v1 · immutable
#458255 ·published 2007-04-25 20:02 UTC
rendered paste body
on 1:start:{
  if ( $exists(scseen.hsh) ) {
    .hmake scseen 1000
    .hload scseen scseen.hsh
  }
  if ( !$hget(scseen) ) {
    sc.mhash
    echo -s Making new hash table. (scseen.hsh could not be found.)
  }
}
on 1:unload:{
  if ( $hget(scseen)) {
    echo -s Saving hash table to: $mircdir $+ scseen.hsh
    .hsave -o scseen scseen.hsh
  }
  if ( $exists(scseen.hsh) ) {
    echo -s Overwriting older hash table information.
  }
  .hfree scseen
  if ( !$hget(scseen) ) { echo -s Seen hash table memory: cleared. }
}
alias sc.mhash {
  .hmake scseen 1000
  .hadd scseen scseenstats.date $ctime
}
on 1:exit:{
  .hsave -o scseen scseen.hsh
  .hfree scseen
}
on 1:action:*:#:{
  var %say 1
  sc.seen
  hadd scseen $+($nick,.,action) action
  hadd scseen $+($nick,.,msg) $1-

}
on 1:text:*:#:{
  if ( $1 == %trigger $+ seen ) && ( !$2 ) {
    .msg $chan $seen(0)
    halt
  }
  if ( $1 == %trigger $+ seen ) && ( $2 != $me )  && ( $2 ison $chan ) {
    .msg $chan %left Seen %mid $2 is currently online. $2 is in your current channel: $chan $+ . %right
    halt
  }
  if ( $1 == %trigger $+ seen ) && ( $2 ) && ( $2 != $me ) && ( $2 != $nick ) {
    if ( $comchan($2,2) ) {
      var %i 1
      while ( $comchan($2,%i) )  {
        var %chans = %chans $comchan($2,%i)
        inc %i 1
      }
      msg $chan %left Seen %mid $2 is currently on: %chans %right
      unset %chans
      halt
    }
    if ( $comchan($2,1) ) && ( $comchan($2,1) != $chan )  {
      .msg $chan %left Seen %mid $2 is currently in $comchan($2,1) %right
      halt
    }
    .msg $chan $seen($2)
    halt
  }
  var %say 1
  sc.seen
  hadd scseen $+($nick,.,action) say
  hadd scseen $+($nick,.,msg) $1-
}
on 1:nick:{
  .hdel -w scseen $+($nick,.,*)
  .hadd scseen $+($newnick,.,nick) $nick
  .hadd scseen $+($newnick,.,Address) $address($newnick,-1)
  if ( $chan ) { hadd scseen $+($newnick,.,Chan) $chan }
  .hadd scseen $+($newnick,.,time) $ctime
  .hadd scseen $+($newnick,.,network) $network
}
on 1:join:#:{
  sc.seen
  hadd scseen $+($nick,.,action) join
}
on 1:part:#:{
  sc.seen
  hadd scseen $+($nick,.,action) part
}
on 1:quit:{
  sc.seen
  hadd scseen $+($nick,.,action) quit
}
alias seen.reset {
  if ( $hget(scseen) ) { hfree scseen | echo -s Hash table unloaded from memory. }
  if ( $exists(scseen.hsh) ) { remove scseen.hsh | echo -s Hash file deleted. }
  echo -a All stats have been erased
}
alias sc.seen {
  if ( !$hget(scseen) ) {
    sc.mhash
  }
  if ( !$hget(scseen,$nick $+ .nick) ) { hadd scseen scseenstats.total $calc($hget(scseen,scseenstats.total) + 1) }
  hadd scseen $+($nick,.,nick) $nick
  hadd scseen $+($nick,.,Address) $address($nick,-1)
  if ( $chan ) { hadd scseen $+($nick,.,Chan) $chan }
  hadd scseen $+($nick,.,time) $ctime
  hadd scseen $+($nick,.,network) $network
  if ( $1 ) && ( %say == 1 )  { hadd scseen $+($nick,.,msg) $1- }
}
alias seen {
  if ( $1 == 0 ) {  return %left Seen %mid I have seen $hget(scseen,scseenstats.total) people since $asctime($hget(scseen,scseenstats.date),dddd) $ord($asctime($hget(scseen,scseenstats.date),dd)) $asctime($hget(scseen,scseenstats.date),mmmm yyyy) $+ . ( $+ $duration($calc($ctime - $hget(scseen,scseenstats.date)),2) $+ ) %right }
  if ( $1 isnum ) {
    if ( $hget(scseen,$hfind(scseen,*.nick,1,w)) ) {
      if ( $prop ) { return $hget(scseen,$hfind(scseen,*. $+ $prop,$1,w)) }
      return $hget(scseen,$hfind(scseen,*.nick,$1,w))
    }
  }
  if ( $hget(scseen,$1 $+ .nick) ) && ( $hget(scseen,$1 $+ .network) == $network ) {
    if ( $prop ) {
      return $hget(scseen,$hfind(scseen,$1 $+ . $+ $prop,1,w))
    }
    return %left Seen %mid $hget(scseen,$hfind(scseen,$1 $+ .nick,1,w)) was last seen at $asctime($hget(scseen,$hfind(scseen,$1 $+ .time,1,w))) ( $+ $duration($calc($ctime - $hget(scseen,$hfind(scseen,$1 $+ .time,1,w)))) ago) $iif($hget(scseen,$hfind(scseen,$1 $+ .chan,1,w)),in $hget(scseen,$hfind(scseen,$1 $+ .chan,1,w)) $+ . ) %right
  }
  return %left Seen %mid I can not find that person. %right
}