Я бы порекомендовал отслеживать всех пользователей, которые использовали эту команду, и когда они в последний раз использовали ее. Это можно легко сделать, сохранив все данные в INI-файле.
Вы можете сохранить эту информацию, используя команду writeini
. Для того, чтобы записать данные в этот файл, использовать что-то вдоль линий следующее:
writeini sparky.ini usage $nick $ctime
$ctime
будет оценивать на количество секунд, прошедших с момента 1970/01/01. Это, как правило, способ сравнить время событий.
Как только пользователь снова запускает ваш скрипт, вы можете прочитать значение из этого INI-файла и сравнить его с текущим временем. Если разница между временем составляет менее 10 секунд (например), он может отправить команду, а затем проигнорировать их в течение 120 секунд. Вы читали значение их последнего использования с помощью:
$readini(sparky.ini, n, usage, $nick)
Ваш окончательный сценарий может выглядеть как-то вдоль линий следующего сценария. Я переместил функциональность на отдельный псевдоним (/triggerSparky <nick> <channel>
), чтобы избежать идентичного кода в TEXT и прослушивателях событий 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. Это остановило бы вас от проверки, были ли они вызваны дважды в последнее время, но это был бы хороший способ разрешить им запускать его один раз в две минуты, например.
-1, есть несколько вопросов, но самым важным является отсутствие опции «n» для $ readini() !!! Это непростительно. Кроме того, неплохо использовать $$ (т. Е. Требуемые значения) в псевдонимах, вызываемых из разных мест, поскольку они делают невероятную сложность отладки, неожиданно останавливая механизм сценариев. В-третьих, идентификаторы, такие как $ chan и $ nick, автоматически наследуются с помощью псевдонимов, вызываемых непосредственно из событий, имеющих эти идентификаторы. Передача их в качестве аргументов и сохранение их в переменных делает код более сложным без уважительной причины. Особенно в этом случае. – Wiz
Я забыл упомянуть отсутствующую опцию 'n' от $ read(). – Wiz
думаю, я буду искать альтернативу –