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"
how to enable chan for specific user@host