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

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


Вот сидит теперь бот на канале, всех приветствует, желающим - пива наливает, за порядком следит.
Вот мирное общение. Сидите, общаетесь... Захотелось пошутить - поговорить от имени бота. в DCC лезть не
хочется... Что делать? А вот сейчас и узнаем :)

Работаем с приватами.

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

bind msg n !say msg:say
proc msg:say {nick uhost hand text} {
putlog "$nick!$uhost ($hand) !say $text"
set to [lindex $text 0]
set text [lreplace $text 0 0]
putserv "privmsg $to :$text"
}

Теперь поясним что и как работает (хотя итак все должно быть ясно если вы читали предыдущие статьи).
Вы в привате говорите боту !say <куда говорить> <что говорить>
<куда говорить> - ник или канал, куда бот должет сказать данную фразу. Если будет ник, то бот напишет в приват,
если канал - бот скажет на канал.
<что говорить> - тест, который бот должен сказать

Пример1:
Приват бота:
<владелец> !say Вася Привет Васек!
Приват Васи:
<Бот> Привет Васек!

Пример2:
Приват бота:
<владелец> !say #канал Всем привет!
Канал #канал:
<Бот> Всем привет!

Вообще скрипт можно написать в 2 строки :)

bind msg n !say msg:say
proc msg:say {nick uhost hand text} { putlog "$nick!$uhost ($hand) !say $text"; set to [lindex $text 0]; set text [lreplace $text 0 0]; putserv "privmsg $to :$text" }

Можно и в 1 но это будет полный изврат :)

bind msg n !say msg:say; proc msg:say {nick uhost hand text} { putlog "$nick!$uhost ($hand) !say $text"; set to [lindex $text 0]; set text [lreplace $text 0 0]; putserv "privmsg $to :$text" }

Но так менее понятно что куда и зачем. Так стоит делать в очень редких случаях, а лучше не делать так :)

Мутим обратную связь.

Вот поболтали вы от бота, посмеялись над всеми, потомучто только глобальный владелец (global owner) (См. описание флага +n) может
пользоваться этим. Одно только неудобно - не видно что боту отвечают в приват.

Набросаем еще один скрипт посложнее:

# *!*!*!*: Для работы этого скрипта необходим EggDrop/WinDrop с опцией HANDLEN 32 и пользователь dynamicvariables_ :*!*!*!* #

bind msg n !say msg:say
proc msg:say {nick uhost hand text} {
putlog "$nick!$uhost ($hand) !say $text"
set to [lindex $text 0]
set text [lreplace $text 0 0]
putserv "privmsg $to :$text"
}

# Функция, которая будет возвращать кому редиректить. Можно было и не создавать ее но так ИМХО удобнее.
proc get:redirect:msg {nick} { return [getuser dynamicvariables_ xtra "redirmsg_from_$nick"] }

bind msgm - * msgm:redirect
proc msgm:redirect {nick uhost hand text} {
if {[tolower [lindex $text 0]]!="pass" && [tolower [lindex $text 0]]!="auth" && [tolower [lindex $text 0]]!="die" && [tolower [lindex $text 0]]!="ident"} {
set to [get:redirect:msg $nick]
if {[matchattr $to QB]} { putserv "privmsg [hand2nick $to] :<$nick> $text" }
}
}

bind msg n !redirect set:msg:redirect

proc set:msg:redirect {nick uhost hand text} {
putlog "!regirect $text from $nick!$uhost ($hand)"
set from [lindex $text 0]
set set [lindex $text 1]
if {$set=="on"} { setuser dynamicvariables_ xtra redirmsg_from_$from $hand; putserv "privmsg $nick OK, redirect privmsg from $from set to $hand" }
if {$set=="off"} { setuser dynamicvariables_ xtra redirmsg_from_$from ""; }
}

Вот так удобнее уже. Видно что отвечают боту. Можно даже общаться через него :)






строительный вестник http://terrakolor.ru/ Рейтинг@Mail.ru