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

Eggdrop - TCL Error [wrong # args: should be "proc name args body"]

我已经在 Eggdrop v1.6.21 下制作了这个 运行 的脚本,但我无法启动它。我收到的错误是:

Tcl error in file 'eggdrop.conf':

wrong # args: should be "proc name args body"

while executing

"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
  }
}

非常感谢。

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

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

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

但是,当发出 "wrong # args" 错误信号时,通常是在不应该插入的地方插入了 white-space,或者大括号不匹配。大括号匹配编辑器在后一种情况下非常有用。