我會建議跟蹤所有使用過該命令的用戶,以及他們最後一次使用它的時間。這可以通過將所有數據保存在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和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
我忘記提及$ read()中缺少的'n'選項。 – Wiz
我想找一個替代品然後 –