我的机器人上有下面的自动响应器
on *:TEXT:*sparky*:*: { msg # $read(scripts/name-responses.txt) }
on *:ACTION:*sparky*:*: { msg # $read(scripts/name-responses.txt) }我想知道如何告诉编写代码,我用IF语句猜测,如果用户键入的火花超过两倍,用户就会被忽略120秒。这样,我的机器人不会因为自动响应功能而淹没聊天。
任何帮助都将不胜感激!
发布于 2013-06-27 21:18:25
我建议跟踪所有使用该命令的用户,以及他们最后一次使用该命令的时间。通过将所有数据保存在INI文件中,可以轻松地做到这一点。
可以使用writeini命令保存此信息。若要将数据写入此文件,请使用以下内容:
writeini sparky.ini usage $nick $ctime$ctime将计算自1970/01/01年以来运行的秒数。这通常是比较事件发生时间的方法。
一旦用户再次触发您的脚本,您就可以从这个INI文件中读取值,并将其与当前时间进行比较。如果时间之间的差异小于10秒(例如),它可以发送命令,然后忽略它们120秒。您将使用以下方法读取它们最后一次使用的值:
$readini(sparky.ini, n, usage, $nick)您的最终脚本看起来可能类似于下面的脚本。我已经将功能移到单独的别名(/triggerSparky <nick> <channel>)中,以避免在on文本和操作事件侦听器中使用相同的代码。
on *:TEXT:*sparky*:#: {
triggerSparky
}
on *:ACTION:*sparky*:#: {
triggerSparky
}
alias triggerSparky {
; Send the message
msg $chan $read(scripts/name-responses.txt, n)
if ($calc($ctime - $readini(sparky.ini, n, usage, $nick)) < 10) {
; This user has recently triggered this script (10 seconds ago), ignore him for 120 seconds
ignore -u120 $nick
remini sparky.ini usage $nick
}
else {
writeini sparky.ini usage %nick $ctime
}
}当然,实现类似结果的一种稍微简单的方法是,只需在预定义的时间内忽略它们,而不将其数据保存在INI文件中。这将阻止您检查它们最近是否触发了两次,但这将是一个很好的方法,只允许他们每两分钟触发一次。
https://stackoverflow.com/questions/17352458
复制相似问题