Скриптинг для Eggdrop (TCL) - Вопрос-Ответ

Как правильно и неправильно писать TCL скрипты для популярного бота


Где можно скачать TCL и документацию к нему?

Среда, 30 Май 2007

Последнее обновление Суббота, 23 Июнь 2007

Где описаны все внутренние процедуры Eggdrop для скриптов?

Среда, 30 Май 2007
Прилагаемый к боту файл docs/tcl-commands.doc или перевод его на русском
Последнее обновление Суббота, 23 Июнь 2007

Есть ли книги по TCL на русском языке?

Среда, 30 Май 2007

Последнее обновление Понедельник, 24 Сентябрь 2007

Есть русская документация на TCL?

Среда, 30 Май 2007
http://www.florin.ru/win/tcl-tk/I_gu10.htm
Последнее обновление Вторник, 30 Ноябрь 1999

Как вызвать и передать параметры процедуре?

Среда, 30 Май 2007
proc myproc {a b c} { ... }
myproc 1 2 3

Процедура myproc получит: a=1, b=2, c=3
Последнее обновление Вторник, 30 Ноябрь 1999

Как вынуть из userfile пользователей с конкретными флагами?

Среда, 30 Май 2007
userlist AB
- покажет пользователей с флагом "A" или "B"
userlist AB&
- покажет пользователей с флагами "A" и "B"
Последнее обновление Суббота, 23 Июнь 2007

Как запустить shell-команду и вывести output в канал?

Среда, 30 Май 2007
Если на выходе одна строка, можно просто:
set output [exec command]

Например:
set serveruptime [exec uptime]


А если на выходе несколько строк или вы не знаете сколько их будет, то лучше применять следующий код:
foreach temp [split [exec command] "\r\n"] {
     putserv "PRIVMSG $chan :$temp"
    }

Последнее обновление Вторник, 30 Ноябрь 1999

Как из скрипта убить процедуру

Среда, 30 Май 2007
rename <proc_name> ""

Последнее обновление Суббота, 02 Июнь 2007

Как посчитать количество пользователей в канале?

Среда, 30 Май 2007
set usersnum [llength [chanlist $chan]]

Последнее обновление Вторник, 30 Ноябрь 1999

Как проверить содержит ли переменная цифру?

Среда, 30 Май 2007
if {![catch {expr $var}]} {
    # $var является числом
    } else {
    # $var не является числом
    }

Последнее обновление Вторник, 30 Ноябрь 1999

Как прочитать или установить ENV-переменную?

Среда, 23 Май 2007
Прочесть :
set myenv $env(DISPLAY)

Установить:
set env(DISPLAY) unix:0

Проверить :
if {[info exists env(VARNAME)]}

Последнее обновление Среда, 23 Май 2007

Как узнать IP бота?

Среда, 23 Май 2007
set ip [myip]
    foreach v {d c b a} {
     set $v [expr $ip & 255]
     set ip [expr $ip >> 8]
    }
    set botip "$a.$b.$c.$d"

Последнее обновление Вторник, 30 Ноябрь 1999

Как узнать IP бота?

Среда, 23 Май 2007
set ip [myip]
    foreach v {d c b a} {
     set $v [expr $ip & 255]
     set ip [expr $ip >> 8]
    }
    set botip "$a.$b.$c.$d"

Последнее обновление Вторник, 30 Ноябрь 1999

Как узнать какие события bind'ит мой бот?

Среда, 30 Май 2007
'.binds all' или '.binds <тип> all' (например '.binds DCC all')
Последнее обновление Суббота, 23 Июнь 2007

Какие буквы или цифры я могу использовать в флагах пользователей для своих скриптов, чтобы не конфликтовали с ботовскими?

Среда, 23 Май 2007
Все большие буквы (A-Z) и цифры (0-9). Но если вы ставите еще и чужие скрипты, то следите, чтобы их флаги уже не конфликтовали с вашими.
Последнее обновление Среда, 23 Май 2007

Можно ли каким-либо образом держать свои данные, не относящиеся к пользователям в userfile?

Среда, 30 Май 2007
По идее нет. Но можно прибегнуть к хитрости и содержать эти данные в XTRA-полях самого бота :)
Последнее обновление Вторник, 30 Ноябрь 1999

После каких изменений в скрипте надо делать .restart, потому что .rehash не помогает?

Среда, 23 Май 2007
После удаления bind'ов и после изменения количества переменных в процедурах.
Последнее обновление Среда, 23 Май 2007