SolarNet Irc Network logo  
Твое место под солнцем!

Литература => Продолжаем скриптинг на TCL (EggDrop / WinDrop) (Часть 3):


Вот сидит теперь бот на канале, всех приветствует, желающим - пива наливает. Но не всегда все
бывает так мирно. Всегда найдется какой-нибудь нехороший человек.

Работаем с флагами пользователей.

Вот сидите вы спокойно и пьете пиво, тут влетает какой-то урод и начинает рекламить и флудить,
или просто всех оскорблять. Все решается просто. - !ban Ник_чела Причина
Вроде все просто, только как узнать можно ли данному пользователю использовать эту команду?
Для этого есть флаги доступа. Ознакомиться с ними можно тут.

Набросаем небольшой скрипт:

bind pub - !ban pub:ban
proc pub:ban {nick uhost hand chan text} {
if [[matchattr $hand |o $chan] || [matchattr $hand o]]
set bannednick [lindex $text 0]
set reason [lreplace $text 0 0]
newchanban $chan *![getchanhost $bannednick] $hand $reason
putserv "kick $chan $bannednick :$reason"
}
}

Теперь объясним что и зачем
Команда: matchattr
Синтаксис: matchattr <пользователь> <флаги> [канал]
Эта функция возвращает 1 если проверяемые флаги у пользователя есть и 0 - если нет.
Пример:
matchattr User |o #test - проверяем есть ли у пользователя канальный флаг +o для канала #test
matchattr User o - проверяем есть ли у пользователя глобальный флаг +o

Команда: lindex
Синтаксис: lindex "текстовая строка" <какое слово возвратить>
Функция возвращает N-ое слово из строки. Отсчет ведется с нуля и с левого края
Пример:
lindex "всякие разные слова" 0 - возвратит "всякие"
lindex "всякие разные слова" 1 - возвратит "разные"

Команда: lreplace
Синтаксис: lreplace "текстовая строка" <первый> <последний> [еще слова]
Вот несколько примеров:

.tcl lreplace "q w e r t y" 0 0
Tcl: w e r t y
.tcl lreplace "q w e r t y" 0 0 w
Tcl: w w e r t y
.tcl lreplace "q w e r t y" 0 0 a s d
Tcl: a s d w e r t y
.tcl lreplace "q w e r t y" 1 0 a s d
Tcl: q a s d w e r t y

(.tcl - ввели команду; Tcl: вернула команда)

Команда: newchanban
Синтаксис: newchanban <#канал> <маска бана> <создатель> <причина> [время жизни] [опции]
Команда создает бан на канале и кикает с причиной бана. Параметр [время жизни] указывается в секундах.
Если параметр не указан, время будет взято из переменной ban-time
В параметре [опции] можно указать "stickly" - эта опция означает что бан будет удерживаться на канале если
канальная опция dynamicbans включена. (+dynamicbans)
Пример:
newchanban #mychannel *!*@*.microsoft.com Bart-wht- "Я нИнАвИжУ мЕкРАсОФт :)"

Все остальное думаю ясно. Если не ясно - попробуйте перечитать предыдущие статьи или задать свои вопросы на канале #scripting в сети SolarNet (irc.solarnet.ru | irc.tm-net.ru)






Рейтинг@Mail.ru