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

Решение вопросов при работе с TCL скриптами.

Модератор: Модераторы

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

Сообщение FallFromGrace » 27 янв 2011 00:23

Скрипт не совместим с глобальными модулями на антиспам, поэтому сначала отрубите их.

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

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!"
}
FallFromGrace
 
Сообщения: 9
Зарегистрирован: 26 янв 2011 22:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

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

Сообщение tvrsh » 27 янв 2011 00:34

Круто, вот тут тоже пара примеров есть, может найдешь что-то интересное: tcl-skripti/ogranichenie-zapusk-skripta-t25.html
Я обычно первым пользуюсь.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

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

Сообщение FallFromGrace » 27 янв 2011 00:45

решение нормальное и рабочее, но вот не люблю я кучу expr'ов. info exists быстрее произведет проверку, чем сравнивание текущего времени и прошедшего.

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


что за ужас?) без пол-литры не разберешься)
FallFromGrace
 
Сообщения: 9
Зарегистрирован: 26 янв 2011 22:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21


Вернуться в TCL скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron