Бан за инвайты.

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

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

Бан за инвайты.

Сообщение tvrsh » 22 фев 2009 20:24

Скрипт банит за инвайты бота, но не банит при инвайте от сервисов. Кровожадно и кажется правильно вырезано из tcs.tcl
Очень нужный скрипт для борьбы с дураками.
Об ошибках сообщайте тут, возможно не совсем корректно вырезал, сам не проверял скрипт.

Код: Выделить всё
##   Total Control Script by Handbrake
##   Основан на проекте <KALICH> (продолжение основной его идеи). Russian edition by Britney (c)2003.     
## Фишка для бана инвайтеров. Время бана - примерно два месяца.
## Если инвайт пришел от любого юзера у которого нет минимального канального +m (на любом канале) - 
## поставит глобальный бан по маске *!*ident*@full.host.ru Закомментировать для отключения.

## Ники и хосты сервисов (IrcNet.ru)
set ServNick1 "ChanServ"
set ServNick2 "NickServ"
set ServHost1 "Services@ircnet.ru"
set ServHost2 "Services@ircnet.ru"

bind raw - "INVITE" inviterban

# ban inviters
proc inviterban {from keyword args} { global botnick;
  set hand [finduser $from]
  set args [join $args]
  set destchan [string range [lindex [split $args] 1] 1 end]
  set nick [lindex [split [join $from] "!"] 0]
  set uhost [lindex [split [join $from] "!"] 1]
  putcmdlog "Inviter detected !!$hand!! USER: $from  DEST: $destchan"
  if { [ServiceCheck $nick $uhost] } { putcmdlog "invite by services to $destchan"; return 0 }
 if { $hand != "*" } {
       set invcheck [check:access $hand "|m" ""]
      if { ($invcheck != "none") || ([matchattr $hand "m"]) } { putcmdlog "Received invite by master $nick!$uhost, return."; return 0 }
   }
set banhost [simask $nick $uhost 4]
  newban $banhost $botnick "F*king inviter" 100000
  putcmdlog "Banning inviter $banhost - complete."
}

proc check:access {who flags exclude} {
   foreach c [channels] {
      if { ([matchattr $who "[join $flags]" $c]) && ($c != "[join $exclude]") } { return $c }
      }
      return "none"
}

proc ServiceCheck {nick host} {
global ServNick1 ServNick2 ServHost1 ServHost2
set nick [tolow [join $nick]]
set host [tolow [join $host]]
  if { ($nick == [tolow $ServNick1]) || ($nick == [tolow $ServNick2]) || ($host == [tolow $ServHost1]) || ($host == [tolow $ServHost2]) } { return 1 }
return 0
}

proc simask {nick host maskmode} {
   set userhost [MakeIdent $host]
   if {([string index $userhost 0] == "~") || ([string index $userhost 0] == "^")} { set userhost [string range [join $userhost] 1 end] } { set userhost [join $userhost] }
   set userhost [transhost $userhost]
    if { ($maskmode != 2) && ($maskmode != 3) && ($maskmode != 4) } { return "*!*[lindex [split $userhost "@"] 0]*@[lindex [split [maskhost $userhost] "@"] 1]" }
   if { $maskmode == 2 } { return "*!*@[lindex [split $userhost "@"] 1]"}
   if { $maskmode == 3 } { return "*$nick*!*[lindex [split $userhost "@"] 0]*@*"}
   if { $maskmode == 4 } { return "*!*[lindex [split $userhost "@"] 0]*@[lindex [split $userhost "@"] 1]" }
}

proc MakeIdent {umask} {
set che [lindex [split $umask "@"] 0]
set fh [lindex [split $umask "@"] 1]
if {[string length $che] > 9} {return "[string range $che 1 8]@$fh"}
if {[string length $che] > 8} {return "[string range $che 1 end]@$fh"}
return $umask
}

proc tolow {text} { return [string tolower [string map {А а Б б В в Г г Д д Е е Ё ё Ж ж З з И и Й й К к Л л М м Н н О о П п Р р С с Т т У у Ф ф Х х Ц ц Ч ч Ш ш Щ щ Ъ ъ Ы ы Ь ь Э э Ю ю Я я} $text]] }
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

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

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

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

cron