В меню настроек скрипта добавляем в этой переменной время в секундах через, которое возможен повторный запуск.
Далее в начале процедуры создаем область переменных cmd
Теперь а начале процедуры, например после проверки наличия флагов на канале проверяем сколько времени прошло с предыдущего запуска, и если прошло меньше, чем $cmd(delay) то сообщаем юзеру сколько ему еще ждать:
if {[info exists cmd(lasttime,$chan)] && [expr $cmd(lasttime,$chan) + $cmd(delay)] > [clock seconds]} {
putserv "NOTICE $nick :Запрос не чаще одного раза в $cmd(delay) [lindex {. секунду секунды секунд} [numgrp $cmd(delay)]]."
putserv "NOTICE $nick :Подождите [expr $cmd(delay) - [expr [clock seconds] - $cmd(lasttime,$chan)]] [lindex {. секунду секунды секунд} [numgrp [expr $cmd(delay) - [expr [clock seconds] - $cmd(lasttime,$chan)]]]] до следующего запроса."
return 0
}
putserv "NOTICE $nick :Запрос не чаще одного раза в $cmd(delay) [lindex {. секунду секунды секунд} [numgrp $cmd(delay)]]."
putserv "NOTICE $nick :Подождите [expr $cmd(delay) - [expr [clock seconds] - $cmd(lasttime,$chan)]] [lindex {. секунду секунды секунд} [numgrp [expr $cmd(delay) - [expr [clock seconds] - $cmd(lasttime,$chan)]]]] до следующего запроса."
return 0
}
Если все в порядке, и время предыдущего запуска было позже, чем $cmd(delay), то, после выполнения процедуры сохраняем время когда она выполнилась, чтобы проводить проверку при следующей команде:
А эта процедура вернет правильные окончания для слов в сообщении о невозможности выполнить скрипт.
proc numgrp {number} {
switch -glob -- "$number" {
*11 {return 3}
*12 {return 3}
*13 {return 3}
*14 {return 3}
*1 {return 1}
*2 {return 2}
*3 {return 2}
*4 {return 2}
default {return 3}
}
}
switch -glob -- "$number" {
*11 {return 3}
*12 {return 3}
*13 {return 3}
*14 {return 3}
*1 {return 1}
*2 {return 2}
*3 {return 2}
*4 {return 2}
default {return 3}
}
}
Все очень несложно, достаточно внимательно смотреть в чужие скрипты.
Если у кого-то есть другая реализация идеи то не стесняйтесь и поделитесь.