首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Eggdrop正常运行脚本

Eggdrop正常运行脚本
EN

Stack Overflow用户
提问于 2012-04-20 19:54:02
回答 1查看 1.6K关注 0票数 1

我在网上找到了这个剧本。它有点老了,开发人员页面早就消失了。代码有效,但我正试着把它清理一下。例如:如果weeks = 0,则不要显示它。我从控制台收到了关于额外令牌的错误。我试着用谷歌搜索这个错误,但是没有任何可靠的结果。寻找一些洞察力。

评论部分是我“清理它”的尝试。这是我收到的错误。

Tcl错误正常运行时间:表达式"$::time(week) =0“中的语法错误:表达式末尾的额外标记

有评论的部分,它工作得很好。我只是想清理一下,这样它就不会回复“我已经上网0周了,0天,0小时,1分钟”。

代码语言:javascript
运行
复制
bind pub "-|-" !uptime uptime
proc uptime { nick host handle channel text } {

putquick "PRIVMSG $channel :I have been online for [eggtime]."

}

proc eggtime {} {
  set ::time(uptime) [expr [clock seconds]-$::uptime]
  set ::time(week) [expr $::time(uptime)/604800]
  set ::time(uptime) [expr $::time(uptime)-$::time(week)*604800]
  set ::time(days) [expr $::time(uptime)/86400]
  set ::time(uptime) [expr $::time(uptime)-$::time(days)*86400]
  set ::time(hour) [expr $::time(uptime)/3600]
  set ::time(uptime) [expr $::time(uptime)-$::time(hour)*3600]
  set ::time(mins) [expr $::time(uptime)/60]
  set ::time(uptime) [expr $::time(uptime)-$::time(mins)*60]
  set ::time(secs) $::time(uptime)


#if {$::time(week) = 0} {
#  set ::time(return) "$::time(days) day\(s\), $::time(hour) hour\(s\), $::time(mins) minute\(s\) and $::time(secs) second\(s\)"
#} else if {$::time(days) = 0} {
#  set ::time(return) "$::time(hour) hour\(s\), $::time(mins) minute\(s\) and $::time(secs) second\(s\)"
#} { 
#  set ::time(return) "$::time(week) week\(s\), $::time(days) day\(s\), $::time(hour) hour\(s\), $::time(mins) minute\(s\) and $::time(secs) second\(s\)"
#}

  set ::time(return) "$::time(week) week\(s\), $::time(days) day\(s\), $::time(hour) hour\(s\), $::time(mins) minute\(s\) and $::time(secs) second\(s\)"

  return $::time(return)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-20 20:05:11

相等运算符是==。您在注释块的最后一节中缺少了一个else。您还应该使用elseif而不是else if。这不是C。

但是,这里是我前面写的一个,它需要经过一段时间,并返回一个英文字符串。这大概是你的目标。

代码语言:javascript
运行
复制
# paste::delta --
#
#       Returns the time difference between the given and current time
#       as an english string.
#
proc ::paste::delta {time} {
    set r $time
    catch {
        set delta [expr {[clock seconds] - $time}]
        if {$delta < 60} {
            set r "$delta secs ago"
        } elseif {$delta < 3600} {
            set r "[expr {$delta / 60}] mins ago"
        } elseif {$delta < 86400} {
            set r "[expr {$delta / 3600}] hours ago"
        } else {
            set r "[expr {$delta / 86400}] days ago"
        }
    }
    return $r
}

所以你会得到类似于粘贴的东西::delta 7260写"2小时前“,310条写"5分钟前”。

还有一件事--使用expr语句,总是用大括号来支撑表达式的主体。否则,解析器必须再次解析主体,并且可能会有很大的性能成本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10252691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档