2017-08-11 39 views
0

我已经在Eggdrop v1.6.21下运行这个脚本,但是我无法启动它。我收到的错误是:Eggdrop - TCL错误[错误#参数:应该是“proc name args body”]

Tcl错误文件 'eggdrop.conf':

错误#ARGS:应该是 “PROC名ARGS体”

在执行

“PROC Logit模型{缺口主机手柄通道文本} {

这可能是什么问题呢?这是我的脚本。

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”错误信号,一个人通常要么在某个地方插入空白的地方不应该,或括号不匹配。在后一种情况下,大括号匹配编辑器非常有用。

+0

完美!这解决了它。我不能相信我忽略了这一点。 – t0rxe