Страница 1 из 1

Изменение дефолтной маски бана

СообщениеДобавлено: 24 окт 2008 12:22
tvrsh
Установка банов.

Существует довольно простой способ изменения дефолтной банмаски: замена команды 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


TCL: [ Скачать ] [ Скрыть ]
# 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
}


Ну очень вольный перевод с forum.egghelp.org