rendered paste body#####################################
# Rehash proc
#####################################
proc rehash_msg {nick host hand arg} {
if {[llength $arg] != 0} {
putserv "NOTICE $nick :Invalid arguments. /msg $botnick help rehash"
return
}
rehash
putserv "NOTICE $nick :Hasing service config files, script arrays & librarys."
}
#####################################
# Oper Help proc
#####################################
proc oper_help_msg {nick host hand arg} {
global botnick
puts "$nick $host $hand arg: $arg"
if {[string equal {} [lindex $arg 0]]} {
putserv "NOTICE $nick :** - :: IRC operator command list :: - **"
putserv "NOTICE $nick : + KILL Kill handle or clear channel"
putserv "NOTICE $nick : + SLAY Slay channel"
putserv "NOTICE $nick : + LIST List handle"
if {[matchattr $nick a]} {
putserv "NOTICE $nick : + REHASH Rehash services"
}
putserv "NOTICE $nick : + REOP Reop user"
putserv "NOTICE $nick : + UKILL Unkill handle or channel"
} elseif {[string equal -nocase "kill" [lindex $arg 0]]} {
putserv "NOTICE $nick :** - :: Kills a user or clears a channel by mass kick :: - **"
putserv "NOTICE $nick : + KILL - Syntax: /msg $botnick kill <channel|nick> <reason>"
} elseif {[string equal -nocase "rehash" [lindex $arg 0]]} {
if {[matchattr $nick a]} {
putserv "NOTICE $nick :** - :: Hashes config files scripts and libs. :: - **"
putserv "NOTICE $nick : + REHASH - Syntax: /msg $botnick rehash"
} else {
putserv "NOTICE $nick :You don't have access to this option."
}
} elseif {[string equal -nocase "reop" [lindex $arg 0]]} {
putserv "NOTICE $nick :** - :: Ops a user in a channel. :: - **"
putserv "NOTICE $nick : + REOP - Syntax: /msg $botnick reop <channel> <nick>"
} elseif {[string equal -nocase "ukill" [lindex $arg 0]]} {
putserv "NOTICE $nick :** - :: Removes a slayed or killed channel :: - **"
putserv "NOTICE $nick : + UKILL - Syntax: /msg $botnick ukill <channel>"
} elseif {[string equal -nocase "list" [lindex $arg 0]]} {
if {[isloaded module_ctcp]} {
putserv "NOTICE $nick :** - :: List bans :: - **."
putserv "NOTICE $nick : + LIST - Syntax: /msg $botnick list <type>"
putserv "NOTICE $nick : + |- channels - Shows banned channels"
putserv "NOTICE $nick : + `- version - Shows banned versions"
} else {
putserv "NOTICE $nick :** List bans."
putserv "NOTICE $nick : + LIST - Syntax: /msg $botnick list <type>"
putserv "NOTICE $nick : + `- channels - Shows banned channels"
}
}
}
#####################################
# Kill proc
#####################################
proc kill_handle_msg {nick host hand arg} {
global botnick
if {[llength $arg] >= 2} {
if {[ischan [lindex $arg 0]]} {
if {[killchan [lindex $arg 0] [join [lrange $arg 1 end]]]} {
putserv "NOTICE $nick :Killing channel [lindex $arg 0]."
} else {
putserv "NOTICE $nick :Was unable to kill channel [lindex $arg 0]."
}
} else {
putserv "KILL [lindex $arg 0] :<reason>: [join [lrange $arg 1 end]]"
}
} else {
putserv "NOTICE $nick :Invalid arguments. /msg $botnick help kill"
}
}
proc slay_handle_msg {nick host hand arg} {
global botnick
if {[llength $arg] >= 2} {
if {[ischan [lindex $arg 0]]} {
if {[slaychan [lindex $arg 0] [join [lrange $arg 1 end]]]} {
putserv "NOTICE $nick :Killing channel [lindex $arg 0]."
} else {
putserv "NOTICE $nick :Was unable to kill channel [lindex $arg 0]."
}
} else {
putserv "KILL [lindex $arg 0] :<reason>: [join [lrange $arg 1 end]]"
}
} else {
putserv "NOTICE $nick :Invalid arguments. /msg $botnick help kill"
}
}
#####################################
# Ops a user in a channel
#####################################
proc reop_user_msg {nick host hand arg} {
global botnick
if {[llength $arg] != 2} {
putserv "NOTICE $nick :Invalid arguments. /msg $botnick help reop"
} else {
if {[ischan [lindex $arg 0]]} {
putlink "MODE [lindex $arg 0] +o [lindex $arg 1]"
} else {
putserv "NOTICE $nick :Invalid channel. /msg $botnick help reop"
}
}
}
#####################################
# Removes a channel kill proc
#####################################
proc ukill_handle_msg {nick host hand arg} {
global botnick
if {[llength $arg] != 1} {
putserv "NOTICE $nick :Invalid arguments. /msg $botnick help ukill"
} else {
if {[ukillchan [lindex $arg 0]]} {
putserv "NOTICE $nick :Removed channel."
} else {
putserv "NOTICE $nick :Failed to remove channel."
}
}
}
#####################################
# Kills a channel proc.
#####################################
proc killchan {chan {arg {}}} {
global modesArray srv sql
if {[string equal {} $arg]} {
set arg "Channel is being killed for an unknown reason"
}
if {[ischan $chan]} {
mysqluse $sql(hand) $sql(db)
if {[catch {mysqlexec $sql(hand) "INSERT INTO oper_module_killchan (chan_id,chan_name,chan_reason) VALUES ('NULL','$chan','$arg');"} err]} {
return 0
}
putlink "SJOIN [clock seconds] $chan + :$srv(nick)"
putlink "MODE $chan +o $srv(nick)"
if {[info exists modesArray($chan)]} {
putlink "MODE $chan -$modesArray($chan)"
}
putlink "MODE $chan +ntispm"
putserv "TOPIC $chan :\002\[CHANNEL CLOSED\]:\002 $arg"
foreach x [array names modesArray] {
if {[regexp {^(.+?)_(#.*)$} $x s n c]} {
if {[string equal -nocase $c $chan]} {
if {[string match -nocase *\x40* $n]} {
if {[matchattr $n -|e $c]} {
putserv "MODE $chan -e $n"
}
if {[matchattr $n -|I $c]} {
putserv "MODE $chan -I $n"
}
} else {
if {![matchattr $n o]} {
if {[matchattr $n -|o $c]} {
putserv "MODE $c -o $n"
}
putserv "KICK $c $n :$arg"
}
}
}
}
}
return 1
}
return 0
}
#################################
# Slay Channel
#################################
proc slaychan {chan {arg {}}} {
global modesArray srv sql
if {[string equal {} $arg]} {
set arg "Channel is being killed for an unknown reason"
}
if {[ischan $chan]} {
mysqluse $sql(hand) $sql(db)
if {[catch {mysqlexec $sql(hand) "INSERT INTO oper_module_killchan (chan_id,chan_name,chan_reason) VALUES ('NULL','$chan','$arg');"} err]} {
return 0
}
putlink "SJOIN [clock seconds] $chan + :$srv(nick)"
putlink "MODE $chan +o $srv(nick)"
if {[info exists modesArray($chan)]} {
putlink "MODE $chan -$modesArray($chan)"
}
putlink "MODE $chan +ntispm"
putserv "TOPIC $chan :\002\[CHANNEL CLOSED\]:\002 $arg"
foreach x [array names modesArray] {
if {[regexp {^(.+?)_(#.*)$} $x s n c]} {
if {[string equal -nocase $c $chan]} {
if {[string match -nocase *\x40* $n]} {
if {[matchattr $n -|e $c]} {
putserv "MODE $chan -e $n"
}
if {[matchattr $n -|I $c]} {
putserv "MODE $chan -I $n"
}
} else {
if {![matchattr $n o]} {
if {[matchattr $n -|o $c]} {
putserv "MODE $c -o $n"
}
putserv "KILL $n :$arg"
}
}
}
}
}
return 1
}
return 0
}
#####################################
# Removes a channel kill
#####################################
proc ukillchan {chan} {
global srv sql
mysqluse $sql(hand) $sql(db)
if {![catch {mysqlexec $sql(hand) "DELETE FROM oper_module_killchan WHERE chan_name = '$chan';"} err]} {
putlink "MODE $chan -ntispm"
putserv "PART $chan"
return 1
}
return 0
}
#####################################
# On burst channelkill, why on burst
# only then all server clients and
# channels are set
#####################################
proc load_array_channels {ctime} {
global srv sql modesArray
puts "iam in"
mysqluse $sql(hand) $sql(db)
foreach {a b} [mysqlsel $sql(hand) "SELECT chan_name,chan_reason FROM oper_module_killchan;" -flatlist] {
putlink "SJOIN [clock seconds] $a + :$srv(nick)"
putlink "MODE $a +o $srv(nick)"
putlink "MODE $a +ntispm"
putserv "TOPIC $a :\002\[CHANNEL CLOSED\]\002 $b"
}
foreach a {[mysqlsel $sql(hand) "SELECT chan_name FROM oper_module_regchan;" -flatlist]} {
putlink "SJOIN [clock seconds] $a + :$srv(nick)"
putlink "MODE $a +o $srv(nick)"
}
if {$srv(debug)} {
puts "LOAD --> Loading banned channels."
puts "LOAD --> Loading registered channels."
}
}
#####################################
# List proc
#####################################
proc oper_list_msg {nick host hand arg} {
global botnick sql
if {[llength $arg] != 1} {
putserv "NOTICE $nick :Invalid arguments. /msg $botnick help list"
} else {
mysqluse $sql(hand) $sql(db)
if {[string equal -nocase channels [lindex $arg 0]]} {
putserv "NOTICE $nick :** Listing banned channels."
foreach {a b} [mysqlsel $sql(hand) "SELECT chan_name,chan_reason FROM oper_module_killchan;" -flatlist] {
putserv "NOTICE $nick : + Channel: $a Reason: $b"
}
}
if {[string equal -nocase version [lindex $arg 0]] && [isloaded module_ctcp]} {
putserv "NOTICE $nick :** Banned ctcp replys."
foreach {a b} [mysqlsel $sql(hand) "SELECT ctcp_reply,ctcp_reason FROM ctcp_module;" -flatlist] {
putserv "NOTICE $nick : + Reply: $a Reason: $b"
}
}
}
}
#####################################
# Kick join made when netsplits
# occour.
#####################################
proc kick_chan_join {nick uhost hand chan} {
if {![matchattr $nick o] && ![matchattr $nick a]} {
if {[ischanban $chan]} {
putserv "KICK $chan $nick :Read topic."
}
}
}
#####################################
# Checks if a chan is banned.
#####################################
proc ischanban {chan} {
global sql
mysqluse $sql(hand) $sql(db)
if {[mysqlsel $sql(hand) "SELECT COUNT(*) FROM oper_module_killchan WHERE chan_name = '$chan';" -flatlist]} {
return 1
}
return 0
}
######################################
# Owner...
######################################
#proc owner_msg {chan {arg {}}} {
# global botnick sql
# if {[llength $arg] != 1} {
# putserv "NOTICE $nick :Invalid arguments. /msg $botnick help owner"
# } else {
# foreach {a b} [mysqlsel $sql(hand) "SELECT chan_name,chan_owner FROM oper_module_regchan;" -flatlist] {
# putserv "NOTICE $nick :Channel $a Information"
# putserv "NOTICE $nick :Owner: $b"
# }
# }
#}
######################################
# REGISTER
######################################
proc regchan {chan {arg {}}} {
global modesArray srv sql
if {[string equal {} $arg]} {
set arg "Channel is being registered"
}
if {[ischan $chan]} {
mysqluse $sql(hand) $sql(db)
if {[catch {mysqlexec $sql(hand) "INSERT INTO oper_module_regchan (chan_id,chan_name,chan_owner) VALUES ('NULL','$chan','$arg');"} err]} {
return 0
}
putlink "SJOIN [clock seconds] $chan + :$srv(nick)"
putlink "MODE $chan +o $srv(nick)"
if {[info exists modesArray($chan)]} {
putlink "MODE $chan -$modesArray($chan)"
}
putlink "MODE $chan +nt"
putserv "TOPIC $chan :\002\Channel successfully registered\002"
}
return 1
}
proc regchan_handle_msg {nick host hand arg} {
global botnick
if {[llength $arg] >= 2} {
if {[ischan [lindex $arg 0]]} {
if {[regchan [lindex $arg 0] [join [lrange $arg 1 end]]]} {
putserv "NOTICE $nick :Registering channel [lindex $arg 0]."
} else {
putserv "NOTICE $nick :Was unable to register channel [lindex $arg 0]."
}
}
} else {
putserv "NOTICE $nick :Invalid arguments. /msg $botnick help register"
}
}
bind join - * kick_chan_join
bind msg o ukill ukill_handle_msg
bind msg o kill kill_handle_msg
bind msg o slay slay_handle_msg
bind msg o regchan regchan_handle_msg
#bind msg o owner owner_msg
bind msg a rehash rehash_msg
bind msg o reop reop_user_msg
bind msg o help oper_help_msg
bind msg o list oper_list_msg
bind evnt - eob load_array_channels
set srv(module_opers) 1