chiark / gitweb /
Ignore - don't check in - passwords.
[ircbot] / parsecmd.tcl
CommitLineData
281f2c0e
IJ
1proc ta_anymore {} {
2 upvar 1 text text
3 return [expr {!![string length $text]}]
4}
5
6proc ta_nomore {} {
7 upvar 1 text text
8 if {[string length $text]} { error "too many parameters" }
9}
10
11proc ta_word {} {
12 upvar 1 text text
13 if {![regexp {^([^ ]+) *(.*)} $text dummy firstword text]} {
14 error "too few parameters"
15 }
16 return $firstword
17}
18
19proc ta_nick {} {
20 upvar 1 text text
21 set v [ta_word]
22 check_nick $v
23 return $v
24}
25
26proc usererror {emsg} { error $emsg {} {BLIGHT USER} }
27
28proc go_usercommand {p c n dest text} {
29 regsub {^! *} $text {} text
30 set ucmd [ta_word]
31 set procname ucmd/[string tolower $ucmd]
32 if {[catch { info body $procname }]} {
33 usererror "Unknown command; try help for help."
34 }
35 $procname $p $dest
36}
37
38proc execute_usercommand {p c n output dest text} {
39 global errorCode
40 if {[catch {
41 go_usercommand $p $c $n $dest $text
42 } rv]} {
43 if {"$errorCode" != "BLIGHT USER"} { set rv "error: $rv" }
44 sendprivmsg $n $rv
45 } else {
46 manyset $rv priv_msgs pub_msgs priv_acts pub_acts
47 foreach {td val} [list $n $priv_acts $output $pub_acts] {
48 foreach l [split $val "\n"] {
49 sendaction_priority 0 $td $l
50 }
51 }
52 foreach {td val} [list $n $priv_msgs $output $pub_msgs] {
53 foreach l [split $val "\n"] {
54 sendprivmsg $td $l
55 }
56 }
57 }
58}
59
60proc def_ucmd {cmdname body} {
61 proc ucmd/$cmdname {p dest} " upvar 1 text text\n$body"
62}
63
64proc ucmdr {priv pub args} {
65 return -code return [concat [list $priv $pub] $args]
66}
67
68proc new_event {} {
69 global errorInfo errorCode
70 set ei $errorInfo
71 set ec $errorCode
72 catch { unset calling_nick }
73 set errorInfo $ei
74 set errorCode $ec
75}