Страница 1 из 1

Скрипт заявок на Бнц

СообщениеДобавлено: 04 мар 2010 00:09
John
Есть предложение: написать скрипт заявки на бнц-аккуанты, т.е человек подает заявку, бот записывает её в .txt файл или генерить на html страницу, после чего администраторы бнц будут просматривать заявки на бнц-аккуанты

Re: Бнц

СообщениеДобавлено: 05 мар 2010 10:52
tvrsh
А если попробовать переделать claim.tcl?

Re: Бнц

СообщениеДобавлено: 05 мар 2010 19:39
John
Пробовал, но получилось "херово". Если вам не трудно, не могли бы вы его переделать?

Re: Бнц

СообщениеДобавлено: 06 мар 2010 11:13
tvrsh
Трудно. Лучше написать что-нибудь попроще.
+bnc - оставляет заявку на добавление бнц. В файл сохраняется Ник(Идент) написавшего юзера.
!заявки - просмотр всех оставленных заявок, доступна только операторам.
Добавь в корень бота файл bnc.txt
TCL: [ Скачать ] [ Скрыть ]
bind pub - +bnc bnc_add
proc bnc_add { nick uhost hand chan text } {
    set bfile [open bnc.txt r]
    set data [read $bfile]
    close $bfile
    foreach user [split $data "\n"] {
        if { $nick == [lindex [split $user "|"] 0] } {
            putserv "PRIVMSG $nick :$nick, вы уже оставляли заявку."
            return
        }
    }
    set bfile [open bnc.txt a]
    puts $bfile "$nick|[lindex [split $uhost "@"] 0]"
    close $bfile
}
bind pub o|o !заявки bnc_view
proc bnc_view {nick uhost hand chan text } {
    set bfile [open bnc.txt r]
    set data [read $bfile]
    close $bfile
    set blist [list]
    foreach user [split $data "\n"] {
        lappend blist "$user, "
    }
    putserv "PRIVMSG $chan :$nick, список осталенных заявок Ник|Идент:"
    putserv "PRIVMSG $chan :[string trim [join $blist] ","]."
}


Не проверял. Возможно будут ошибки.

Re: Бнц

СообщениеДобавлено: 06 мар 2010 16:26
John
puts $f $nick([lindex [split $uhost "@"] 0])
Круглые скобки лишние, ибо из-за них бот заявки не принимает. А так все отлично, спасибо за помощь.

Re: Бнц

СообщениеДобавлено: 06 мар 2010 16:29
tvrsh
Почему лишние? Покажи какую ошибку пишет с ними.

Re: Бнц

СообщениеДобавлено: 07 мар 2010 18:39
John
[15:07] Tcl error [bnc_add]: can't read "nick(Rocket)": variable isn't array

Re: Скрипт заявок на Бнц

СообщениеДобавлено: 07 мар 2010 19:35
tvrsh
В этой версии к команде !заявки добавлены два параметра, list и del.
!заявки list - просмотр всех оставленных заявок.
!заявки del <номер> - удаления заявки под указанным номером.
TCL: [ Скачать ] [ Скрыть ]
bind pub - +bnc bnc_add
proc bnc_add { nick uhost hand chan text } {
    set bfile [open bnc.txt r]
    set data [read $bfile]
    close $bfile
    foreach user [split $data "\n"] {
        if { $nick == [lindex [split $user "|"] 0] } {
            putserv "PRIVMSG $nick :$nick, вы уже оставляли заявку."
            return
        }
    }
    set bfile [open bnc.txt a]
    puts $bfile "$nick|[lindex [split $uhost "@"] 0]"
    close $bfile
    putserv "PRIVMSG $nick :$nick, ваша заявка на добавление бнц принята."
}

bind pub o|o !заявки bnc_view
proc bnc_view {nick uhost hand chan text } {
    switch [lindex [split $text] 0] {
        "list" {
            set bfile [open bnc.txt r]
            set data [read $bfile]
            close $bfile
            set blist [list]
            foreach user [split $data "\n"] {
                lappend blist "$user, "
            }
            putserv "PRIVMSG $chan :$nick, список осталенных заявок Ник|Идент:"
            putserv "PRIVMSG $chan :[string trim [join $blist] ","]."
            }
        "del" {
            set bfile [open bnc.txt r]
            set data [read $bfile]
            close $bfile
            set delline [expr [lindex [split $text] 1] - 1]
                if {$delline < 1 || $delline > [llength [split $data "\n"]] || ![isnumber $delline]} {
                    putserv "PRIVMSG $chan :$nick, не верно указан номер заявки."
                }
            set lines [split $data "\n"]
            proc K {x y} { set x }
            set lines [lreplace [K $lines [set lines {}]] $delline $delline]
            set bfile [open bnc.txt w]
            puts bfile [join $lines "\n"]
            close $bfile
            putserv "PRIVMSG $chan :$nick, заявка №$delline удалена."
            }
    }
}

Не тестировалось, возможны ошибки.

Re: Скрипт заявок на Бнц

СообщениеДобавлено: 08 мар 2010 20:09
John
Нету переменной
$line_to_delete

Re: Скрипт заявок на Бнц

СообщениеДобавлено: 08 мар 2010 20:12
tvrsh
Замени на $delline. Обновил предыдущий пост.

Re: Скрипт заявок на Бнц

СообщениеДобавлено: 08 мар 2010 20:29
John
Заменял, толку нету пишет: [19:28] Tcl error [bnc_view]: can not find channel named "bfile"

Re: Скрипт заявок на Бнц

СообщениеДобавлено: 08 мар 2010 21:01
tvrsh
TCL: [ Скачать ] [ Скрыть ]
bind pub - +bnc bnc_add
proc bnc_add { nick uhost hand chan text } {
    set bfile [open bnc.txt r]
    set data [read $bfile]
    close $bfile
    foreach user [split $data "\n"] {
        if { $nick == [lindex [split $user "|"] 0] } {
            putserv "PRIVMSG $nick :$nick, вы уже оставляли заявку."
            return
        }
    }
    set bfile [open bnc.txt a]
    puts -nonewline $bfile "$nick|[lindex [split $uhost "@"] 0]"
    close $bfile
    putserv "PRIVMSG $nick :$nick, ваша заявка на добавление бнц принята."
}

bind pub o|o !заявки bnc_view
proc bnc_view {nick uhost hand chan text } {
global lastbind
    switch [lindex [split $text] 0] {
        "list" {
            set bfile [open bnc.txt r]
            set data [read $bfile]
            close $bfile
            set blist [list]
            foreach user [split $data "\n"] {
                if {$user != ""} {
                    lappend blist "$user, "
                }
            }
            if {$blist != ""} {
                putserv "PRIVMSG $chan :$nick, список осталенных заявок Ник|Идент:"
                putserv "PRIVMSG $chan :[string trim [join $blist] " ,"]."
                } else {
                putserv "PRIVMSG $chan :$nick, никто не оставил заявок."
                }
            }
        "del" {
            set bfile [open bnc.txt "r"]
            set data [read $bfile]
            close $bfile
            putlog $data
            set delline [expr [lindex [split $text] 1] - 1]
            putlog $delline|[llength [split $data "\n"]]
                if {[lindex [split $text] 1] < 1 || [lindex [split $text] 1] > [llength [split $data "\n"]] || ![isnumber $delline]} {
                    putserv "PRIVMSG $chan :$nick, не верно указан номер заявки."
                    return
                }
            set lines [split $data "\n"]
            proc K {x y} { set x }
            set lines [lreplace [K $lines [set lines {}]] $delline $delline]
            set bfile [open bnc.txt "w"]
            puts -nonewline $bfile [join $lines "\n"]
            close $bfile
            putserv "PRIVMSG $chan :$nick, заявка №[expr $delline + 1] удалена."
            }
        default {
            putserv "PRIVMSG $chan :$nick, используй $lastbind list или $lastbind del."
            }
    }
}

Предложения по улучшению приветствуются.