repeat tcl v1 April 1999 by slennox slenny ozemail com au Этот скрипт

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
###################################################################################
# repeat.tcl v1.1 (9 April 1999) by slennox <slenny@ozemail.com.au>
#
# Этот скрипт предназначен для защиты от флуда на вашем канале, имеет максимально
# простые настройки, не имеет возможности выставлять +m на канал при более
# активных атак, что делает ему плюс, умеет кикать и банить людей, что не вниемлют
# правилам нормального общения, т.е. флудильщиков. Основа скрипта была взята с уже
# знаменитого repeat.tcl написанным Tris.
#
# В скрипте реализовано три варианта для отлова флуда на канале, а именно:
# ° первый вариант, ловит небольшой флуд, сравнимо с защитой на вашем боте;
# ° второй вариант, ловит уже основательный флуд после которого последует бан;
# ° третий вариант, вариант отлавливает людей, что любят повторять одни и те же
# вопросы в короткий промежуток времени.
#
# Перевод настроек принадлежит сайту TCL скриптов www.myftp.net.ru - один из самых
# больших архивов скриптов с русскоязычными описаниями! Каждый день обновления!!!
####################################################################################
# Первый вариант. Стандартная защита после которой последует кик (repeats:seconds)
set rp_kflood 3:60
# Сообщение при наканазании
set rp_kreason "stop repeating"
# Второй вариант. После которого последует кик+бан (repeats:seconds)
set rp_bflood 5:60
# Сообщение при наканазании
set rp_breason "repeat flood"
# Третий вариант. После которого последует кик (repeats:seconds)
set rp_sflood 3:240
# Сообщение при наканазании
set rp_sreason "stop repeating"
# Установите длину строки которая будет считаться спамом (сообщение короче
# указанной длины, не будет рассматриваться как спам)
set rp_slength 10
# Укажите в секундах промежуток времени что будет рассматриваться как флуд идущий
# с одного адреса (хоста)
set rp_mtime 240
# Сообщение при наканазании
set rp_mreason "multiple repeat floods"
# Укажите промежуток времени в минутах на сколько выставлять бан
set rp_btime 30
# Далее лучше не трогать
proc rp_pubmsg {nick uhost hand chan text} {
global botnick rp_bcount rp_bflood rp_breason rp_btime rp_kcount rp_kflood rp_kreason rp_scount rp_sflood rp_slength rp_sreason
set uhost [string tolower $uhost]
set chan [string tolower $chan]
set text [string tolower $text]
if {$nick == $botnick} {return 0}
if {[matchattr $hand f|f $chan]} {return 0}
if {![info exists rp_bcount($uhost:$chan:$text)]} {
set rp_bcount($uhost:$chan:$text) 0
}
incr rp_bcount($uhost:$chan:$text)
if {![info exists rp_kcount($uhost:$chan:$text)]} {
set rp_kcount($uhost:$chan:$text) 0
}
incr rp_kcount($uhost:$chan:$text)
if {[string length $text] > $rp_slength} {
if {![info exists rp_scount($uhost:$chan:$text)]} {
set rp_scount($uhost:$chan:$text) 0
}
incr rp_scount($uhost:$chan:$text)
}
if {$rp_bcount($uhost:$chan:$text) == [lindex $rp_bflood 0]} {
if {[botisop $chan] && [onchan $nick $chan]} {
putserv "KICK $chan $nick :$rp_breason"
}
set bmask *!*[string tolower [string range $uhost [string first "@" $uhost] end]]
newchanban $chan $bmask repeat $rp_breason $rp_btime
return 0
}
if {$rp_kcount($uhost:$chan:$text) == [lindex $rp_kflood 0]} {
rp_mhost $nick $uhost $chan
if {[botisop $chan] && [onchan $nick $chan]} {
putserv "KICK $chan $nick :$rp_kreason"
}
return 0
}
if {[info exists rp_scount($uhost:$chan:$text)]} {
if {$rp_scount($uhost:$chan:$text) == [lindex $rp_sflood 0]} {
rp_mhost $nick $uhost $chan
if {[botisop $chan] && [onchan $nick $chan]} {
putserv "KICK $chan $nick :$rp_sreason"
}
return 0
}
}
}
proc rp_pubact {nick uhost hand dest key arg} {
rp_pubmsg $nick $uhost $hand $dest $arg
}
proc rp_pubnotc {from keyword arg} {
set nick [lindex [split $from !] 0]
set chan [string tolower [lindex [split $arg] 0]]
if {![validchan $chan] || ![onchan $nick $chan]} {return 0}
set uhost [getchanhost $nick $chan]
set hand [nick2hand $nick $chan]
set text [join [lrange [split $arg] 1 end]]
rp_pubmsg $nick $uhost $hand $chan $text
}
proc rp_mhost {nick uhost chan} {
global rp_btime rp_mhosts rp_mreason rp_mtime
set mhost [lindex [split $uhost "@"] 1]
if {![info exists rp_mhosts($chan)]} {
set rp_mhosts($chan) ""
}
set mlist $rp_mhosts($chan)
if {[lsearch -exact $mlist $mhost] != -1} {
set bmask *!*[string tolower [string range $uhost [string first "@" $uhost] end]]
newchanban $chan $bmask repeat $rp_mreason $rp_btime
} else {
lappend rp_mhosts($chan) $mhost
utimer $rp_mtime "rp_mhostreset $chan"
}
}
proc rp_mhostreset {chan} {
global rp_mhosts
set rp_mhosts($chan) [lrange rp_mhosts($chan) 1 end]
}
proc rp_kreset {} {
global rp_kcount rp_kflood
if {[info exists rp_kcount]} {
unset rp_kcount
}
utimer [lindex $rp_kflood 1] rp_kreset
}
proc rp_breset {} {
global rp_bcount rp_bflood
if {[info exists rp_bcount]} {
unset rp_bcount
}
utimer [lindex $rp_bflood 1] rp_breset
}
proc rp_sreset {} {
global rp_scount rp_sflood
if {[info exists rp_scount]} {
unset rp_scount
}
utimer [lindex $rp_sflood 1] rp_sreset
}
if {![string match *rp_kreset* [utimers]]} {
global rp_kflood
utimer [lindex $rp_kflood 1] rp_kreset
}
if {![string match *rp_breset* [utimers]]} {
global rp_bflood
utimer [lindex $rp_bflood 1] rp_breset
}
if {![string match *rp_sreset* [utimers]]} {
global rp_sflood
utimer [lindex $rp_sflood 1] rp_sreset
}
set rp_kflood [split $rp_kflood :]
set rp_bflood [split $rp_bflood :]
set rp_sflood [split $rp_sflood :]
bind pubm - * rp_pubmsg
bind ctcp - ACTION rp_pubact
bind raw - NOTICE rp_pubnotc
putlog "Loaded repeat.tcl v1.1 by slennox"