Code:
on me:*:join:[color:brown]#yourchannel[/color]:.timerchkidle 0 30 checkidle #
on me:*:part:[color:brown]#yourchannel[/color]:.timerchkidle off
alias checkidle {
  if $me !isop $1 { return }
[color:gray]  ; first check voiced nicks to see if you should /hop them[/color]
  var %i = 1,%nicks
  while $nick($1,%i,[color:red]v[/color],[color:green]@%[/color]) {
[color:gray]    ; check [color:red]v[/color]oiced nicks [color:green](excludes Ops|Hops)[/color] idle times are >= [color:blue]3600[/color]secs (1 hour)[/color]
    if $nick($1,$v1).idle >= [color:blue]3600[/color] { %nicks = %nicks $nick($1,%i,v) }
    if $modespl // %i { mode $1 $+(+,$str(h,$v1)) %nicks | var %nicks }
    inc %i
  }
  if $numtok(%nicks,32) { mode $1 $+(+,$str(h,$v1)) %nicks }
[color:gray]  ; now check regulars[/color]
  var %i = 1,%nicks
  while $nick($1,%i,[color:red]r[/color]) {
[color:gray]    ; check if [color:red]r[/color]egular nicks idle times are >= [color:blue]1800[/color] seconds (30 mins)[/color]
    if $nick($1,$v1).idle >= [color:blue]1800[/color] { %nicks = %nicks $nick($1,%i,r) }
    if $modespl // %i { mode $1 $+(+,$str(v,$v1)) %nicks | var %nicks }
    inc %i
  }
  if $numtok(%nicks,32) { mode $1 $+(+,$str(v,$v1)) %nicks }
}