Skip to content

[mIRC] Request: !protect & !deprotect

Someone requested a !protect and !deprotect script be made for mIRC, so here it is! It uses chanserv to set the +a and -a modes.

I’ve not tested extensively so errors are entirely possible, let me know if you spot any errors or have suggestions for improvements.

Please set the level yourself, this scriptlet is to be used as a guideline i wouldn’t recommend you all stick it in your scripts as everyone has permission to use it! If you wish to restrict it, have it check a users database or make use of mIRC users lists.

; !deprotect, !protect public commands
on *:TEXT:*:#:{
  ; set max usage, 3 commands in 2 seconds, this prevents people flooding you
  hinc -mu2 usedprot max
  if ($hget(usedprot,max) >= 3) return
  if ($1 == !protect) {
    ;if already in raw processing, return
    if (%pubcmd.prot.busy == $true) {
      msg $chan Try again in a few moments.
      return
    }
    ; identify that protect was used
    set %pubcmd.prot.usedprot $true
    ; set variable to let script know that a request is currently underway
    set %pubcmd.prot.busy $true
    ; set which channel
    set %pubcmd.prot.chan $chan
    ; set nickname as that specified or use nickname of user
    if ($2 == $null) set %pubcmd.prot.nick $nick
    else {
      if ($2 !ison $chan) {
        msg $chan $2 is not on $chan $+ $chr(46)
        return
      }
      set %pubcmd.prot.nick $2
    }
    .enable #check_a
    mode $chan a
  }
  if ($1 == !deprotect) {
    if (%pubcmd.prot.busy == $true) {
      msg $chan Try again in a few moments.
      return
    }
    ; identify that deprotect was used
    set %pubcmd.prot.useddeprot $true
    ; set variable to let script know that a request is currently underway
    set %pubcmd.prot.busy $true
    set %pubcmd.prot.chan $chan
    if ($2 == $null) set %pubcmd.deprot.nick $nick
    else {
      if ($2 !ison $chan) {
        msg $chan $2 is not on $chan $+ $chr(46)
        return
      }
      set %pubcmd.deprot.nick $2
    }
    .enable #check_a
    mode $chan a
  }
}
#check_a off
raw 388:*:{
  ; Check that this raw event occured
  set %pubcmd.prot.388 $true
  if ($3 == %pubcmd.prot.nick) {
    msg %pubcmd.prot.chan $3 is already protected.
    set %pubcmd.prot.isprotected $true
    return
  }
  if ($3 == %pubcmd.deprot.nick) {
    cs deprotect %pubcmd.prot.chan $3
    set %pubcmd.prot.isprotected $true
    return
  }
}
raw 389:*:{
  ; If raw 388 didn't happen (i.e. no +a's)
  if (%pubcmd.prot.388 == $null) {
    if (%pubcmd.prot.usedprot == $true) {
      cs protect %pubcmd.prot.chan %pubcmd.prot.nick
      goto end
    }
    if (%pubcmd.prot.useddeprot == $true) {
      msg %pubcmd.prot.chan %pubcmd.deprot.nick is already deprotected.
      goto end
    }
  }
  if (%pubcmd.prot.388 == $true) {
    if (%pubcmd.prot.usedprot == $true) {
      if (%pubcmd.prot.isprotected == $true) goto end
      cs protect %pubcmd.prot.chan %pubcmd.prot.nick
      goto end
    }
    if (%pubcmd.prot.useddeprot == $true) {
      if (%pubcmd.prot.isprotected == $true) goto end
      msg %pubcmd.prot.chan %pubcmd.deprot.nick is already deprotected.
      goto end
    }
  }
  :end
  .unset %pubcmd.*prot.*
  .disable #check_a
}
#check_a END

This script goes in remote, usage is as follows:

!protect
ChanServ sets mode +a nick1
!protect nick2
ChanServ sets mode +a nick2

Same with deprotect. Not much use if you’re not running an mIRC bot, but a nice look into how raw events work if you’re getting into it!

Enjoy.

No comments yet

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.