Restricted.tcl

By Get_A_Fix on Aug 13, 2010

Another script I was asked to make :/

A basic script to restrict a channel, by removing all users who are not on the bots access list.

See code below for syntax.

NOTE: This code is NOT intended to be used as a takeover script. This simply acts like a /chanserv set #channel restricted on <- stopping users without access from entering. Some people have become confused about my intentions. This sets the record straight.

# Restricted TCL - istok@IRCSpeed.org
# $Id: restricted.tcl,v1.4 06/09/2014 03:47:42am GMT +12 (NZST) IRCSpeed Exp $

# RECOMMENDED
# Please add services to your bot, if you haven't already. (via dcc)
# SYNTAX: .+user serv *!*@services.network.etc
# SYNTAX: .chattr serv +f
# and possibly add a few extra masks...
# SYNTAX: .+host serv nickserv!*@*
# SYNTAX: .+host serv chanserv!*@*

# COMMANDS
# --------
# !restricted on|off <- public command
# /msg botnick restricted #channel on|off <- private command

# Set Global trigger here.
set trig "!"

# Set Global Exempt flags here (default +ovf (Global Operator, Global Voice, Friend, and above))
set gflags ovf

# Set Channel Exempt flags here (default +ovfb (Channel Operator, Voice, Friend, Bot, and above))
set cflags ovfb

# Set the banmask to use in banning the IPs  
# Default banmask is set to 1
# 1 - *!*@some.domain.com 
# 2 - *!*@*.domain.com
# 3 - *!*ident@some.domain.com
# 4 - *!*ident@*.domain.com
# 5 - *!*ident*@some.domain.com
# 6 - *nick*!*@*.domain.com
# 7 - *nick*!*@some.domain.com
# 8 - nick!ident@some.domain.com
# 9 - nick!ident@*.host.com
# 10 - *!*ident*@*
set bantype 1

# ---------- No need to edit anything else *YAY* ----------
bind pub - ${trig}restricted restrict:pub
bind msg - restricted restrict:msg
bind join - * restrict:join

proc makeTrig {} {
  global trig
  return $trig
}

setudef flag restricted

proc restrict:pub {nick uhost hand chan arg} {
  if {[matchattr [nick2hand $nick] o|n $chan]} {
    if {[lindex [split $arg] 0] eq ""} {putquick "PRIVMSG $chan :ERROR: Incorrect Parameters. SYNTAX: [makeTrig]restricted on/off"; return}

    if {[lindex [split $arg] 0] eq "on"} {
      if {[channel get $chan restricted]} {putquick "PRIVMSG $chan :ERROR: This setting is already enabled."; return}
      channel set $chan +restricted
      puthelp "PRIVMSG $chan :Enabled Restriction of Users for $chan"
      restrict:chan $chan
      return 0
    }

    if {[lindex [split $arg] 0] eq "off"} {
      if {![channel get $chan restricted]} {putquick "PRIVMSG $chan :ERROR: This setting is already disabled."; return}
      channel set $chan -restricted
      puthelp "PRIVMSG $chan :Disabled Restriction of Users for $chan"
      return 0
    }
  }
}

proc restrict:msg {nick uhost hand arg} {
  global botnick
  set chan [strlwr [lindex $arg 0]]
  if {[matchattr [nick2hand $nick] o|n $chan]} {
    if {[lindex [split $arg] 0] eq ""} {putquick "NOTICE $nick :\037ERROR\037: Incorrect Parameters. \037SYNTAX\037: /msg $botnick restricted #channel on/off"; return}
    if {[lindex [split $arg] 1] eq ""} {putquick "NOTICE $nick :\037ERROR\037: Incorrect Parameters. \037SYNTAX\037: /msg $botnick restricted $chan on/off"; return}

    if {[lindex [split $arg] 1] eq "on"} {
      if {[channel get $chan restricted]} {putquick "NOTICE $nick :\037ERROR\037: This setting is already enabled."; return}
      channel set $chan +restricted
      putquick "NOTICE $nick :Enabled Restriction of Users for $chan"
      restrict:chan $chan
      return 0
    }

    if {[lindex [split $arg] 1] eq "off"} {
      if {![channel get $chan restricted]} {putquick "NOTICE $nick :\037ERROR\037: This setting is already disabled."; return}
      channel set $chan -restricted
      putquick "NOTICE $nick :Disabled Restriction of Users for $chan"
      return 0
    }
  }
}

proc restrict:chan {chan} {
  global gflags cflags
  foreach nick [chanlist $chan] {
    if {![isbotnick $nick] && ![matchattr [nick2hand $nick] $gflags|$cflags $chan] && [channel get $chan restricted] && [onchan $nick $chan]} {
      set uhost [getchanhost $nick $chan]
      set banmask [restrict:mask $uhost $nick]
      pushmode $chan +b $banmask
      putquick "KICK $chan $nick :This Channel has been set \002Restricted\002 - You are now Unwelcome."
    }
  }
  flushmode $chan
}

proc restrict:join {nick uhost hand chan} {
  global gflags cflags
  if {![isbotnick $nick] && ![matchattr [nick2hand $nick] $gflags|$cflags $chan] && [channel get $chan restricted] && [onchan $nick $chan]} {
    set banmask [restrict:mask $uhost $nick]
    putquick "MODE $chan +b $banmask"
    putquick "KICK $chan $nick :This is a \002Restricted\002 Channel."
  }
}

proc restrict:mask {uhost nick} {
  global bantype
  switch -- $bantype {
    1 { set mask "*!*@[lindex [split $uhost @] 1]" }
    2 { set mask "*!*@[lindex [split [maskhost $uhost] "@"] 1]" }
    3 { set mask "*!*$uhost" }
    4 { set mask "*!*[lindex [split [maskhost $uhost] "!"] 1]" }
    5 { set mask "*!*[lindex [split $uhost "@"] 0]*@[lindex [split $uhost "@"] 1]" }
    6 { set mask "*$nick*!*@[lindex [split [maskhost $uhost] "@"] 1]" }
    7 { set mask "*$nick*!*@[lindex [split $uhost "@"] 1]" }
    8 { set mask "$nick![lindex [split $uhost "@"] 0]@[lindex [split $uhost @] 1]" }
    9 { set mask "$nick![lindex [split $uhost "@"] 0]@[lindex [split [maskhost $uhost] "@"] 1]" }
    10 { set mask "*!*[lindex [split $uhost "@"] 0]*@*" }
    default { set mask "*!*@[lindex [split $uhost @] 1]" }
    return $mask
  }
}

putlog "Restricted.TCL Loaded. - istok@IRCSpeed.org"

Comments

Sign in to comment.
RaZ   -  Aug 13, 2010

Nice Script Ty

kcco  -  Jan 31, 2014

how to enable chan for specific user@host

Get_A_Fix  -  Sep 05, 2014

You add the user's to the bot, this is how they get exempt.

Sign in to comment

Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.