
; ======================
; = Query block script by Pass
; ---------------------------------
alias qb.msg.hold return $iif(%qb.msg.hold,$v1,Please hold while message is approved)
alias qb.msg.dec return $iif(%qb.msg.dec,$v1,Sorry but your message has been declined)
alias qb.msg.acc return $iif(%qb.msg.acc,$v1,Your message has been accepted)
alias qb.time.deny return $iif(%qb.time.deny,$v1,120)
alias qb.time.ign return $iif(%qb.time.ign,$v1,120)
; ---------------------------------
; = Do not edit below this line
; ======================

#qb on
on ^*:OPEN:?:*: {
  if ( !$window(@PMBlocker) ) {
    window -nl @PMBlocker
    aline -m @PMBlocker $str(,5) PM Blocker Logs $str(,5)
  }
  if (!$timer($+(qb.deny.,$nick,.,$scid($network)))) {
    var %a = $address($nick,2)
    if ($gettok($q.check(%a,$network),2,32) == $false) {
      .msg $nick $qb.msg.dec
      .ignore $+(-pu,$qb.time.ign) %a
      ; aline -m @PMBlocker  $nick on $network was 04auto-denied$q.ts
    }
    if ($gettok($q.check(%a,$network),2,32) == $true) {
      query $nick $qb.msg.acc
      ; aline -m @PMBlocker  $nick on $network was 03auto-accepted$q.ts
    }
    else {
      .timerqb.deny. $+ $nick $+ . $+ $scid($network) 1 $qb.time.deny qb.deny $nick $network
      qb.queue.add $nick $scid($network) $network
      .msg $nick $qb.msg.hold
      var %n = $+(qb.,$nick,.,$scid($network),.,temp)
      hadd -m %n $timestamp $+(<,$nick,>) $1-
      aline -h @PMBlocker $nick on $network is 07waiting acceptance... $q.ts
      $+(timerdline.,$nick,.,$network) 1 $qb.time.deny dline @PMBlocker $fline(@PMBlocker,$nick $network,0)
    }
  }
  else {
    var %n = $+(qb.,$nick,.,$scid($network),.,temp)
    hadd -m %n $timestamp $+(<,$nick,>) $1-
  }
  halt
}
menu @PMBlocker {
  dclick:{
    var %line = $sline(@pmblocker,1),%ln = $sline(@pmblocker,1).ln
    tokenize 32 %line
    if ($qb.queue.ison($1,$3)) {
      var %op = $input(Accept PM from $1 $+ ?,y,Option)
      if (%op == $true) qb.accept $1 $3
      elseif (%op == $false) qb.deny $1 $3
      if (%op != $null) dline @PMBlocker %ln
    }
  }
}
alias qb.queue.ison {
  var %n = $+($1,.,$scid($2))
  if ($hget(qb.queue,%n)) return $true
}
alias qb.accept {
  if ($qb.queue.del($1,$2)) {
    query $1
    .msg $1 $qb.msg.acc
    .timerqb.deny. $+ $1 $+ . $+ $scid($2) off
    var %n = $+(qb.,$1,.,$scid($2),.,temp)
    if ($hget(%n)) {
      var %x = 1
      echo $1 $str(,5) - Previously - $str(,5)
      while ($hget(%n,%x).item) {
        echo $1 $v1 $hget(%n,$v1)
        inc %x
      }
      hfree %n
      echo $1 $str(,5) - /Previously - $str(,5)
    }
    ; aline -m @PMBlocker < $1 on $2 was 03accepted $q.ts
  }
}
alias qb.deny {
  if ($qb.queue.del($1,$2)) {
    .msg $1 $qb.msg.dec
    .timerqb.deny. $+ $1 $+ . $+ $scid($2) off
    var %n = $+(qb.,$1,.,$scid($2),.,temp)
    if ($hget(%n)) hfree %n
    ; aline -m @PMBlocker > $1 on $2 was 04denied $q.ts
  }
}
alias qb.queue.add {
  hadd -m qb.queue $+($1,.,$2) $iif($3-,$3-,$true)
  return Added $1 to the queue list on $scid($2).network
}
alias qb.queue.del {
  if ($timer($+(qb.deny.,$1,.,$2))) .timerqb.deny. $+ $1 $+ . $+ $2 off
  hdel qb.queue $+($1,.,$2)
  return Deleted $1 from the queue list on $scid($2).network
}
#qb end

alias q.ts return $asctime((mm/dd/yy hh:nn:ssTT))

alias q.add {
  if (!$hget(queryblock)) q.start
  if (!$q.check($1,$2)) { hadd queryblock $+($1,.,$scid($2)) $iif($3,$3,$false) | return Added $1 to the query list on $2 }
}
alias q.del {
  if (!$hget(queryblock)) q.start
  if ($1 === -c) { var %msg = Cleared $hget(queryblock,0).item query entire(s) | hfree queryblock | return %msg }
  if ($1 isnum $+(1-,$hget(queryblock,0).item)) {
    var %item = $hget(queryblock,$1).item
    hdel queryblock %item
    return Deleted %item from the query block list
  }
  if ($q.check($1,$2)) {
    if ($3 == $false) {
      if ($hget(queryblock,$+($1,.,$scid($2))).data == $false) {
        hdel queryblock $+($1,.,$scid($2))
        returne Deleted $1 from query list on $2 from $iif($3,Acceptance,Denial) list
      }
    }
    else {
      hdel queryblock $+($1,.,$scid($2))
      return Deleted $1 from the query list on $2
    }
  }
  else return
}
alias q.check return $iif($hfind(queryblock,$+($1,.,$scid($2)),1,W).item,$hfind(queryblock,$+($1,.,$scid($2)),1,Wn) $hget(queryblock,$hfind(queryblock,$+($1,.,$scid($2)),1,Wn)))

alias q.list {
  if (!$hget(queryblock)) q.start
  if ($1 === -a)  return $hget(queryblock,0).item
  if ($1 === -o) return $hfind(queryblock,$true,0,n).data
  if ($1 === -x) return $hfind(queryblock,$false,0,n).data
}
on *:start:q.start
on *:exit:q.exit
alias q.start {
  if ($hget(queryblock)) q.exit
  hmake queryblock
  if ($isfile($qt($+($scriptdir,queryblock.hsh)))) hload queryblock $qt($+($scriptdir,queryblock.hsh))
  return Successful Start
}
alias q.exit {
  if ($hget(queryblock)) {
    hsave -o queryblock $qt($+($scriptdir,queryblock.hsh))
    return Successful Exit
  }
  else return $false
}
menu nicklist {
  Query Block
  .$iif(!$q.check($address($1,5),$network),$style(2)) Listed $iif($q.check($address($1,5),$network),( $+ $iif($gettok($v1,2,32),Allow,Block) $+ )) :return
  .-
  .$iif($group(#qb) != on || $q.check($address($1,5),$network),$style(2)) Add:q.add $address($1,2) $network $input(Allow PMs from $1 $+ ?,y,Query Block)
  .$iif(!$hget(queryblock,0).item || $group(#qb) != on || !$q.check($address($1,5),$network),$style(2)) Delete:{
    var %raw = $gettok($q.check($address($1,5),$network),1,32),%r = $numtok(%raw,46)
    var %d = $gettok(%raw,%r,46),%new = $remove(%raw,. $+ %d)
    q.del %new $network
  }
  .-
  .$iif(!$hget(queryblock,0).item || $group(#qb) != on,$style(2)) Clear:q.del -c
}
menu menubar,channel,status {
  Query Block
  .Allowed ( $+ $iif($q.list(-o),$v1,0) $+ ) :return
  .Denied ( $+ $iif($q.list(-x),$v1,0) $+ ) :return
  .$iif($group(#qb) != on,En,Dis) $+ able: $($+(.,$iif($group(#qb) != on,en,dis),able),2) #qb
  .-
  .Settings
  ...Denial limit ( $+ $qb.time.deny $+ ):set %qb.time.deny $$?="Enter time:"
  ...Ignore time ( $+ $qb.time.ign $+ ):set %qb.time.ign $$?="Enter ignore time:"
  .-
  .Messages
  ..Hold
  ...$qb.msg.hold $+ :set %qb.msg.hold $$?="Enter new HOLDING message:"
  ..Accept
  ...$qb.msg.acc $+ :set %qb.msg.acc $$?="Enter new ACCEPTANCE message:"
  ..Decline
  ...$qb.msg.dec $+ :set %qb.msg.dec $$?="Enter new DECLINE message:"
  .-
  .Add:{
    var %a = $$?="Address:",%n = $network
    q.add %a %n $input(Allow PMs from user?,y,Query Block)
  }
  .$iif(!$q.list(-a),$style(2)) Delete:{
    var %a = $$?="Address:",%n = $network
    q.del %a %n $input(PMs from user Accepted?,y,Query Block)
  }
}
