Anti-Adversting script v3.1.Кикает, но не банит

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

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

Anti-Adversting script v3.1.Кикает, но не банит

Сообщение kuap » 04 мар 2009 21:54

вот такая тема.Поставил скрипт Anti-Adversting script v3.1 на windrop 1.6.19. Работает.Все хорошо. Ловит негодяев, даже кик дает.Но не банит.даже маску бана не выставляет.Но в лог файле пишет, что юзер успешно забанен в такое то время с такой то причиной. Помогите, подскажите где баг?? как его лечить?? Ниже привожу код скрипта:
TCL: [ Скачать ] [ Скрыть ]
 # http://myftp.net.ru (TCL/TK для eggdrop/windrop)
#
###################################################################################


if { ![info exists egglib(ver)] } {
   putlog "***********************************************"
   putlog "             egglib_pub NOT FOUND !"
   putlog "   Download last version of egglib_pub here:"
   putlog "  http://eggdrop.org.ru/scripts/egglib_pub.zip"
   putlog "***********************************************"    
   return
}
if { ![info exists egglib(ver)] || [expr {$egglib(ver) < 1.2}] } {
        putlog "***********************************************"
        putlog "   egglib_pub NOT FOUND OR VERSION IS TOO OLD!"
        putlog "   Download last version of egglib_pub here:"
        putlog "  http://eggdrop.org.ru/scripts/egglib_pub.zip"
        putlog "***********************************************"
}

##################################UNBINDS BEGIN HERE#######$$##########################

namespace eval ar {}
foreach bind [binds "ar:*"] { catch {unbind [lindex $bind 0] [lindex $bind 1] [lindex $bind 2] [lindex $bind 4]} }
foreach cname [array names ar *] { catch {unset ar($cname) } }

##################################BINDS BEGINS HERE####################################

bind pubm - "% *"  ar:check
bind CTCP - ACTION ar:check
bind raw - "322"   ar:arsearch
bind msg m|m !log  ar:log

##################################CONFIG BEGINS HERE###################################

# Оповещать ли нотисом о предположительной рекламе? (1-Да 2-Нет)
set ar(advnot) 1

# Оповещать ли нотисом о бане за рекламу? (1-Да 2-Нет)
set ar(bannot) 1

# Хендл(ы) кому посылать отчет нотисом (он должен быть в юзерлист бота)
set ar(handlist) "tigra"

# Ник(и) кому посылать отчет нотисом
set ar(nicklist) "tigra"

# Кому слать нотисы о предположительной рекламе (1 - только никам, 2 - только хэндлам, 3 - и тем и тем)
set ar(mlist) 2

# Официальные каналы сети
set ar(off) "#abuse #help #tigra"

# Флаг исключения с которым не банит пользователя
set ar(ff) "f"

# Путь к файлу с логом сообщений о бане за рекламу
set ar(logfile) "logs/adversting.log"

# Время выставляемого бана (в минутах)
set ar(bantime) 20160

# Причина бана
set ar(breason) "Реклама каналалов запрещена!Бан на 14 дней."

# Версия скрипта
set ar(ver) "v3.1 WeNet Edition"

# Флаг включить/выключенть скрипт
setudef flag ar

#Автор скрипта
set ar(author) "Zelik <k-lined@mail.ru>"

#########################################################################################

#спецсимволы на { }

proc ar:checkspace {t} {
        regsub -all -- {\!} $t { } t; regsub -all -- {\"} $t { } t; regsub  -all -- {\_} $t { } t
        regsub -all -- {\.} $t { } t; regsub -all -- {\%}  $t { } t; regsub -all -- {\^} $t { } t
        regsub -all -- {\&} $t { } t; regsub -all -- {\*} $t { } t; regsub -all -- {\(} $t { } t
        regsub -all -- {\)} $t { } t; regsub -all -- {\}} $t { } t; regsub -all -- {\{} $t { } t
        regsub -all -- {\]} $t { } t; regsub -all -- {\[} $t { } t; regsub -all -- {\:} $t { } t
        regsub -all -- {\;} $t { } t; regsub -all -- {\'} $t { } t; regsub  -all -- {\`} $t { } t
        regsub -all -- {\~} $t { } t; regsub -all -- {\+} $t { } t; regsub -all -- {\=} $t { } t
        regsub -all -- {\-} $t { } t; regsub -all -- {\|} $t { } t; regsub -all -- {\\} $t { } t
        regsub -all -- {\?} $t { } t; regsub -all -- {\,} $t { } t; regsub -all -- {\<} $t { } t
        regsub -all -- {\>} $t { } t; regsub -all -- {\/} $t { } t; regsub -all -- {\@} $t { } t
    regsub -all -- {\$} $t { } t; regsub -all -- {\*} $t { } t
        return $t
}
#спецсимволы на {}

proc ar:checkvoid {t} {
regsub -all -- {\!} $t {} t; regsub -all -- {\"} $t {} t; regsub -all -- {\_} $t {} t
        regsub -all -- {\.} $t {} t; regsub -all -- {\%} $t {} t; regsub -all -- {\^} $t {} t
        regsub -all -- {\&} $t {} t; regsub -all -- {\*} $t {} t; regsub -all -- {\(} $t {} t
        regsub -all -- {\)} $t {} t; regsub -all -- {\}} $t {} t; regsub -all -- {\{} $t {} t
        regsub -all -- {\]} $t {} t; regsub -all -- {\[} $t {} t; regsub -all -- {\:} $t {} t
        regsub -all -- {\;} $t {} t; regsub -all -- {\'} $t {} t; regsub -all -- {\`} $t {} t
        regsub -all -- {\~} $t {} t; regsub -all -- {\+} $t {} t; regsub -all -- {\=} $t {} t
        regsub -all -- {\-} $t {} t; regsub -all -- {\|} $t {} t; regsub -all -- {\\} $t {} t
        regsub -all -- {\?} $t {} t; regsub -all -- {\,} $t {} t; regsub -all -- {\<} $t {} t
        regsub -all -- {\>} $t {} t; regsub -all -- {\/} $t {} t; regsub -all -- {\@} $t {} t
    regsub -all -- {\$} $t {} t; regsub -all -- {\*} $t {} t
        return $t
}

#цвета нам ненужны

proc ad:remcolors {t} {
        regsub -all -- {\003(\d){0,2}(,){0,1}(\d){0,2}} $t {} t
        regsub -all -- {\037} $t {} t; regsub -all -- {\002} $t {} t
        regsub -all -- {\026} $t {} t; regsub -all -- {\017} $t {} t
        return $t
}

#удаляем из текста "
разрешённые" каналы

proc ar:offcheck {t offchan} {
global ar
   set offchan [::egglib::tolower $offchan]
   set t [string tolower $t]
   regsub -all -- $offchan $t {} t
   foreach ch $ar(off) {
   regsub -all -- $ch $t {} t
   }
return $t
}

#смотрим и выделяем из текста слова с #

proc ar:chancheck {t} {
global ar
    set ar(chanstring) "
"
        foreach ch $t {
             if { $ch != "
#" } {
                 if {[string match "#*" $ch]} {
                         lappend ar(chanstring) $ch
                         }
                 }
        }
return $ar(chanstring) 
}

#процедура исполняющаа сопсно все поисковые ф-ции

proc ar:advcheck {t} {
global ar
  foreach ch $t {
                    set ar(cmd) "LIST $ch"  
            putquick "$ar(cmd)"                  
                 }
return 1;
}

#делаем маску бана

proc ar:banmask {t} {
global ar
  regsub -all -- {\~} $t {} t
  set splithost [split $t @]
  set ip [lindex $splithost 1]
  set t "*!*@$ip"
return $t
}

#процедура поиска каналов

proc ar:arsearch {from key text} {
        global ar
   
#уже забанили, больше проверять не будем
       
#       set ar(channel) ""
#       if {$ar(banned) == 1} { return }
       
       
#сопсно ищем названия каналов и добавляем их в переменную
       
        if { [regexp -nocase -- {[^\ ]+\ \#[^\ ]*\ [^\ ]+\ :\[.+\].*} $text] } {
                if { [regexp -nocase -- {[^\ ]+\ (\#[^\ ]*)\ ([^\ ]+)\ :\[(.+)\].*} $text trash chan users mode] } {
                        set chan [string trim $chan]
                        if { $chan != "" } {
                                lappend ar(channel) [list $chan]
                        }
                }
        } else {
                if { [regexp -nocase -- {[^\ ]+\ (\#[^\ ]*)\ ([^\ ]+)\ :.*} $text trash chan users] } {
                        set chan [string trim $chan]
                        if { $chan != "" } {
                                lappend ar(channel) [list $chan]
                        }
                }
        }
#ну, если мы ничего не нашли, то увы.

if { $ar(channel) == "" } { return }
   
    #если нашли, то наказываем негодяя! шаманим с маской бана
       
        set ar(bmask) [ar:banmask $ar(bhost)]
     
    #а теперь баним и кикаем
       
        newchanban $ar(bchan) $ar(bmask) "ANTIADV" $ar(breason) $ar(bantime)
    putkick $ar(bchan) $ar(bnick) $ar(breason)
    set reason "ban"
        ar:arinfo $reason
       
        #процедура записи бана в лог-файл
       
        putlog "\[ANTIREKLAMA\] BAN: $ar(bnick) $ar(bmask) at $ar(bchan) for \[$ar(enntext)\]"
        set logfile [open "$ar(logfile)" a+]
        regsub -all -- {$ar(bchan)} {$ar(btext)} {\002\0034$ar(bchan)\0035\002} ar(btext
        puts $logfile "$ar(bnick) was banned on $ar(bchan) at [ctime [unixtime]] for text: $ar(btext)"
        set ar(banned) 1
        close $logfile
        return 1;
}

#кидаем предупреждения

proc ar:arinfo {reason} {
global ar
 
  set ar(infolist) ""
 
  #смотрим кому кидать нотисы
 
  #только никам
 
  if {$ar(mlist) == 1} {
     set ar(infolist) $ar(nicklist)
  }
 
  #только хэндам
 
  if {$ar(mlist) == 2} {
     foreach hd $ar(handlist) {
         set rnick [hand2nick $hd]
                 lappend ar(infolist) [list $rnick]
     }
  }
 
  #и тем и тем
 
  if {$ar(mlist) == 3} {
     set ar(infolist) $ar(nicklist)
  foreach hd $ar(handlist) {
         set rnick [hand2nick $hd]
                 lappend ar(infolist) [list $rnick]
     }
  }
  foreach infonick $ar(infolist) {
     if {$reason == "noop"} {
         putserv "NOTICE $infonick :\0034$ar(bnick)!$ar(bhost)\0033 на канале\0035\002 $ar(bchan)\002\0033 произносит подозрительную фразу: \002\0032$ar(enntext)\0033\002, но у бота нет опа на этом канале."
        }
     if {$reason == "friend"} {
         putserv "NOTICE $infonick :\0034$ar(bnick)!$ar(bhost)\0033 на канале\0035\002 $ar(bchan)\002\0033 произносит подозрительную фразу: \002\0032$ar(enntext)\0033\002, но он является другом бота."
        }
     if {$reason == "op"} {
         putserv "NOTICE $infonick :\0034$ar(bnick)!$ar(bhost)\0033 на канале\0035\002 $ar(bchan)\002\0033 произносит подозрительную фразу: \002\0032$ar(enntext)\0033\002, но он является опом этого канала."
        }
     if {$reason == "no"} {
         putserv "NOTICE $infonick :\0034$ar(bnick)!$ar(bhost)\0033 на канале\0035\002 $ar(bchan)\002\0033 произносит подозрительную фразу: \002\0032$ar(enntext)."
        }
     if {$reason == "ban"} {
         putserv "NOTICE $infonick :\0034$ar(bnick)!$ar(bhost)\0033 был забанен на канале\0035\002 $ar(bchan)\002\0033 за подозрительную фразу: \002\0032$ar(enntext)."
        }
       
        }
}

#главная процедура проверки текста

proc ar:check {nick host hand chan text {text1 ""}} {

   global ar
     
     #а текст то есть?
         
         if {$text1 != ""} { set text $text1 }
         
     #a есть ли флаг?
         
         if {![channel get $chan ar]} return
         
         #а есть ли символ #
         
         if {![string match "*#*" $text]} { return }
         set ar(enntext) $text
         
         #удаляем цвета
         
         set text [ad:remcolors $text]
         
         #да символ есть будем работать со строкой
         
         regsub -all -- {\*} $text {} text
     regsub -all -- {#} $text { #} text
         set text [string tolower $text]
         
         #инфа о юзере вызвавшем триггер
         set ar(banned) "0"
         set ar(bchan) "$chan"
         set ar(bhost) "$host"
         set ar(bnick) "$nick"
         set ar(bhand) "$hand"
         set ar(btext) "$text"
         
         #работаем с текстом, удаляем цвета
         
         set worktext [string tolower $text]
         set worktext [ar:offcheck $text $chan]
     
         #после выбирания официальных каналов делаем проверку на целесообразность дальнейших действий
         
         if {![string match "*#*" $worktext]} { return }
         
         
         #бот оп на канале?
         
         if {![botisop $chan]} {
             if {$ar(advnot) == 1} {
                 set reason "noop"
                     ar:arinfo $reason
         return
         }
         }
         
         #а не друг ли злодей?
         
         if { [matchattr $hand $ar(ff) ]} {
             if {$ar(advnot) == 1} {
                 set reason "friend"
                     ar:arinfo $reason
         return
         }
         }
         
         #а не оп ли это сказал?
         
         if { [isop $nick $chan] } {
         if {$ar(advnot) == 1} {
                 set reason "op"
                     ar:arinfo $reason
         return
         }
         }
         
         if {$ar(advnot) == 1} {
                 set reason "no"
             ar:arinfo $reason
     }
         
         #проблелы и прочая байда
         
         set chtext $worktext
         set chtext1 [ar:checkspace $worktext]
         set chtext2 [ar:checkvoid $worktext]
     
         #выделяем названия каналов.
         
         set chtext [ar:chancheck $chtext]
         set chtext1 [ar:chancheck $chtext1]
         set chtext2 [ar:chancheck $chtext2]
       
         #И проверяем существование
         
         ar:advcheck $chtext
         ar:advcheck $chtext1
         ar:advcheck $chtext2
     
return 1;
}

#процедура просмотри лога

proc ar:log {nick host hand text} {
global ar
  set ch  [lindex $text 0]
     if { $ch == "" } { putserv "PRIVMSG $nick :\0033Формат:\0034 !лог\0037 #chan" ; return 1}
         putserv "PRIVMSG $nick :\0033Баны на канале \0035[lindex $text 0]..."
         set log(info) [::egglib::readdata $ar(logfile)]
            foreach str $log(info) {
                             if {[string match "*$ch*" $str]} {
                                 putserv "PRIVMSG $nick :\0033Ник \0037[lindex $str 0]\0033 за неосторожно сказанную фразу\0035 [lrange $str 12 end]\0033 в\0034 [lrange $str 7 10]"              
                             }
                       
             }
}


putlog "Anti-Adversting script $ar(ver) by $ar(author) loaded."

Заранее благодарен за уделённое для меня время и терпение...
Последний раз редактировалось kuap 04 мар 2009 22:01, всего редактировалось 1 раз.
kuap
 
Сообщения: 5
Зарегистрирован: 04 мар 2009 21:47
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Anti-Adversting script v3.1.Кикает, но не банит

Сообщение kuap » 04 мар 2009 21:59

Есть исчо один скрипт.Тоже ловит за рекламу.называется он ak. Тот же самый баг.Кикает, но не банит...Все другие скрипты с использованием бана работают (такие как маторез, антифлуд) выкладываю код ниже.. может подскажите...
TCL: [ Скачать ] [ Скрыть ]
 set advertisetype "2"
set advertisechans "#abuse #help #tigra #таймаут"
set advertiseactivate "4"
set advertisewords {
"#*"
"*#*"
}

set advertisepunish "3"
set advbanmask "1"
set advertisebantime "1"
set advkickswitch "1"
set advkickmsg "3Реклама каналов запрещена!Иди в пu3ду баран!2"
set advexopswitch "1"
set advexvoiceswitch "1"
set advexflagswitch "1"
set advexflags "mnohf|mnohf"
set advnickswitch "0"
set advexnicks "spamcheckerbot"
set advidentswitch "0"
set advexidents "a-user-ident"
set advhostswitch "0"
set advexhosts "an-isp-name"
set advuserhostswitch "0"
set advexuserhosts "i@love.you.com"
set advdynamicident "0"
set advertisekicks "advertisekicks.dat"


bind pubm - * pub:advertise
bind ctcp - ACTION act:advertise
bind notc - * notc:advertise
bind kick - * advertise:kick:counter

proc pub:advertise {nick uhost hand chan text} {
 global botnick advertisetype advertisechans
  if {($nick != $botnick) && ($chan != $botnick)} {; set type "TEXT"
   if {($advertisetype == 1) && ($advertisechans != "") && ([string match "#*" $advertisechans])} { pub:specific:chans $nick $uhost $hand $chan $type $text }
   if {($advertisetype == 2)} { advertise:all:chans $nick $uhost $hand $chan $type $text }
   if {(($advertisetype != 1) && ($advertisetype != 2)) || ($advertisetype == "0") || ($advertisetype == "")} { return 0 }
   }
}

proc pub:specific:chans {nick uhost hand chan type text} {
 global botnick advertiseactivate advertisechans
  if {($advertiseactivate == 1) || ($advertiseactivate == 4)} {
  if {([lsearch -exact [split [string tolower $advertisechans]] [string tolower $chan]] != -1)} { advertise:all:chans $nick $uhost $hand $chan $type $text }
  if {([lsearch -exact [split [string tolower $advertisechans]] [string tolower $chan]] == -1)} { return 0 }
  }
}


proc act:advertise {nick uhost hand chan key text} {
 global botnick advertisetype advertisechans
  if {($nick != $botnick) && ($chan != $botnick)} {; set type "ACTION"
   if {($advertisetype == 1) && ($advertisechans != "") && ([string match "#*" $advertisechans])} { act:specific:chans $nick $uhost $hand $chan $type $text }
   if {($advertisetype == 2)} { advertise:all:chans $nick $uhost $hand $chan $type $text }
   if {(($advertisetype != 1) && ($advertisetype != 2)) || ($advertisetype == "0") || ($advertisetype == "")} { return 0 }
   }
}

proc act:specific:chans {nick uhost hand chan type text} {
 global botnick advertiseactivate advertisechans
  if {($advertiseactivate == 2) || ($advertiseactivate == 4)} {
  if {([lsearch -exact [split [string tolower $advertisechans]] [string tolower $chan]] != -1)} { advertise:all:chans $nick $uhost $hand $chan $type $text }
  if {([lsearch -exact [split [string tolower $advertisechans]] [string tolower $chan]] == -1)} { return 0 }
  }
}


proc notc:advertise {nick uhost hand text {chan ""}} {
 global botnick advertisetype advertisechans
  if {($nick != $botnick) && ($chan != $botnick) && (![string equal $nick "ChanServ"])} {; set type "NOTICE"
   if {($advertisetype == 1) && ($advertisechans != "") && ([string match "#*" $advertisechans])} { notc:specific:chans $nick $uhost $hand $chan $type $text }
   if {($advertisetype == 2)} { advertise:all:chans $nick $uhost $hand $chan $type $text }
   if {(($advertisetype != 1) && ($advertisetype != 2)) || ($advertisetype == "0") || ($advertisetype == "")} { return 0 }
   }
}

proc notc:specific:chans {nick uhost hand chan type text} {
 global botnick advertiseactivate advertisechans
  if {($advertiseactivate == 3) || ($advertiseactivate == 4)} {
  if {([lsearch -exact [split [string tolower $advertisechans]] [string tolower $chan]] != -1)} { advertise:all:chans $nick $uhost $hand $chan $type $text }
  if {([lsearch -exact [split [string tolower $advertisechans]] [string tolower $chan]] == -1)} { return 0 }
  }
}


proc advertise:all:chans {nick uhost hand chan type text} {
 global botnick advertisewords advexflags advkickswitch advkickmsg advdynamicident advexnicks advexidents advexhosts advexuserhosts
 global advertisekicks advexopswitch advexvoiceswitch advexflagswitch advnickswitch advidentswitch advhostswitch advuserhostswitch
  set text [advertise:filter $text]; set userident [lindex [split $uhost "@"] 0]; set ipaddress [lindex [split $uhost "@"] 1]
  if {![file exists $advertisekicks]} { set file [open $advertisekicks "w"]; puts $file 1; close $file }
  if {($advdynamicident == "1") && (![string match "*~*" $userident])} { return 0 }
  if {(($advnickswitch == 1) && ($advexnicks != "") && ([string match -nocase *$advexnicks* $nick])) || (($advidentswitch == 1) && ($advexidents != "") && ([string match -nocase *$advexidents* $userident])) || (($advhostswitch == 1) && ($advexhosts != "") && ([string match -nocase *$advexhosts* $ipaddress])) || (($advuserhostswitch == 1) && ($advexuserhosts != "") && ([string match -nocase *$advexuserhosts* $uhost])) } { return 0 }
  if {([string match -nocase *$chan* $text])} { return 0 }
  foreach advertiseword [string tolower $advertisewords] {
   if {[string match -nocase *$advertiseword* $text]} {
   if {(($advexopswitch == 1) && ([isop $nick $chan])) || (($advexvoiceswitch == 1) && ([isvoice $nick $chan])) || (($advexflagswitch == 1) && ([matchattr $hand $advexflags $chan]))} { return 0 }
    if {($nick != $botnick) && ($chan != $botnick) && ([botisop $chan]) && ([validchan $chan]) && (![string match -nocase *$chan* $text]) && ([onchan $nick $chan])} {
     set advertiseban [advertise:banmask $uhost $nick]; set advertisetype $type;
     if {($advkickswitch == 1) && ($advkickmsg != "")} { advertise:kick:user $nick $chan $advertiseword $advertiseban; return 0 }
     if {($advkickswitch == 0)} { advertise:kick:script $nick $chan $advertiseword $advertisetype $advertiseban; return 0 }
      if {(($advkickswitch != 1) && ($advkickswitch != 0)) || ($advkickswitch == "")} { putlog "ADVERTISE KICK MESSAGE: No kick-message type selected."; return 0 }
      }
    }
  }
}


proc advertise:kick:user {nick chan advertiseword advertiseban} {
 global botnick advertisepunish advertisekicks advertisebantime advkickmsg
  set file [open $advertisekicks "r"]; set currentkicks [gets $file]; close $file; set totalkicks [expr $currentkicks]; set banmask $advertiseban
  if {($advkickmsg == "")} { set advkickmsg "0,1 Channel Advertise Kick 12,0 - 2Advertise/Invite 12word 6\"$advertiseword\" 12detected. Mass 2Advertising/Inviting/Spamming 12in 12is not tolerated on this 2channel. 12Failing to 2comply 12with 2these rules 12will result into a 2permanent ban." }
  if {($advertisebantime == 0) || ($advertisebantime == "") || ($advertisebantime < 1)} { set advertisebantime 60 }
  if {($advertisepunish == 1)} { putserv "KICK $chan $nick :$advkickmsg2 - (Kick #$totalkicks)" }
  if {($advertisepunish == 2)} { putserv "MODE $chan +b $banmask"; putserv "KICK $chan $nick :$advkickmsg2 - (Kick #$totalkicks)"; timer $advertisebantime [list advertise:unban $banmask $chan] }
  if {($advertisepunish == 3)} { newchanban $chan $banmask advertise $advkickmsg $advertisebantime; putserv "KICK $chan $nick :$advkickmsg2 - (Kick #$totalkicks)" }
  if {($advertisepunish == 4)} { newban $banmask advertise $advkickmsg $advertisebantime; putserv "KICK $chan $nick :$advkickmsg2 - (Kick #$totalkicks)" }
  if {($advertisepunish != 1) && ($advertisepunish != 2) && ($advertisepunish != 3) && ($advertisepunish != 4)} { putlog "ADVERTISE PUNISHMENT: No punishment type selected."; return 0 }
}

proc advertise:kick:script {nick chan advertiseword advertisetype advertiseban} {
 global botnick advertisepunish advertisekicks advertisebantime
  set file [open $advertisekicks "r"]; set currentkicks [gets $file]; close $file; set totalkicks [expr $currentkicks]; set banmask $advertiseban
  set advertisemsg "2Advertise/Invite 12word 6\"$advertiseword\" 12detected. Mass 2Advertising/Inviting/Spamming 12in 12is not tolerated on this 2channel. 12Failing to 2comply 12with 2these rules 12will result into a 2permanent ban."
  if {($advertisebantime == 0) || ($advertisebantime == "") || ($advertisebantime < 1)} { set advertisebantime 60 }
  if {($advertisetype == "TEXT")} { set advertisescriptmsg "0,1 Channel Text Advertise Kick 12,0 - $advertisemsg" }; if {($advertisetype == "ACTION")} { set advertisescriptmsg "0,1 Channel Action Advertise Kick 12,0 - $advertisemsg" }; if {($advertisetype == "NOTICE")} { set advertisescriptmsg "0,1 Channel Notice Advertise Kick 12,0 - $advertisemsg" }
  if {($advertisepunish == 1)} { putserv "KICK $chan $nick :$advertisescriptmsg2 - (Kick #$totalkicks)" }
  if {($advertisepunish == 2)} { putserv "MODE $chan +b $banmask"; putserv "KICK $chan $nick :$advertisescriptmsg2 - (Kick #$totalkicks)"; timer $advertisebantime [list advertise:unban $banmask $chan] }
  if {($advertisepunish == 3)} { newchanban $chan $banmask advertise $advertisescriptmsg $advertisebantime; putserv "KICK $chan $nick :$advertisescriptmsg2 - (Kick #$totalkicks)" }
  if {($advertisepunish == 4)} { newban $banmask advertise $advkickmsg $advertisebantime; putserv "KICK $chan $nick :$advkickmsg2 - (Kick #$totalkicks)" }
  if {($advertisepunish != 1) && ($advertisepunish != 2) && ($advertisepunish != 3) && ($advertisepunish != 4)} { putlog "ADVERTISE PUNISHMENT: No punishment type selected."; return 0 }
}


proc advertise:banmask {uhost nick} {
 global advbanmask
   switch -- $advbanmask {
    1 { set banmask "*!*@[lindex [split $uhost @] 1]" }
    2 { set banmask "*!*@[lindex [split [maskhost $uhost] "@"] 1]" }
    3 { set banmask "*!*$uhost" }
    4 { set banmask "*!*[lindex [split [maskhost $uhost] "!"] 1]" }
    5 { set banmask "*!*[lindex [split $uhost "@"] 0]*@[lindex [split [maskhost $uhost] "@"] 1]" }
    6 { set banmask "*!*[lindex [split $uhost "@"] 0]*@[lindex [split $uhost "@"] 1]" }
    7 { set banmask "$nick*!*@[lindex [split [maskhost $uhost] "@"] 1]" }
    8 { set banmask "*$nick*!*@[lindex [split [maskhost $uhost] "@"] 1]" }
    9 { set banmask "$nick*!*@[lindex [split $uhost "@"] 1]" }
    10 { set banmask "*$nick*!*@[lindex [split $uhost "@"] 1]" }
    11 { set banmask "$nick*!*[lindex [split $uhost "@"] 0]@[lindex [split $uhost @] 1]" }
    12 { set banmask "$nick*!*[lindex [split $uhost "@"] 0]@[lindex [split [maskhost $uhost] "@"] 1]" }
    13 { set banmask "*$nick*!*$uhost" }
    14 { set banmask "$nick*!*[lindex [split $uhost "@"] 0]*@[lindex [split $uhost "@"] 1]" }
    15 { set banmask "*$nick*!*[lindex [split $uhost "@"] 0]*@[lindex [split $uhost "@"] 1]" }
    16 { set banmask "$nick!*[lindex [split $uhost "@"] 0]*@[lindex [split $uhost "@"] 1]" }
    17 { set banmask "$nick![lindex [split $uhost "@"] 0]@[lindex [split [maskhost $uhost] "@"] 1]" }
    18 { set banmask "$nick!*[lindex [split $uhost "@"] 0]*@[lindex [split [maskhost $uhost] "@"] 1]" }
    19 { set banmask "*$nick*!*[lindex [split $uhost "@"] 0]@[lindex [split [maskhost $uhost] "@"] 1]" }
    20 { set banmask "*$nick*!*[lindex [split $uhost "@"] 0]*@[lindex [split [maskhost $uhost] "@"] 1]" }
    default { set banmask "*!*@[lindex [split $uhost @] 1]" }
    return $banmask
   }
}

proc advertise:unban {banmask chan} {
 global botnick
  if {([botisop $chan])} {
   if {([ischanban $banmask $chan])} {
    pushmode $chan -b $banmask; return 0
     }
     if {(![ischanban $banmask $chan])} {
      return 0
      }
   }
}


if {![file exists $advertisekicks]} {
 putlog "ADVERTISE KICK COUNTER: The \002advertise kick counter file\002 does not exist. Creating file \002$advertisekicks\002."
 set file [open $advertisekicks "w"]
 puts $file 1
 close $file
}

proc advertise:kick:counter {nick uhost handle chan target arg} {
 global botnick advertisekicks
  if {[string tolower $target] == [string tolower $botnick]} { return 0 }
  if {[string tolower $nick] == [string tolower $botnick]} {
   if {![file exists $advertisekicks]} {
    putlog "ADVERTISE KICK COUNTER: The advertise kick counter file does not exist. Creating file $advertisekicks."
    set file [open $advertisekicks "w"]
    puts $file 1; close $file
    }
    set file [open $advertisekicks "r"]
    set currentkicks [gets $file]; close $file
    set file [open $advertisekicks "w"]
    puts $file [expr $currentkicks + 1]; close $file
    }
}

proc advertise:filter {str} {
  regsub -all -- {\003[0-9]{0,2}(,[0-9]{0,2})?|\017|\037|\002|\026|\006|\007} $str "" str
  return $str
}

putlog "TCL Script> анти-реклама загружена."
return
kuap
 
Сообщения: 5
Зарегистрирован: 04 мар 2009 21:47
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Anti-Adversting script v3.1.Кикает, но не банит

Сообщение tvrsh » 05 мар 2009 00:42

По поводу первого скрипта, попробуй дописать в строку
newchanban $ar(bchan) $ar(bmask) "ANTIADV" $ar(breason) $ar(bantime)
параметр sticky. Так чтобы строка стала выглядеть таким образом:
newchanban $ar(bchan) $ar(bmask) "ANTIADV" $ar(breason) $ar(bantime) sticky
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: Anti-Adversting script v3.1.Кикает, но не банит

Сообщение kuap » 05 мар 2009 07:25

дописал. банить не стал таки, а вот конфликт получился.. бота стало выкидывать за флуд ( вышел из IRC: Excess Flood), ибо он "ставит бан" (читай- пытается, но из попыток только писанина, о том что бан поставлен) много-много раз, пока его сервис не выкидывает.Вот.
kuap
 
Сообщения: 5
Зарегистрирован: 04 мар 2009 21:47
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Anti-Adversting script v3.1.Кикает, но не банит

Сообщение tvrsh » 05 мар 2009 12:58

Так. Процедура бана срабатывает только при получении рава 322. То-есть, после всех очисток от разрешенных каналов и проверок подозрительного текста, если в нем остались подозрительные каналы бот пишет команду
/list #подозрительный_канал
и если такой канал находится в списке то уже банит нарушителя.

А конкретнее интересует нас видимо этот кусок кода:
TCL: [ Скачать ] [ Скрыть ]
#сопсно ищем названия каналов и добавляем их в переменную

   if { [regexp -nocase -- {[^\ ]+\ \#[^\ ]*\ [^\ ]+\ :\[.+\].*} $text] } {
      if { [regexp -nocase -- {[^\ ]+\ (\#[^\ ]*)\ ([^\ ]+)\ :\[(.+)\].*} $text trash chan users mode] } {
         set chan [string trim $chan]
         if { $chan != "" } {
            lappend ar(channel) [list $chan]
         }
      }
   } else {
      if { [regexp -nocase -- {[^\ ]+\ (\#[^\ ]*)\ ([^\ ]+)\ :.*} $text trash chan users] } {
         set chan [string trim $chan]
         if { $chan != "" } {
            lappend ar(channel) [list $chan]
         }
      }
   }
#ну, если мы ничего не нашли, то увы.


Тут идет сравнение на соответствие строкой полученной от raw 322 с шаблоном #Канал Юзеры :Топик.
Но, на сколько я знаю, когда бот иркоп он получает с этой строкой еще и моды канала.
И, кажется, тут немного не правильно была реализована проверка на получение строки с модами и без них.

Попробуй заменить код на
TCL: [ Скачать ] [ Скрыть ]
#сопсно ищем названия каналов и добавляем их в переменную
   
   if { [regexp -nocase -- {[^\ ]+\ \#[^\ ]*\ [^\ ]+\ :\[.+\].*} $text] } {
      if { [regexp -nocase -- {[^\ ]+\ (\#[^\ ]*)\ ([^\ ]+)\ :\[(.+)\].*} $text trash chan users mode] } {
         set chan [string trim $chan]
         if { $chan != "" } {
            lappend ar(channel) [list $chan]
         }
      } else {
         if { [regexp -nocase -- {[^\ ]+\ (\#[^\ ]*)\ ([^\ ]+)\ :.*} $text trash chan users] } {
            set chan [string trim $chan]
            if { $chan != "" } {
               lappend ar(channel) [list $chan]
            }
         }
      }
   }
#ну, если мы ничего не нашли, то увы.


Вообще мне кажется это уж слишком заумно проверять канал на наличие в /list
Ведь на канале может стоять мод скрывающий его из листа и тогда уже спамер не зобанится. Хотя врятли на таких каналах умеют ставить хоть какие-либо моды.
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: Anti-Adversting script v3.1.Кикает, но не банит

Сообщение kuap » 06 мар 2009 11:30

переписал... результат тот же...снова массовый флуд...и снова тока кикает..
kuap
 
Сообщения: 5
Зарегистрирован: 04 мар 2009 21:47
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Anti-Adversting script v3.1.Кикает, но не банит

Сообщение tvrsh » 07 мар 2009 12:55

А newchanban в других скриптах нормально функционирует?
Полон банлист? Или хост имеет специфический вид из-за чего бот не может поставить на него бан?
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: Anti-Adversting script v3.1.Кикает, но не банит

Сообщение kuap » 08 мар 2009 23:20

банЛист в количестве 7 юзеров. Другие скрипты работают по бану стабильно (такие, как badWord).Бан из привата бота ставиться. После первого изменения скрипта (дописки одного слова) бот ставит бан... но, но его выкидывает сервис за флуд.... он многократно ставит бан...., даже после удаления этого слова....
kuap
 
Сообщения: 5
Зарегистрирован: 04 мар 2009 21:47
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Anti-Adversting script v3.1.Кикает, но не банит

Сообщение tvrsh » 09 мар 2009 12:04

Раскомментируй эти две строки
#   set ar(channel) ""
#   if {$ar(banned) == 1} { return }
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 скрипты

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 7

cron