This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Looking for a script or module to create custom commands

Requests for complete scripts or modifications/fixes for scripts you didn't write. Response not guaranteed, and no thread bumping!
User avatar
demond
Revered One
Posts: 3073
Joined: Sat Jun 12, 2004 9:58 am
Location: San Francisco, CA
Contact:

Post by demond »

{$act} should be [list $act] but anyway, the whole thing is better implemented with static code structure, i.e. no fancy reloading of generated code
connection, sharing, dcc problems? click <here>
before asking for scripting help, read <this>
use

Code: Select all

 tag when posting logs, code
s
spock
Master
Posts: 319
Joined: Thu Dec 12, 2002 8:40 pm

Post by spock »

i dont think you need
  • in this case, but feel free to prove me wrong (be gentle :))
photon?
User avatar
Sir_Fz
Revered One
Posts: 3794
Joined: Sun Apr 27, 2003 3:10 pm
Location: Lebanon
Contact:

Post by Sir_Fz »

{$act} will save {$act} into the file which will cause all commands to reply with the word {$act} on command (literally {$act}) while [list $act] will save {the whole action here} in the file, which will not cause security risks. Thanx for the notice there spock. More secure code:

Code: Select all

set cmdsfile "scripts/cmds.txt"

if {![file exists $cmdsfile]} {
 set fileid [open $cmdsfile w]
 close $fileid
} {
 source $cmdsfile
}

bind pub n !addcommand add:command

proc add:command {n u h c a} {
 global addedcommands
 set command [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 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]
}
s
spock
Master
Posts: 319
Joined: Thu Dec 12, 2002 8:40 pm

Post by spock »

Sir_Fz wrote:{$act} will save {$act} into the file which will cause all commands to reply with the word {$act} on command (literally {$act}) while [list $act] will save {the whole action here} in the file
$ cat bla.tcl
set act "hand %nick a beer"
set f [open "out" w]
set cmdlist {"command number 1" "command number 2"}
lappend cmdlist "set bla {$act}"
puts $f $cmdlist
close $f
$ tclsh bla.tcl
$ cat out
{command number 1} {command number 2} {set bla {hand %nick a beer}}
photon?
User avatar
demond
Revered One
Posts: 3073
Joined: Sat Jun 12, 2004 9:58 am
Location: San Francisco, CA
Contact:

Post by demond »

that's right, the quotes provide you with necessary 1 level of variable evaluation, and nested quotes (double eval) is a no-no
connection, sharing, dcc problems? click <here>
before asking for scripting help, read <this>
use

Code: Select all

 tag when posting logs, code
User avatar
Sir_Fz
Revered One
Posts: 3794
Joined: Sun Apr 27, 2003 3:10 pm
Location: Lebanon
Contact:

Post by Sir_Fz »

Ah yeah true, will be more aware next time :D
C
CuteBangla
Halfop
Posts: 58
Joined: Mon Feb 27, 2006 10:47 pm
Location: Dhaka, Bangladesh
Contact:

Re

Post by CuteBangla »

sop whats ta final result?
User avatar
Sir_Fz
Revered One
Posts: 3794
Joined: Sun Apr 27, 2003 3:10 pm
Location: Lebanon
Contact:

Post by Sir_Fz »

If you read through the post, you would've noticed that the last code I posted works as asked.
C
CuteBangla
Halfop
Posts: 58
Joined: Mon Feb 27, 2006 10:47 pm
Location: Dhaka, Bangladesh
Contact:

Re Add command module

Post by CuteBangla »

is there any way to show all the command that added in bot by this module
User avatar
Sir_Fz
Revered One
Posts: 3794
Joined: Sun Apr 27, 2003 3:10 pm
Location: Lebanon
Contact:

Post by Sir_Fz »

Try:

Code: Select all

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

proc add:command {n u h c a} {
 global addedcommands
 set command [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 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]
}
type !countcmds on chan.
d
dq
Voice
Posts: 32
Joined: Mon Apr 03, 2006 12:28 am

Post by dq »

Sir_Fz wrote:Try:

Code: Select all

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

proc add:command {n u h c a} {
 global addedcommands
 set command [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 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]
}
type !countcmds on chan.
Very nice script Sir_Fz, but is it possible to unbind them.. because removing the cmds.txt or clearing it doesn't seem to do the trick :(
User avatar
Sir_Fz
Revered One
Posts: 3794
Joined: Sun Apr 27, 2003 3:10 pm
Location: Lebanon
Contact:

Post by Sir_Fz »

Code: Select all

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
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 -exact $allcommands $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]
}
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).

Edit: Fixed missing " and bug in using [lsearch].
Last edited by Sir_Fz on Fri Dec 29, 2006 4:40 pm, edited 1 time in total.
d
dq
Voice
Posts: 32
Joined: Mon Apr 03, 2006 12:28 am

Post by dq »

Looking good Sir_Fz, you've done it again! haha

Anyway we can include flood protection so we don't get kids constantly typing .bindhere and the bot trying to respond?
p
pavel_kbc
Voice
Posts: 23
Joined: Thu Dec 28, 2006 2:17 pm

Post by pavel_kbc »

<x-r00t-x> !addcommand testing PRIVMSG x-r00t-x testing
-lord- Added add:testing command.
<x-r00t-x> testing
* lord PRIVMSG x-r00t-x testing


Please help meee :((

how do i fix it ?
C
CuteBangla
Halfop
Posts: 58
Joined: Mon Feb 27, 2006 10:47 pm
Location: Dhaka, Bangladesh
Contact:

Post by CuteBangla »

Use the Command like
<SuMiT>!addcommand !testing %nick is testing
<SuMiT>!testing
-CuteBangla- Added add:!testing command.
*CuteBangla SuMiT is testing
pavel_kbc wrote:<x-r00t-x> !addcommand testing PRIVMSG x-r00t-x testing
-lord- Added add:testing command.
<x-r00t-x> testing
* lord PRIVMSG x-r00t-x testing


Please help meee :((

how do i fix it ?
Post Reply