All pastes #513522 Raw Edit

Someone

public text v1 · immutable
#513522 ·published 2007-05-27 09:26 UTC
rendered paste body
on *:CONNECT:{
  timertimers 0 1 timercheck timer
}
alias timercheck {
  if (!$hget(timers)) {
    hmake timers 100
    if ($exists(timers.db)) {
       hload timers timers.db
  }
}
 if ($1) {
  //Loop threw all timers, change off set since we just started duh?
  var %b = 1
  while ($get(timers,%b).item) {
  tokenize 32 $hget(timers,%b).data
  var %next = $1,%last = $2,%together = $calc($1 + $2)
  hadd timers $hget(timers,%b).item $1 $ctime $3-
  inc %b
}
//Change the active timer for this, so it doesn't modify the time. :p
  timertimers 0 1 timercheck
  var %b = 1
  while ($hget(timers,%b).item) {
    tokenize 32 $hget(timers,%b).data
    var %next = $1,%last = $2,%together = $calc($1 + $2)
    if (%together <= $ctime) { 
      $$3-
      hadd timers $hget(timers,%b).item $1 $ctime $3-
    }
    inc %b
  }
}
; $timer.ids(#channel)
alias timer.ids {
  if ($isid) && ($1) {
    if (!$hget(timers)) {
      hmake timers 100
      $iif($exists(timers.db),hload timers timers.db)
    }
    if ($left($1,1) != $chr(35)) { return 0 }
    var %a = 1,%b
    while ($hget(timers,%a).item) {
      var %stuff = $v1,%chan = $gettok(%stuff,1,$asc(.)),%id = $gettok(%stuff,2,$asc(.))
      if (%chan == $1) { var %b = $addtok(%b,%id,44) }
      inc %a
    }
    return %b
  }
}
;hadd -m timers <chan>.<name> <duration> <last dur> <message>
on 400:TEXT:@timer*:#:{
    ;timer add <name> <duration> <message>
   if (!$2) {
      notice $nick You must specify <add|remove|list>
   }
   if ($2 == list) {
      var %ids = $timer.ids($chan),%b = 1
      if (%ids == $null) { notice $nick Error: There are no timers for $chan $+ . | return }
      while ($gettok(%ids,%b,44) != $null) {
        var %id = $v1
        var %all = $hget(timers,$chan $+ . $+ %id)
        tokenize 32 %all
        var %dur = $1, %last $calc($2 + $1), %cmd $3-
        notice $nick Timer: Name: %id Duration: $duration(%dur) Next time: $duration($calc(%last - $ctime)) Channel: $4 Message: $5-
        inc %b
      }
    }
    if ($2 == add) {
      if (!$5) { notice $nick Error: Please specify <name> <duration> <message> | return }
      elseif ($duration($4) < $duration(2m)) { notice $nick Error: Duration must be greater than 2 minutes. | return }
      else {
        var %duration = $duration($4)
        hadd -m timers # $+ . $+ $3 %duration 0 privmsg $iif($left($5,1) == $chr(35),$5-,$chan $5-)
        hsave timers timers.db
        if (!$timer(timers)) { .timertimers 0 1 timercheck }
        notice $nick Timer  $+ $3 $+  added to Message: $iif($left($5,1) == $chr(35),$5,$chan) $6-
      }
    }
    if ($2 == remove) {
      if (!$3) {
        notice $nick Error: You must specify a timer name.
      }
      else {
        if ($hget(timers,$chan $+ . $+ $3) == $null) { notice $nick Error: Invaild name. Vaild names are: $iif($timer.ids($chan),$v1,None) }
          else {
            hdel timers # $+ . $+ $3
            notice $nick Deleted timer: $3
          }
        }
    }
  }
}