Eggdrop - TCL错误[错误#args:应该是“proc name args body”]

时间:2017-08-11 08:41:32

标签: tcl eggdrop

我已经制作了这个在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
  }
}

非常感谢。

1 个答案:

答案 0 :(得分:4)

问题出在if条件:}之后还有{database_name}。它导致过程的主体过早关闭,if命令的主体成为proc的一个意外的额外参数(并且最后一个右大括号变为无效命令)。

这可称为解析时错误。如果错误使其一直执行(运行时错误),Tcl通常对情况了解得足以产生更好的错误消息。

此时,所有Tcl解释器都知道它正在尝试执行带有三个参数的命令,并且它已被赋予四个。因此,错误信息非常模糊。

然而,当一个"错误的#args"错误发出信号,人们通常会在不应该的地方插入空白区域,或者大括号不匹配。在后一种情况下,大括号匹配编辑器非常有用。