topic.tcl

Решение вопросов при работе с TCL скриптами.

Модератор: Модераторы

topic.tcl

Сообщение НеоспоримыыЙ » 26 апр 2011 14:20

Есть скрипт для смены топика по таймеру
Вот он:
Код: Выделить всё
# Автокоманда действия
bind time - "?10 * * * *" com4
bind time - "?0 * * * *" com4

# Процедура действия
proc com4 {min hour day month year} {
set com4rand [::egglib::readdata data/basa.txt]
putserv "topic #канал :[lindex $com4rand [rand [llength $com4rand]]]"
}
bind pub - !add com6
proc com6 { nick uhost hand chan text } {
if {$text == ""} {putserv "NOTICE $nick :Формат: !add <текст>"; return}
set info [lindex $text]
set file [open data/basa.txt a+]
puts $file "$info"
close $file
puthelp "NOTICE $nick :Строка была успешно сохранена. Спасибо!"
}

Прошу помочь сделать что бы при сохранении строки он давай ей определенный номер, что бы смена топика тем самым шла по порядку, а не в разноброс, хотелось бы еще сделать команду для удаления какой либо строки и хотелось бы сделать команду добавления юзеров по работе со скриптом( добавление, удаление, редактирование топиков).
Зранее благодарю!
Аватара пользователя
НеоспоримыыЙ
 
Сообщения: 39
Зарегистрирован: 16 фев 2011 13:29
Откуда: Якутск
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: topic.tcl

Сообщение tvrsh » 26 апр 2011 21:46

А воспользоваться уже готовым скриптом не вариант?
randtopic2.04.tcl
А вот тут целая гора скриптов для работы с топиками.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: topic.tcl

Сообщение НеоспоримыыЙ » 27 апр 2011 12:40

просто это мой первый скрипт с работой с топиком, хотелось бы его попробывать до делать, а ума что та не хватает:(
randtopic2.04.tcl я пробывал уже настраивать, но все без успешно, то топики не меняются нормально, то время смены меняется... а за вторую ссылку большое спасибо.
Аватара пользователя
НеоспоримыыЙ
 
Сообщения: 39
Зарегистрирован: 16 фев 2011 13:29
Откуда: Якутск
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: topic.tcl

Сообщение tvrsh » 28 апр 2011 17:35

Вот процедура добавления в фалй и присвоения каждой строке индекса/номера.
TCL: [ Скачать ] [ Скрыть ]
bind pub o|o !add add
proc add {nick uhost hand chan text} {

    # Тут считываем данные из файла в переменную data.
    set fname "yourfile.txt"
    set fp [open $fname "r"]
    set data [read -nonewline $fp]
    close $fp

    # Устанавливаем индекс строки который равен количеству строк.
    set index [llength [split $data "\n"]]
    set fp [open $fname "a+"]

    # При записи в файл увеличиваем индекс на 1.
    puts $fp "[expr $index + 1]|$text"
    close $fp
    putserv "PRIVMSG $chan :$nick, твоя строка $text добавлена с индексом [expr $index + 1]."
}


<tvrsh> !add a
<@bionic> tvrsh, твоя строка a добавлена с индексом 1.
<tvrsh> !add b
<@bionic> tvrsh, твоя строка b добавлена с индексом 2.
...
<tvrsh> !add e
<@bionic> tvrsh, твоя строка e добавлена с индексом 5.


И в файле yourfile.txt в корне бота имеем такое
1|a
2|b
3|c
4|d
5|e


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

Добавлено спустя 23 минуты 36 секунд:
TCL: [ Скачать ] [ Скрыть ]
# Указываем канал.
set _chan "#erotic"

# и начальный индекс топика. Это менять не надо.
set index 0

bind time - "* * * * *" topic
proc topic {min hour day month year} {
global index _chan
    set fname "yourfile.txt"
    set fp [open $fname "r"]
    set data [read -nonewline $fp]
    close $fp
    # Считываем данные из файла и показываем индексный топик по счету.
    putserv "TOPIC $_chan :[lindex [split $data "\n"] $index]"
    # после чего увеличиваем индекс.
    incr index
}

# Процедура добавления строк.
bind pub o|o !add add
proc add {nick uhost hand chan text} {
    set fname "yourfile.txt"
    set fp [open $fname "a+"]
    puts $fp "$text"
    close $fp
    putserv "PRIVMSG $chan :$nick, строка $text добавлена."
}

# Процедура удаления строк. Для удаления указывай точный текст строки.
bind pub o|o !del del
proc del {nick uhost hand chan text} {
    set fname "yourfile.txt"
    set fp [open $fname "r"]
    set data [read -nonewline $fp]
    close $fp
    set index 0
    set nomer ""
    foreach line [split $data "\n"] {
        incr index
        if {$line == $text} {
            set nomer [expr $index - 1]
        }
    }

    if {$nomer != ""} {
        set data [lreplace [split $data "\n"] $nomer $nomer]
    } else {
        putserv "PRIVMSG $chan :$nick, строка $text не найдена в базе."
        return 0
    }

    set fp [open $fname "w"]
    puts $fp [join $data "\n"]
    close $fp

    putserv "PRIVMSG $chan :$nick, строка $text удалена."
}


<tvrsh> !del c
<@bionic> tvrsh, строка c удалена.
* bionic changes topic to 'a'
* bionic changes topic to 'b'
* bionic changes topic to 'd'
...


Не хватает только всяких проверок на пустую строку и типо того, но это уж сам дописывай.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: topic.tcl

Сообщение НеоспоримыыЙ » 03 май 2011 14:58

хорошо, большое спасибо за помощь.
Аватара пользователя
НеоспоримыыЙ
 
Сообщения: 39
Зарегистрирован: 16 фев 2011 13:29
Откуда: Якутск
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21


Вернуться в TCL скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron