All pastes #768793 Raw Edit

raydronE

public text v1 · immutable
·published 2007-11-10 21:50 UTC
rendered paste body
on *:CONNECT: {
  var %i = 1 | while ($var(%i.limit*,%i)) { check.timerstart $mid($v1,9) | inc %i }
}
alias check.timerstart {
  if (!%i.interval [ $+ [ $1 ] ]) { set %i.interval $+ $1 180 }
  .timercheckidle. $+ $1 0 %i.interval [ $+ [ $1 ] ] check.idle $1
}
alias check.timerstop { .timercheckidle. $+ $1 OFF }
alias check.idle {
  if ($me !isop $1) { return }
  var %chan = $1
  if (!%i.limit [ $+ [ $1 ] ]) {
    .echo 4 -a Idle Check is not set for %chan
    return
  }
  var %i = $nick(%chan,0,o), %chunk
  while (%i) {
    var %n = $nick(%chan,%i,o)
    if (%n != $me) && ($nick(%chan,%i,o).idle > %i.limit [ $+ [ %chan ] ]) {
      .msg %n Idle Time Limit is : %i.limit [ $+ [ %chan ] ]
      var %chunk = $addtok(%chunk,%n,32)
      if ($numtok(%chunk,32) == $modespl) {
        mode %chan $+(-,$str(o,$modespl)) %chunk
        var %chunk
      }
    }
    dec %i
  }
  if (%chunk) { mode %chan $+(-,$str(o,$numtok(%chunk,32))) %chunk }
}

menu channel {
  -
  Idle Limiter
  .Set :set %i.limit $+ $chan $$?="Idle limit? (60 = 1 minute) "
  .Reset :unset %i.limit $+ $chan
  .Check Now: { check.idle $chan }
  .-
  .Start Auto Check: { check.timerstart $chan }
  .Stop Auto Check: { check.timerstop $chan }
  .Interval ( $+ %i.interval [ $+ [ $chan ] ] $+ ): { 
    set %i.interval $+ $chan $$?="Interval in sec for $chan ?"
    var %n = checkidle. $+ $chan | if (!$timer(%n)) { return }
    check.timerstart $chan
  }
  -
}