Страница 1 из 1

Удобный антиспам для команд

СообщениеДобавлено: 27 янв 2011 00:23
FallFromGrace
Скрипт не совместим с глобальными модулями на антиспам, поэтому сначала отрубите их.

Скрипт очень минималистичен и практически не влияет на производительность.

TCL: [ Скачать ] [ Скрыть ]
proc AntiSpamSet {var delay} {
   global antispam
       
   if {[info exists antispam($var)]} {
      putlog "antispam has blocked: $var, setted [expr {[clock seconds] - $antispam($var)}] seconds ago"
      return -level 2 false
   } else {
      set antispam($var) [clock seconds]
      utimer $delay [list unset antispam($var)]
   }
}


Как им пользоваться:
Если у вас есть какая-то команда, например .hello которая говорит юзеру привет, и вы хотите запретить юзеру пользоваться ей чаще, чем раз в 10 секунд:

proc hello {nick uhost hand chan text} {
  AntiSpamSet "hello" 10
  say "Hello, $nick!"
}


Что произойдет в первый раз:
- Вызовется процедура AntiSpamSet, которая установит глобальную переменную antispam(hello:$nick), и установит таймер на 10 секунд, который удалит её
- Проценура hello продолжит выполнение

Что произойдет если юзер повторит фразу:
- Процедура AntiSpamSet определит, что переменная существует, и бот не будет отвечать юзеру, потому что return происходит с параметром "-level 2".

Еще варианты применения:

TCL: [ Скачать ] [ Скрыть ]
# ставим антиспам на эту команду в 5 секунд, и раз в 30 секунд для юзера
proc hello {nick uhost hand chan text} {
  AntiSpamSet "hello:$nick" 30
  AntiSpamSet "hello" 5
  say "Hello, $nick!"
}


TCL: [ Скачать ] [ Скрыть ]
# запрещаем пользоваться командой раз в 60 сек, если текст уже был указан.
proc hello {nick uhost hand chan text} {
  AntiSpamSet "hello:$text" 60
  say "Hello, $nick!"
}

Re: Удобный антиспам для команд

СообщениеДобавлено: 27 янв 2011 00:34
tvrsh
Круто, вот тут тоже пара примеров есть, может найдешь что-то интересное: tcl-skripti/ogranichenie-zapusk-skripta-t25.html
Я обычно первым пользуюсь.

Re: Удобный антиспам для команд

СообщениеДобавлено: 27 янв 2011 00:45
FallFromGrace
решение нормальное и рабочее, но вот не люблю я кучу expr'ов. info exists быстрее произведет проверку, чем сравнивание текущего времени и прошедшего.

А вот это:
[expr $cmd(delay) - [expr [clock seconds] - $cmd(lasttime,$chan)]] [lindex {. секунду секунды секунд} [numgrp [expr $cmd(delay) - [expr [clock seconds] - $cmd(lasttime,$chan)]]]]


что за ужас?) без пол-литры не разберешься)