Анти Потоп для команды - PullRequest
       9

Анти Потоп для команды

2 голосов
/ 13 октября 2010

У меня есть скрипт, над которым я работаю:

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"

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

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

Спасибо

1 Ответ

2 голосов
/ 13 октября 2010

Если мы посмотрим на ваш код, мы увидим, что 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 ....
...