Quiz.tcl обрезает вопросы до одного (первого) слова

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

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

Quiz.tcl обрезает вопросы до одного (первого) слова

Сообщение Pitstopper » 03 фев 2014 14:56

Здравствуйте, уважаемые! Есть скомпиленный бот Eggdrop 1.6.21 (скомпилен с поддержкой tcl 8.6) и викторина Quiz.tcl (модификация v1.15 by Kreon, на основе v2.0.4 by hex and Drakon, не-MySQL версия игры, Lite-издание.) , взятая с вашего сайта. С некоторых пор викторина стала задавать некоторые вопросы одним словом. В базе - нормальный вопрос. Викторина задает его, но он состоит из одного слова.
Подскажите, граждане, где может быть подвох? Что я делаю не так?
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

Сообщение tvrsh » 03 фев 2014 18:05

Случайный вопрос выбирается этой частью кода в процедуре ::tpub::question:
TCL: [ Скачать ] [ Скрыть ]
                "get" {
                        # random question
                        if {![info exists qpos] || ![llength $qpos]} {
                                putlog "Out of questions, rehashing..."
                                if {![question rehash]} {
                                        putlog "No questions available, eek."
                                        return {}
                                }
                        }
                        set idx [expr int(rand() * [llength $qpos])]
                        set fpos [lindex $qpos $idx]
                        set qpos [lreplace $qpos $idx $idx]

                        if {[catch {open $conf(fnquestions) r} fileID]} { return {} }
                        seek $fileID $fpos start
                        set line [gets $fileID]
                        set line [split [string trim $line] |]
                        set line "[toupper [string range $line 0 0]][string range $line 1 end]"
                        close $fileID
                        lappend game(qid2qpos) "$game(qid) $fpos"
                        return [list [lindex $line 0] [split [lrange $line 1 end] ,]]
                }

Код возвращает список из двух элементов, в первом сам вопрос, во втором ответ на него. Попробуй закомментировать строку
                        set line "[toupper [string range $line 0 0]][string range $line 1 end]"

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

Сообщение Pitstopper » 03 фев 2014 22:40

Спасибо за помощь. Сейчас проверить работоспособность не могу, но завтра обязательно. По результатам отпишусь.
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

Сообщение Pitstopper » 04 фев 2014 09:47

Попробовал, закомментировал эту строку. Не сработало. Так и продолжает задавать вопросы одним словом.
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

Сообщение tvrsh » 04 фев 2014 18:25

У тебя база в обычном формате "Вопрос?|ответ"?
Попробуй весь код заменить на это:
TCL: [ Скачать ] [ Скрыть ]
                "get" {
                        # random question
                        if {![info exists qpos] || ![llength $qpos]} {
                                putlog "Out of questions, rehashing..."
                                if {![question rehash]} {
                                        putlog "No questions available, eek."
                                        return {}
                                }
                        }
                        set idx [expr int(rand() * [llength $qpos])]
                        set fpos [lindex $qpos $idx]
                        set qpos [lreplace $qpos $idx $idx]

                        if {[catch {open $conf(fnquestions) r} fileID]} { return {} }
                        seek $fileID $fpos start
                        set line [gets $fileID]
                        close $fileID
                        lappend game(qid2qpos) "$game(qid) $fpos"
                        return [split [string trim $line] "|"]
                }
 
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: Quiz.tcl обрезает вопросы до одного (первого) слова

Сообщение Pitstopper » 05 фев 2014 08:47

Да, база в обычном формате. Заменил код на ваш кусок - результат нулевой. Попробую потавить другую викторину. Посмотрю на результат.

P.S. - забыл добавить. Всё это началось, когда я пересобрал бота с поддержкой TCL 8.6. Библиотеки собирал локально, в домашней папке, конфигурил бота по readme в папке с ботом. Всё заработало, а вот викторинка - нет.
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

Сообщение Pitstopper » 05 фев 2014 10:20

Попробовал поставить другую викторину - ту, которая Викторина v2.4 модификация v1.8 by Sergio + new addons. Та же печаль. Видимо, дело не в викторинах, а в какой-то связке моего бота с TCL 8.6. Потому как без TCL 8.6 всё работает... Кроме обработчика ссылок etitle.tcl. Ради него только и затеялся собирать бота с TCL. Подскажите, граждане, как же ж быть жеж? Что "покрутить" чтобы либо завести викторинку, либо поиметь обработчик ссылок типа etitle.tcl, но без необходимости TCL 8.6?
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: Quiz.tcl обрезает вопросы до одного (первого) слова

Сообщение tvrsh » 05 фев 2014 18:07

Попробуй title_pub.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


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

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

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

cron