Скрипт меняющий топик по таймеру.

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

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

Скрипт меняющий топик по таймеру.

Сообщение NeiLL » 20 ноя 2011 14:50

У меня скрипт меняющий топик по таймеру и из списка берет рандом т.е. случайно. и хотелось бы чтоб он брал по списку начиная с 1 по n .... Помогите решить этот вопрос. За ранее благодарю.

namespace eval randtopic {

# файл с текстом, откуда брать случайную строчку для топика
variable file "file.txt"

# канал, в котором будет вестись смена топика
variable channel "#suntar"

if {![file readable $file]} {
set f [open $file w+]
close $f
}


bind time - {* * * * *} [namespace current]::change


proc change {mins hours days months years} {
variable file
variable channel
# проверяем время (300 секунд это 5 минуты)
# следующая строчка делит без остатка текущее значение минут,
# которое передается в процедуру по бинду. если остаток ноль,
# значит минуты равны 0, 10, 20 и т.д.
if {[expr $mins % 180] == "0"} {
# открываем файл на чтение
set f [open $file r]
# читаем файл
set data [split [read $f] \n]
# закрываем файл
close $f
# получаем случайную строчку
set line [lindex $data [rand [llength $data]]]
# меняем топик
putserv "TOPIC $channel :$line"
}
}

putlog "randtopic.tcl loaded"
}
NeiLL
 
Сообщения: 14
Зарегистрирован: 10 ноя 2011 18:00
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия бота: Windrop 1.6.21

Re: Помогите скриптом меняющий топик по таймеру.

Сообщение tvrsh » 22 ноя 2011 10:55

При каждом изменении топика записывает в начало файла номер строки, которая станет топиком в следующий раз. Когда номер строки станет равным или больше общего количества строк в файле, то начнет опять с первой строки.
TCL: [ Скачать ] [ Скрыть ]
namespace eval randtopic {

    # файл с текстом, откуда брать случайную строчку для топика
    variable file "file.txt"

    # канал, в котором будет вестись смена топика
    variable channel "#suntar"

    if {![file readable $file]} {
        set f [open $file w+]
        close $f
    }


    bind time - {* * * * *} [namespace current]::change


    proc change {mins hours days months years} {
        variable file
        variable channel

        # проверяем время (300 секунд это 5 минуты)
        # следующая строчка делит без остатка текущее значение минут,
        # которое передается в процедуру по бинду. если остаток ноль,
        # значит минуты равны 0, 10, 20 и т.д.
        if {[expr $mins % 180] == "0"} {
            set data [::egglib::readdata "$file"]
            if {[isnumber [lindex $data 0]]} {
                set data2 [lrange $data 1 end]
                putserv "TOPIC $channel :[lindex $data2 [lindex $data 0]]"
                set counter [expr [lindex $data 0] + 1]
                if {$counter >= [llength $data2]} {
                    set counter 0
                }
                set data2 [linsert $data2 0 $counter]
                ::egglib::writedata "$file" $data2
            } else {
                putserv "TOPIC $channel :[lindex $data 0]"
                set data [linsert $data 0 "1"]
                ::egglib::writedata "$file" $data
            }
        }
    }

putlog "randtopic.tcl loaded"
}
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: Помогите скриптом меняющий топик по таймеру.

Сообщение NeiLL » 22 ноя 2011 13:25

Спасибо огромное!!!! ;)

Добавлено спустя 39 минут 36 секунд:
Тут что то не так!!! поставил на 30 минут и выводит по 2 топика:
вот результат
•(18:30:00)• * BotNet изменил топик на '2 2 2'
•(18:30:00)• * BotNet изменил топик на '5 5 5'
•(19:00:00)• * BotNet изменил топик на '3 3 3'
•(19:00:01)• * BotNet изменил топик на '6 6 6'
NeiLL
 
Сообщения: 14
Зарегистрирован: 10 ноя 2011 18:00
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Версия бота: Windrop 1.6.21

Re: Скрипт меняющий топик по таймеру.

Сообщение tvrsh » 24 ноя 2011 16:44

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


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

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

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

cron