Вопросы по скриптам
|
|
|
pLanu2 14.08.12 11:15 #226
|
Quote 6. Скрипт добавляет строку в файл:
Code bind pub - !строка com6
proc com6 {nick uhost hand chan text} { set file "baza.txt" if {$text == ""} {putserv "NOTICE $nick :Формат: !строка <текст>"; return} set filep [open $file a+] puts $filep $text close $filep puthelp "NOTICE $nick :Строка была успешно сохранена. Спасибо!" }
как сделать, чтобы не добавлять, а удалять строку из файла? и еще: как перемещать строки в файле, например: вторую строку сделать 1, или 1 сделать второй?
|
|
|
|
Vladislav 14.08.12 15:55 #227
|
Про удаление строк добавил пример под номером 16. Про перемещение не буду писать готовый скрипт так как всё есть в 16-м примере, а лишь приведу пример самого действия перемещения:
Quote # К примеру команда у нас "!перенос 1 5" (первую строку на пятую), до этого мы уже прочитали файл и создали список в переменной $list # позиция элемента который переносим set plist [expr [lindex [split $text] 0]-1] # запоминаем его set alist [lindex $list $plist] # убираем его set list [lreplace $list $plist $plist] # добавляем его на нужную позицию set list [linsert $list [expr [lindex [split $text] 1]-1] $alist] осталось переписать файл
Quote <Vladislav> !tcl set text "1 5"; set list {1 2 3 4 5}; set plist [expr [lindex [split $text] 0]-1]; set alist [lindex $list $plist]; set list [lreplace $list $plist $plist]; set list [linsert $list [expr [lindex [split $text] 1]-1] $alist]; return $list <Windrop> [RETURN 0.101ms] 2 3 4 5 1
|
|
|
|
pLanu2 15.08.12 13:00 #228
|
а как сделать в скрипте
Code bind pub - !-строка com16
proc com16 {nick uhost hand chan text} { set file "baza.txt" # если команда без параметров то напоминаем их if {$text == ""} {putserv "NOTICE $nick :Формат: !-строка <номер/текст/все>"; return} # создаём файл если его нет if {![file exists $file]} {set f [open $file w+]; close $f} # читаем файл set filep [open $file r]; set list [lrange [split [read $filep] \n] 0 end-1]; close $filep # если файл пустой то сообщаем об этом if {$list == ""} {putserv "NOTICE $nick :База пуста."; return} # если указаны цифры то удаляем строку по номеру if {[string is digit $text]} { # проверяем есть ли такой номер if {$text <= [llength $list]} { # формируем новый список без этой строки set list [lreplace $list [expr $text-1] [expr $text-1]] # переписываем файл set filep [open $file w+]; foreach line $list { puts $filep $line }; close $filep # сообщаем что всё хорошо putserv "NOTICE $nick :Строка под номером $text удалена."; return } { # сообщаем что такой строки нет putserv "NOTICE $nick :Строки под номером $text не существует. Всего строк: [llength $list]."; return} } { # если указано слово "все" то чистим файл if {$text == "все"} {set f [open $file w+]; close $f; putserv "NOTICE $nick :Все строки удалены."; return} # в другом случае сравниваем строки, проверяем есть ли такая строка, если есть то получаем сразу её номер if {[set num [lsearch -exact -nocase $list $text]] != -1} { # формируем новый список без этой строки set list [lreplace $list $num $num] # переписываем файл set filep [open $file w+]; foreach line $list { puts $filep $line }; close $filep # сообщаем что всё хорошо putserv "NOTICE $nick :Строка \"$text\" удалена."; return } { # сообщаем что такой строки нет putserv "NOTICE $nick :Строки \"$text\" не существует."; return} } }
только надо изменить строку по номеру, например: !изменить 3 [текст]
|
|
|
Нужна помощь чтобы установит stats.mod а именно веб статистику
|
|
|
|
Vladislav 15.08.12 17:51 #230
|
pLanu2:
Code if {[string is digit [lindex [split $text] 0]]} { set list [lreplace $list [expr [lindex [split $text] 0]-1] [expr [lindex [split $text] 0]-1] [join [lrange [split $text] 1 end]]] }
Quote <Vladislav> !tcl set text "2 -"; set list {1 2 3 4 5}; if {[string is digit [lindex [split $text] 0]]} {set list [lreplace $list [expr [lindex [split $text] 0]-1] [expr [lindex [split $text] 0]-1] [join [lrange [split $text] 1 end]]]}; return $list <Windrop> [RETURN 0.11ms] 1 - 3 4 5
con:
в conf/stats.conf смотри (у меня нет возможности потестить параметры), статистика там убогая, я советую юзать pisg.
|
|
|
|
pLanu2 16.08.12 10:12 #231
|
Quote [15:08:04] <@HKS> проверка [15:08:04] <@HKS> почему когда я добавляю строку в файл, а потом читаю их, он выводит строки, но еще и пробел, то есть пустую строку, на которой ничего нет, когда я ее вручную удаляю из файла, он уже потом не может удалять и изменять строки, пишет строки не существует а когда я не удаляю этот пробел (пустую строку) в файле, он пишет все хорошо как сделать, чтобы он не выводил эту пустую строку (т.к. я ее не писал)?
|
|
|
|
Vladislav 16.08.12 10:18 #232
|
Когда ты редактируешь файл через бота, всегда будет пустая строка внизу. Приведи код вывода. В нём надо указать чтоб он не выводил пустые строки либо указать чтоб не выводил только последнюю. P.S: в ирклайне например пустые строки не выводит сервер)
|
|
|
|
pLanu2 16.08.12 10:48 #233
|
какое действие нужно, чтобы бот не выводил пустые строки?
|
|
|
|
Vladislav 16.08.12 10:58 #234
|
Когда идёт чтение файла:
Quote set filep [open $file r] set list [lrange [split [read $filep] \n] 0 end-1] close $filep
или перед выводом строки
Quote foreach line [split [read $filep] \n] { if {$line == ""} {continue} putserv "PRIVMSG $chan :$line" }
или так
Quote foreach line [lrange [split [read $filep] \n] 0 end-1] { putserv "PRIVMSG $chan :$line" }
а можно то и то
Quote foreach line [lrange [split [read $filep] \n] 0 end-1] { if {$line == ""} {continue} putserv "PRIVMSG $chan :$line" }
|
|
|
а как в скрипт botisaop.tcl добавить функцию чтобы бот брал себе обратно статус хопа (полуоператора) при дехопе ?
написал в скрипт:
Quote bind need - "% halfop" need:halfopwc proc need:halfopwc {chan type} { if {[channel get $chan botisaop]} { global botnick putquick "ChanServ HALFOP $chan $botnick" } } но почему-то не работает ....
|
|
|
|
Vladislav 16.08.12 17:21 #236
|
Не работает потому что в боте нет такой функции для хопа. Добавил для хопа альтернативный вариант. Обнови скрипт.
|
|
|
|
pLanu2 17.08.12 19:19 #237
|
почему, когда я добавил несколько строк, а потом хочу изменить последнюю, он пишет: такой строки нет, все строк: 4, хотя изменяю последнюю - четвертую, если например: добавлю 5 строку, то можно будет изменить 4, но 5 нельзя, будет тоже самое, и изменится она только, когда я создам 6
Code proc file {nick uhost hand chan text} { set file "data/file.txt" if {$text == ""} {putserv "NOTICE $nick :!&строка <номер> <текст>"; return} if {![file exists $file]} {set f [open $file w+]; close $f} set filep [open $file r]; set list [lrange [split [read $filep] \n] 0 end-1]; close $filep if {$list == ""} {putserv "NOTICE $nick :База пуста"; return} if {[string is digit [lindex [split $text] 0]]} { if {$text <= [llength $list]} { set list [lreplace $list [expr [lindex [split $text] 0]-1] [expr [lindex [split $text] 0]-1] [join [lrange [split $text] 1 end]]] set filep [open $file w+]; foreach line $list { puts $filep $line }; close $filep putserv "NOTICE $nick :Строка под номером $text успешно изменена"; return } { putserv "NOTICE $nick :Строки под номером $text не существует. Всего строк: [llength $list]."; return} if {[set num [lsearch -exact -nocase $list $text]] != -1} { set list [lreplace $list $num $num] set filep [open $file w+]; foreach line $list { puts $filep $line }; close $filep putserv "NOTICE $nick :Строка под номером $text успешно изменена"; return } { putserv "NOTICE $nick :Строки под номером $text не существует. Всего строк: [llength $list]."; return} } }
|
|
|
|
Vladislav 17.08.12 20:20 #238
|
Во-первых такое имя процедуры уже есть в боте подобное наслоение приведёт к ошибкам. Во-вторых тут уже два параметра задействованы в отличие от прошлых команд и это надо учитывать, в-третьих действие сверяющие по тексту тут не нужно.
Quote bind pub - !замена zamenastr
proc zamenastr {nick uhost hand chan text} { set file "data/file.txt" if {$text == "" || [lindex [split $text] 1] == ""} {putserv "NOTICE $nick :!замена <номер> <текст>"; return} if {![file exists $file]} {set f [open $file w+]; close $f} set filep [open $file r]; set list [lrange [split [read $filep] \n] 0 end-1]; close $filep if {$list == ""} {putserv "NOTICE $nick :База пуста"; return} if {[string is digit [lindex [split $text] 0]]} { if {[lindex [split $text] 0] <= [llength $list]} { set list [lreplace $list [expr [lindex [split $text] 0]-1] [expr [lindex [split $text] 0]-1] [join [lrange [split $text] 1 end]]] set filep [open $file w+]; foreach line $list { puts $filep $line }; close $filep putserv "NOTICE $nick :Строка под номером [lindex [split $text] 0] успешно изменена."; return } { putserv "NOTICE $nick :Строки под номером [lindex [split $text] 0] не существует. Всего строк: [llength $list]."; return} } }
|
|
|
|
Rorsheg 17.08.12 23:47 #239
|
Возможен ли такой скрипт?
|
|
|
|
Vladislav 18.08.12 00:35 #240
|
Цитата bind pub - !текст wtextoutput
proc wtextoutput {nick uhost hand chan text} { set file "baza.txt" if {![file exists $file]} {return} set filep [open $file r]; set line [split [read $filep] \n]; close $filep if {[llength $line] >= 24} {putserv "PRIVMSG $chan :[lindex $line 24]"} }
или
Цитата bind pub - !текст wtextoutput
proc wtextoutput {nick uhost hand chan text} { set file "baza.txt" if {![file exists $file]} {return} set filep [open $file r] set i 0; foreach line [split [read $filep] \n] { if {$i == 24} {putserv "PRIVMSG $chan :$line"} incr i } close $filep }
|
|
|