Q: Как посчитать количество пользователей в канале? A: set usersnum [llength [chanlist $chan]]
Q: Как проверить флаги пользователя? A: [matchattr $hand <flag|flag> $chan] Флаги расположены так: <глобальный>|<локальный> Если канал не указать, будут проверены только глобальные флаги.
Q: Как создать список? A: Список создается с помощью команды: set list "one two three four five" В итоге мы получим список в пятью элементами. Пустой список создается командой: set list ""
Q: Как взять один элемент списка? A: Первый элемент всегда имеет номер "0". Значит для получения первого элемента сделайте: lindex $list 0
Q: Как выбрать строку из списка наугад (RND)? A: set list { "number one" "number two" "number three" } set random [lindex $list [rand [llength $list]]]
Q: Как заменить символ в строке на другой? A: regsub -all -- "windows" "$string" "unix" mystring Заменит слова "windows" на "unix" в строке $string и запишет новую строку в $mystring.
Q: Как из куска HTML вырезать текст между <pre> и </pre>? A: Сначала найти <pre> через lsearch, потом найти </pre>. И выбрать серединку через lrange. set a [lrange $str [expr [lsearch $str "<pre>"] + 1] [expr [lsearch $str "</pre>"] - 1]] Q: Как взять один символ (или два/три символа) из строки? A: set string "eggdrop" Пример с одним символом (результат будет "d"): string index $string 3 Пример с группой символов #1 (результать будет "dr"): string range $string 3 4 Пример с группой символов #2 (результать будет "drop"): string range $string 3 end
Q: Как прочитать данные из файла на диске? A: set file [open myfile.txt r+] set result [read $file] close $file
Q: Как записать в файл на диске? A: set file [open myfile.txt w+] puts $file hello close $file
Q: Как взять из файла строку наугад? A: Правда не стоит это делать на больших файлах. set file [open myfile.txt r] set data [read $file] close $file set lines [split $data \n] set randline [lindex $lines [rand [llength $lines]]]
Q: Как отрабатывать процедуру по времени? A: bind time - <mask> my_time_proc proc my_time_proc {min hour day month year} { } bind time - "00 * * * *" my_time_proc (каджый час) bind time - "05 05 * * *" my_time_proc (в 5:05 утра) bind time - "?0 * * * *" my_time_proc (каждые 10 минут)
Q: Как отрабатывать процедуру каждые XX минут? A: if {![info exists my_proc_running]} { timer 20 my_proc set my_proc_running 1 } proc my_proc {} { # начало вашего кода # конец вашего кода timer 20 my_proc eturn 1 }
Q: Как сделать чтобы процедура иногда срабатывала, а иногда нет? A: Можно просто сделать выборку по RND, и если одно число, то работать, если нет, то не работать. Пример выборки одного из трех: set x [rand 3] if {$x==3} { }
Q: Как получить дату/время заданного вида? A: clock format [unixtime] -format <вид> Флаги форматов даты/времени в документации на TCL. Пример: Получить из unixtime дату формата "01 May 2001 12:05" [clock format [unixtime] -format "%d %m %Y %H:%M"]
Q: Имеем строку с датой формата "2001-05-27 11:22:33". Как ее преобразовать в "27-05-2001 11:22"? A: set date [split "2001-05-27 11:22:33"] set a [split [lindex $date 0] "-"] set b [split [lindex $date 1] ":"] set output "[lindex $a 2]-[lindex $a 1]-[lindex $a 0] [lindex $b 0]:[lindex $b 1]"
Q: Как сделать задержку перед выполнением процедуры? A: Первый вариант (замораживает общий поток): after 1000 putserv "PRIVMSG $chan :test" Второй вариант (создает свой поток для работы): after 1000 putserv "PRIVMSG $chan :test" 1000 - это миллисекунды (ms). 1000ms = 1s.
Q: Как послатать сообщения в канал/пользователю? A: Сообщение в канал: putserv "PRIVMSG $chan :message from bot..." NOTICE пользователю: putserv "NOTICE $nick :my notice to you..." ACTION в канал: putserv "PRIVMSG $chan :\001ACTION вернулся...\001" CTCP-запрос пользователю: putserv "PRIVMSG $nick :\001VERSION\001"
Q: Как узнать откуда пришел ACTION. Из канал или из привата? A: proc action_bind {nick uhost hand dest keyword text} { if {[string index $dest 0] == "#"} { return "from channel" } return "from private"