如何为脚本添加用户定义的计时器?



我想向我的bot添加一个命令,该命令将接受用户定义的触发器时间量。默认的触发时间是60秒。但我希望用户能够通过命令手动设置。

的例子:

[nick] @cmd 5s

[bot]命令在5秒内启动

[nick] @cmd 2m

[bot]命令在2分钟内启动

proc weed:pack {nick uhost hand chan text} {
if {[utimerexists delay] == ""} {
    putserv "PRIVMSG $chan 0303Pack your 0309bowls0303! Chan-wide 0304Toke0311-0304out0303 in0308 1 0303Minute!03"
    global wchan
    set wchan $chan
    utimer 60 weed:pack:go
    utimer 60 delay
    }
}

proc weed:pack:go {} {
global wchan
putserv "PRIVMSG $wchan :0303::030450303:";
putserv "PRIVMSG $wchan :0303::030440303:";
putserv "PRIVMSG $wchan :0303::030430303:";
putserv "PRIVMSG $wchan :0303::030420303:";
putserv "PRIVMSG $wchan :0303::030410303:";
putserv "PRIVMSG $wchan :0303::031102SYNCRONIZED!02 0304FIRE THEM BOWLS UP!!!"; return
}

嗯,主要是关于理解utimer。该命令有两个参数,一个是等待的秒数,另一个是计时器触发时执行的命令(包括参数,如果相关)。

您所需要做的就是找出如何解析用户提供的时间。我们可以用scan

scan $text "%d%1s" count type

最好检查一下结果,看看你是否成功了;如果成功,将返回一个2(对于两个字段)。现在您已经将内容分开了,您必须将其转换为秒数:

if {[scan $text "%d%1s" count type] != 2} {
    # Do an error message; don't just silently fail! Don't know eggdrop enough to do that properly
    return
}
switch -- $type {
    "s" { set delay $count }
    "m" { set delay [expr {$count * 60}] }
    "h" { set delay [expr {$count * 60 * 60}] }
    default {
        # Again, you ought to send a complaining message to the user here
        return
    }
}
utimer $delay weed:pack:go

把所有的东西都放在你的proc里面,你需要的任何其他的比特,你应该很好去。如果你有几个地方需要那个解析,你甚至可以把那个代码转换成它自己的过程;这就是我真正想要的,因为"解析一个持续时间描述"是这类事情的一个很好的候选。

相关内容

  • 没有找到相关文章

最新更新