##################################### # 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 " } 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 " } 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 " } 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 " 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 " 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] :: [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] :: [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