IRC.WindNet
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

скрипт антиреклама

Участников: 2

Перейти вниз

скрипт антиреклама Empty скрипт антиреклама

Сообщение автор NoName Пн Мар 21, 2011 2:19 pm

###################################################################################
#
# #### ## ##
# ## ## ##
# ####### #### # ###### ###### ##### ##### ### ##### ### ## ## ##
# ## # ## ## # ## ## ## # ## ## # ## ## ### ## ##
# ## # ## # ## ## ## ## ## ## ## ###### ## ## ## ##
# ## # ## ### ## ## # ## # ## ## ## ## # ## ## ##
# ## # ## ## ####### #### #### ## ### ### ##### #### ## ##### #####
# # ##
# #### ##
#
###################################################################################
#
# Anti-Adversting script v3.1 Gold 17/08/2005
#
# Описание:
# Лучший скрипт на сегодняшний день для отлова и наказания за рекламу иных
# каналов сети на вашем канале. Скрипт единственный в своем роде, он умеет ловить
# имена любых каналов, какие только можно себе представить, нарушителю
# выставляется бан. Есть лог нарушителей и команда для его просмотра!
#
# Установка:
# ° Скопируйте файл adversting.tcl в каталог scripts где находится ваш бот
# ° Пропишите в eggdrop.conf "source scripts/regonline/adversting.tcl"
# ° Укажите верный путь к файлу лога скрипта.
#
# Доступные команды:
# !log <наименование канала> - просмотр лога нарушений на определенном канале.
#
# Изменения в версии 3.0:
# ° Полностью переделан скрипт, исправлено много мелких ошибок и неточностей.
#
# Изменения в версии 3.1:
# ° Теперь бот не банит за написание канала в котором находится в любом регистре;
# ° Исправлена ошибка при отлове рекламы написанной цветом, а так же жирным и
# подчеркиванием;
# ° Появилась возможность подписать на оповещения нотисом о работе скрипта более
# чем одному нику, для этого следует просто написать несколько ников разделив их
# пробелом;
#
# Автор: Zelik
#
###################################################################################
#
# Один из самых больших архивов TCL скриптов с русскими описаниями! На сегодня уже
# более 300 скриптов, проверенный в большей своей массе, каждый день производяться
# регулярные обновления, проверяются опубликованные скрипты на новые версии, есть
# своя тех.поддержка по помощи их установки по средствам электронной почты с
# администратором самого ресурса!
#
# 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) "Zelik"

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

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

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

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

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

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

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

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

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

#Автор скрипта
set ar(author) "Zelik "

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

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

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."

NoName
Help Operator
Help Operator

Сообщения : 23
Дата регистрации : 2011-03-20
Возраст : 29
Откуда : из ада

Вернуться к началу Перейти вниз

скрипт антиреклама Empty Re: скрипт антиреклама

Сообщение автор Тень Пн Апр 18, 2011 8:44 pm

Гм
Тень
Тень
Новичок
Новичок

Сообщения : 15
Дата регистрации : 2011-04-13
Возраст : 78
Откуда : Планета Земля

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения