我已经制作了这个在Eggdrop v1.6.21下运行的脚本,但我无法启动它。我收到的错误是:
文件'eggdrop.conf'中的Tcl错误:
错误#args:应该是“proc name args body”
执行时
“proc logit {nick host handle channel text} {
可能是什么问题?这是我的剧本。
package require mysqltcl
set port {3306}
set host {127.0.0.1}
set user {database_user}
set password {database_password}
set db {database_name}
bind pubm - "*" logit
proc logit {nick uhost handle channel text} {
global port
global host
global user
global password
global db
if {[string match {database_name}} $channel] == 0} {
set mysql_handler [mysqlconnect -host $host -port $port -user $user -password $password -db $db]
set sql "insert into irc_feed (nickname, host, message) values ('[mysqlescape $nick]', '[mysqlescape $uhost]', '[mysqlescape $text]')"
mysqlexec $mysql_handler $sql
mysqlclose $mysql_handler
}
}
非常感谢。
答案 0 :(得分:4)
问题出在if
条件:}
之后还有{database_name}
。它导致过程的主体过早关闭,if
命令的主体成为proc
的一个意外的额外参数(并且最后一个右大括号变为无效命令)。
这可称为解析时错误。如果错误使其一直执行(运行时错误),Tcl通常对情况了解得足以产生更好的错误消息。
此时,所有Tcl解释器都知道它正在尝试执行带有三个参数的命令,并且它已被赋予四个。因此,错误信息非常模糊。
然而,当一个"错误的#args"错误发出信号,人们通常会在不应该的地方插入空白区域,或者大括号不匹配。在后一种情况下,大括号匹配编辑器非常有用。