我的机器人上有以下自动回复
on *:TEXT:*sparky*:*: { msg # $read(scripts/name-responses.txt) }
on *:ACTION:*sparky*:*: { msg # $read(scripts/name-responses.txt) }
我想知道如何告诉编写代码,我猜是用 IF 语句,如果用户键入sparky两次以上,那么用户会在 120 秒内被忽略。这样,由于自动回复功能,我的机器人不会淹没聊天。
任何帮助,将不胜感激!
我的机器人上有以下自动回复
on *:TEXT:*sparky*:*: { msg # $read(scripts/name-responses.txt) }
on *:ACTION:*sparky*:*: { msg # $read(scripts/name-responses.txt) }
我想知道如何告诉编写代码,我猜是用 IF 语句,如果用户键入sparky两次以上,那么用户会在 120 秒内被忽略。这样,由于自动回复功能,我的机器人不会淹没聊天。
任何帮助,将不胜感激!
我建议跟踪所有使用过该命令的用户,以及他们最后一次使用该命令的时间。这可以通过将所有数据保存在 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 TEXT 和 on ACTION 事件侦听器中出现相同的代码。
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 文件中。这将阻止您检查他们最近是否触发了两次,但这是一个好方法,例如只允许他们每两分钟触发一次。