Помощь в написании скрипта.

Просьбы о написании новых скриптов или поиске уже существующих.

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

Помощь в написании скрипта.

Сообщение PsyDuck » 21 мар 2009 21:36

В написании скриптов для ирковских ботов, я вообще очень мало что понимаю.
По этому был бы безмерно благодарен, если бы мне помогли осуществить следующий скрипт.
Суть:

При написании игроком (Nick1) фразы-триггера "+add"
Бот пишет строчку вида: Nick1 /

Далее игрок номер два (Nick2) тоже пишет "+add"
Бот выдает строчку вида: Nick1 / Nick 2

Этот процесс продолжается, до 9 участников.

На 9 участнике:

Nick9: +add
Bot: Заявка сформирована.
Bot: Nick1 / Nick2 / Nick3
Bot: Nick4 / Nick5 / Nick6
Bot: Nick7 / Nick8 / Nick9

Как уже было сказано, на 9м участнике выскакивает табличка.
Список обнуляется. Набор начинается заново.

Другие команды:
-rem удаляет из списка
-stat показывает текущий список

Один никнейм, не может быть записан более 1 раза в 1 заявке.
Право записи есть у всех, кто на канале.

Заранее спасибо.
PsyDuck
 
Сообщения: 2
Зарегистрирован: 21 мар 2009 21:21
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Помощь в написании скрипта.

Сообщение Deniska » 21 мар 2009 22:55

Мой вариант реализации.
Код: Выделить всё
bind pub - "+add" add_user
bind pub - "-rem" rem_user
bind pub - "-stat" stat_user
 
proc add_user { nick uhost hand chan text } {
    #Наш файл с пользователями
    set f "users.txt"
    #Если файл еще не создан - список пользователей пуст
    if { ![file isfile $f] } {
        set users ""
    } else {
        #Если файл существует - считываем из него содержимое
        set h [open $f r]
        set users [split [read -nonewline $h] \n]
        close $h
    }
 
    #Добавляем пользователя в список
    set users [linsert $users end $nick]
   
    #Если это девятый пользователь
    if { [llength $users] == 9 } {
        putquick "privmsg $chan :Заявка сформирована."
        #Выводим итоговой список пользователей
        display_users $users $chan
        #Очищаем файл с пользователями
        set h [open $f w]
        close $h
    } else {
        #Иначе записываем новый список пользователей в файл
        set h [open $f w]
        puts $h [join $users \n]
        flush $h
        close $h
 
        #Отображаем текущий список пользователей
        display_users $users $chan
    }
}
 
proc rem_user { nick uhost hand chan text } {
    #Наш файл с пользователями
    set f "users.txt"
    #Если файл еще не создан - список пользователей пуст
    if { ![file isfile $f] } {
        set users ""
    } else {
        #Если файл существует - считываем из него содержимое
        set h [open $f r]
        set users [split [read -nonewline $h] \n]
        close $h
    }
   
    set found [lsearch -exact $users $nick]
    if { $found == -1 } {
        putquick "privmsg $chan :$nick отствует в списке."
        return
    }
   
    set h [open $f w]
    puts $h [join [lreplace $users $found $found] \n]
    flush $h
    close $h
    putquick "privmsg $chan :$nick удален из списка."
}
 
proc stat_user { nick uhost hand chan text } {
    #Наш файл с пользователями
    set f "users.txt"
    #Если файл еще не создан - список пользователей пуст
    if { ![file isfile $f] } {
        set users ""
    } else {
        #Если файл существует - считываем из него содержимое
        set h [open $f r]
        set users [split [read -nonewline $h] \n]
        close $h
    }
 
    if { $users == "" } {
        putquick "privmsg $chan :Список пуст."
        return
    }
    display_users $users $chan
}
 
proc display_users { users chan } {
    set output ""
    for { set i 0 } { $i < [llength $users] } { incr i } {
        if { [expr ($i+1)%3] != 1 } {
            append output " / "
        }
        append output [lindex $users $i]
        if { ( [expr ($i+1)%3] == 0 ) || ( $i == [expr [llength $users]-1] )} {
            putquick "privmsg $chan :$output"
            set output ""
        }
       
    }
}


EDIT:
Удалил 2 лишних строчки. Использовались для отладки скрипта. Это строка
Код: Выделить всё
set nick [lindex $text 0]

Вначале процедур add_user и rem_user.
Аватара пользователя
Deniska
 
Сообщения: 19
Зарегистрирован: 22 сен 2008 09:29
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Помощь в написании скрипта.

Сообщение PsyDuck » 22 мар 2009 17:13

Спасибо огромное.
PsyDuck
 
Сообщения: 2
Зарегистрирован: 21 мар 2009 21:21
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.


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

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

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

cron