2010-10-13 1 views
2

У меня есть этот скрипт я работаю:Анти Flood для команды

bind pub ga !kick pub_do_kick 

proc pub_do_kick {nick uhost hand chan arg} { 

    # create a sub-proc to delay 
    proc delay {} { return } 

    # timer already running? 
    if {[utimerexists delay] == ""} { 

     # timer is not active, perform something 
     global botnick 
     set who [lindex $arg 0] 
     set why [lrange $arg 1 end] 
     if {![onchan $who $chan]} { 
      putserv "PRIVMSG $chan :$who isnt on $chan" 
      return 1 
     } 
     if {[string tolower $who] == [string tolower $botnick]} { 
      putserv "KICK $chan $nick :You fail" 
      return 1 
     } 
     if {$who == ""} { 
      putserv "PRIVMSG $chan :Usage: !k <nick to kick>" 
      return 1 
     } 
     if {$who == $nick} { 
      putserv "PRIVMSG $chan :You fail $nick?" 
      return 1 
     } 
     if {[matchattr $who +n]} { 
      putserv "KICK $chan $nick :You fail" 
      return 1 
     } 
     putserv "KICK $chan $who :$why" 
     return 1 

     # starting timer to prevent flooding next time 
     utimer 1200 delay 
    } else { 
     # timer is already active 
     putserv "KICK $chan $nick :You've already kicked someone" 
    } 
} 
putlog "Kick loaded" 

Однако, оно не начинается на utimer вообще. Пользователи могут постоянно ударять кого-то из канала. Что я сделал не так?

Я прочитал это: http://tclhelp.net/unb/39 и основал его на втором скрипте.

Благодаря

ответ

2

Если мы посмотрим на код, мы видим, что utimer 1200 delay помещается после вызова return и поэтому на самом деле код недостижим. К сожалению! Вам необходимо исправить это, перемещая таймер раньше (предположительно, прямо перед строкой над ним). Таким образом ...

# .... blah blah as above .... 
putserv "KICK $chan $who :$why" ;# Do the kick 
utimer 1200 delay     ;# Start the timer 
return 1       ;# *NOW* we're done, not before 
# .... blah blah as above .... 
+0

Все остальное о скрипте выглядит ОК, кстати. Есть некоторые незначительные проблемы стиля, но это не проблема; недостижимый код был ... –

 Смежные вопросы

  • Нет связанных вопросов^_^