Существует довольно простой способ изменения дефолтной банмаски: замена команды maskhost на процедуру, которая будет возвращать нужные банмаски.
Добавление банов в внутренний банлист происходит через newban (глобальный бан), newchanban (канальный бан), установку банов на канале или принудительную установку банов(enforcing) и контролируется канальными настройками. Если по какой-либо причине вы не хотите использовать внутренний банлист используйте команду pushmode для установки бана на канале напрямую.
Для банов установленный через встроенные flood/autokick/revenge механизмы вам необходимо написать скрипт который будет ставить баны через вашу команду maskhost которая будет возвращать нестандартные маски для бана. В киках за флуд это легко исправить; найдите 'bind flud' и добавть свою процедуру. Revenge и +k потребуют намного больших трудов, так как, вам придется переписать целую tcl функцию, или, если вы достаточно хорошо знаете Си, изменить исходный код бота.
Процедура для замены встроенный команды maskhost:
Использование: maskhost <nick!ident@host.tld> [тип]
Тип это опциональное значение, вы можете не указывать его и тогда эта процедура будет работать также, как и встроенная. Ниже приведен список поддерживаемых масок.
Это процедура намного строже работает с входящими данными. Хост из которого получаем маску обязательно должно содержать ! и @ причем должно быть хотябы по одному символу между ними и по краям от них.
Типы поддерживаемых процедурой масок (заимствованно из mirc):
0: *!user@full.host.tld
1: *!*user@full.host.tld
2: *!*@full.host.tld
3: *!*user@*.host.tld
4: *!*@*.host.tld
5: nick!user@full.host.tld
6: nick!*user@full.host.tld
7: nick!*@full.host.tld
8: nick!*user@*.host.tld
9: nick!*@*.host.tld
# Setting:
set maskhostDefaultType 3
# The proc:
proc maskhost [list name [list type $maskhostDefaultType]] {
if {[scan $name {%[^!]!%[^@]@%s} nick user host]!=3} {
error "Usage: maskhost <nick!user@host> \[type\]"
}
if [string match {[3489]} $type] {
if [string match {*[0-9]} $host] {
set host [join [lrange [split $host .] 0 2] .].*
} elseif {[string match *.*.* $host]} {
set host *.[join [lrange [split $host .] end-1 end] .]
}
}
if [string match {[1368]} $type] {
set user *[string trimleft $user ~]
} elseif {[string match {[2479]} $type]} {
set user *
}
if [string match {[01234]} $type] {
set nick *
}
set name $nick!$user@$host
}
set maskhostDefaultType 3
# The proc:
proc maskhost [list name [list type $maskhostDefaultType]] {
if {[scan $name {%[^!]!%[^@]@%s} nick user host]!=3} {
error "Usage: maskhost <nick!user@host> \[type\]"
}
if [string match {[3489]} $type] {
if [string match {*[0-9]} $host] {
set host [join [lrange [split $host .] 0 2] .].*
} elseif {[string match *.*.* $host]} {
set host *.[join [lrange [split $host .] end-1 end] .]
}
}
if [string match {[1368]} $type] {
set user *[string trimleft $user ~]
} elseif {[string match {[2479]} $type]} {
set user *
}
if [string match {[01234]} $type] {
set nick *
}
set name $nick!$user@$host
}
Ну очень вольный перевод с forum.egghelp.org