Code: Select all
#############################
# This is the main channel
#############################
set om_subc(main) "#mainchannel"
#############################
# This is the sub channel
#############################
set om_subc(sub) "#subchannel"
#############################
# Warning time, in minutes
#############################
set om_subc(warntime) 30
#############################
# Warning Message
#############################
set om_subc(warnmsg) "You have $om_subc(warntime) seconds to join $om_subc(main) or you will be banned"
#############################
# Kick Message
#############################
set om_subc(kickmsg) "You were banned from $om_subc(sub) because you have not joined $om_subc(main). Please join $om_subc(main) to have the ban removed."
#############################
# Unban message
#############################
set om_subc(unbannotice) "You have been unbanned from $om_subc(sub) , if you part $om_subc(main) you while in $om_subc(sub) you will be banned again."
#############################
# Set the ban type here: #
# 1 - *!*@host.domain #
# 2 - *!user@host.domain #
# 3 - nick!*@host.domain #
# 4 - nick!user@host.domain #
# 5 - *!?user@*.host.domain #
#############################
set om_subc(bantype) "1"
###################################
# Enable use of bold in DCC chat? #
###################################
set om_subc(bold) 1
#########################################
# Prefix "SPLIT:" in DCC chat messages? #
#########################################
set om_subc(SUBCHAN:) 1
#############################
# Code begin
#############################
if {![string match 1.6.* $version]} { putlog "\002SUBCHAN:\002 \002WARNING:\002 This script is intended to run on eggdrop 1.6.x or later." }
if {[info tclversion] < 8.2} { putlog "\002SUBCHAN:\002 \002WARNING:\002 This script is intended to run on Tcl Version 8.2 or later." }
bind join - "$om_subc(sub) *" subchan_checkjoin
bind join - "$om_subc(main) *" subchan_checkjoin
bind part - "$om_subc(main) *" subchan_checkpart
proc subchan_ncm {pattern string} { return [string match [string tolower $pattern] [string tolower $string]] }
proc subchan_dopre {} {
global om_subc
if {!$om_subc(SUBCHAN:)} { return "" }
if {!$om_subc(bold)} { return "SUBCHAN: " }
return "\002SUBCHAN:\002 "
}
proc subchan_maskban {nick uhost} {
global om_subc
switch -- $om_subc(bantype) {
1 { set ban "*!*@[lindex [split $uhost @] 1]" }
2 { set ban "*!$uhost" }
3 { set ban "$nick!*@[lindex [split $uhost @] 1]" }
4 { set ban "$nick!$uhost" }
5 { set ban [maskhost $uhost] }
default { set ban "*!*@[lindex [split $uhost @] 1]" }
}
return $ban }
proc subchan_checkjoin {nick uhost hand chan} {
global om_subc
if {![botisop $om_subc(sub)]} { return }
set banmask [subchan_maskban $nick $uhost]
if {[subchan_ncm $chan $om_subc(main)]} {
if {![ischanban $banmask $om_subc(sub)]} { return }
regsub -all -- "%mainchan" $om_subc(unbannotice) $om_subc(main) msg
regsub -all -- "%subchan" $msg $om_subc(sub) msg
pushmode $om_subc(sub) -b $banmask
if {$msg != ""} { puthelp "NOTICE $nick :$msg" }
return }
if {[onchan $nick $om_subc(main)] || [matchattr $hand ov|ov $om_subc(main)] || [matchattr $hand ov|ov $om_subc(sub)] || [isvoice $nick $om_subc(main)] || [isop $nick $om_subc(main)]} { return }
if {![onchan $nick $om_subc(main)]} {
putserv "NOTICE $nick :$om_subc(warnmsg)" }
utimer $om_subc(warntime) [list subchan_setJoinban $nick $uhost]
}
proc subchan_checkpart {nick uhost hand chan text} {
global om_subc
set banmask [subchan_maskban $nick $uhost]
if {![botisop $om_subc(sub)] || ![onchan $nick $om_subc(sub)] || [matchattr $hand vo|vo $om_subc(main)] || [matchattr $hand vo|vo $om_subc(sub)] || [isvoice $nick $om_subc(sub)] || [isop $nick $om_subc(sub)]} { return }
if {[onchan $nick $om_subc(sub)] } {
putserv "NOTICE $nick :$om_subc(warnmsg)" }
utimer $om_subc(warntime) [list subchan_setPartban $nick $uhost ]
}
proc subchan_setPartban {nick uhost} {
global om_subc
set banmask [subchan_maskban $nick $uhost]
if {![botisop $om_subc(sub)] || ![onchan $nick $om_subc(sub)] || [isvoice $nick $om_subc(sub)] || [isop $nick $om_subc(sub)] || [onchan $nick $om_subc(main)] || [isvoice $nick $om_subc(main)] || [isop $nick $om_subc(main)]} { return }
putserv "MODE $om_subc(sub) +b $banmask"
putserv "KICK $om_subc(sub) $nick :$om_subc(kickmsg)"
}
proc subchan_setJoinban {nick uhost} {
global om_subc
set banmask [subchan_maskban $nick $uhost]
if {![botisop $om_subc(sub)] || ![onchan $nick $om_subc(sub)] || [isvoice $nick $om_subc(sub)] || [isop $nick $om_subc(sub)] || [onchan $nick $om_subc(main)] || [isvoice $nick $om_subc(main)] || [isop $nick $om_subc(main)]} { return }
putserv "MODE $om_subc(sub) +b $banmask"
putserv "KICK $om_subc(sub) $nick :$om_subc(kickmsg)"
}
putlog "\002SUBCHAN:\002 OMSubChannel.tcl 1.1 is loaded."