####### # # addcommand.tcl # version n/a # author egghelp.org community # support at http://forum.egghelp.org/viewtopic.php?t=11130&highlight=custom # designed by username # ####### # # allows to create commands like "!beer nick" with a response # "* bot brings nick a nice cold beer" # ####### # # Example: # !addcommand !beer brings %nick a nice cold beer # !beer MrX # * bot brings MrX a nice cold beer # ####### # # New in this release: # !countcmds - let you to wiew the list of all cmds # !delcommand - let you delete commands from list # ->This will unbind the command if it exists (will make it unfunctional) # but will not remove it from the .txt (you'll have to remove it manually)<- # ### ####################################################################################### #path to file with added commands set cmdsfile "scripts/cmds.txt" if {![file exists $cmdsfile]} { set fileid [open $cmdsfile w] close $fileid } { source $cmdsfile } ####################################################################################### set allcommands [list] foreach donecmd [split [read [set fileid [open $cmdsfile]]][close $fileid] \n][unset fileid] { if {[string match -nocase "bind pub - *" $donecmd]} { lappend allcommands [lindex [split $donecmd] 3] } } ######################################################################################## bind pub n !addcommand add:command bind pub n !countcmds count:command #This will unbind the command if it exists (will make it unfunctional) #but will not remove it from the .txt (you'll have to remove it manually). bind pub n !delcommand del:command ######################################################################################## proc add:command {n u h c a} { global addedcommands set command [string tolower [lindex [split $a] 0]] set action [join [lrange [split $a] 1 end]] if {[info command added:$command] == ""} { set addedcommands($command) $action proc added:$command {n u h c a} { global addedcommands puthelp "privmsg $c :\001ACTION [string map [list %nick [lindex [split $a] 0]] $addedcommands($::lastbind)]\001" } ######################################################################################### bind pub - $command added:$command save:command $command $action puthelp "notice $n :Added add:$command command." } { puthelp "notice $n :Command added:$command already exists." } } ######################################################################################### proc count:command {n u h c a} { global allcommands if {[llength $allcommands]} { puthelp "privmsg $c :Available commands: [join $allcommands]" } { puthelp "privmsg $c :No commands available." } } ########################################################################################## proc del:command {n u h c a} { global allcommands set cmd [string tolower [lindex [split $a] 0]] if {![catch {unbind pub - $cmd added:$cmd}]} { if {[set i [lsearch $allcommands -exact $cmd]] != -1} { set allcommands [lreplace $allcommands $i $i] } puthelp "notice $n :Successfully remove \002$cmd\002 PUB command." } { puthelp "notice $n :Command \002$cmd\002 does not exist. } } ######################################################################################## proc save:command {c act} { global cmdsfile set c [string map {\[ \\\[ \] \\\] \\ \\\\} $c] set cmdlist [split [read [set f [open $cmdsfile]]] \n][close $f] lappend cmdlist "bind pub - $c added:$c" lappend cmdlist "" lappend cmdlist "set addedcommands($c) [list $act]" lappend cmdlist "" set f [open $cmdsfile w] foreach cmd $cmdlist { puts $f $cmd } puts $f [printproc added:$c] close $f } ######################################################################################### # user's proc from the Tcl faq forum proc printproc proc { set args {} foreach arg [info args $proc] { if {[info default $proc $arg val]} { lappend args [list $arg $val] } { lappend args [list $arg] } } list proc $proc $args [info body $proc] } ######################################################################################## putlog "\002\[custom commands script\] loaded\002" ########################################################################################