Дорабатываем calc.tcl

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

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

Дорабатываем calc.tcl

Сообщение tvrsh » 20 июн 2010 12:13

calc.tcl - Система хранения записок на боте с поддержкой их линковки. База ведется отдельно для каждого канала.
В скрипте есть команда поиска кальков по ключевому слову. В дефолтной версии скрипта результатом такого поиска является первый найденный кальк:
#egghelp @ IrcNet.ru писал(а): <@tvrsh> !findcalc eggdrop
<@lamestbot> эггдроп = eggdrop [tvrsh]
<@tvrsh> !findcalc *eggdrop*
<@lamestbot> эггдроп = eggdrop [tvrsh]

Сегодня мы сделаем так, чтобы в результате отображался список всех кальков удовлетворяющих поисковому запросу.
Откройте скрипт и найдите в нем процедуру ::calc::findcalc
Рассмотрим в нем данное условие:
TCL: [ Скачать ] [ Скрыть ]
        foreach cdata $chandata {
                if {[string match [::calc::tolower $mask] [::calc::tolower [lindex $cdata 4]]]} {
                        set res $cdata
                        break
                }
        }

Тут перебираются все кальки данного канала, и при первом совпадении с поисковым запросом цикл прерывается. Нам надо, чтобы цикл поиска совпадающих кальков продолжался и дальше. Для этого заменяем
                        set res $cdata
                        break
на
        lappend res [lindex $cdata 3]

Далее нам надо изменить способ вывода результатов. Замените
        if {$res != ""} {::calc::out $nick $chan "[lindex $res 3] = [lindex $res 4] \[[lindex $res 1]\]"
        } else {::calc::out $nick $chan "Кальк не найден..."}
на
        if {$res != ""} {::calc::out $nick $chan "По маске '$mask' [lindex {. найден найдено найдены} [::calc::numgrp [llength $res]]] [llength $res] [lindex {. кальк калька кальков} [::calc::numgrp [llength $res]]]: [join $res ", "]."
        } else {::calc::out $nick $chan "По маске '$mask' кальки не найдены..."}
и в конец скрипта добавте эту процедуру:
TCL: [ Скачать ] [ Скрыть ]
 proc ::calc::numgrp {number} {
    switch -glob -- "$number" {
        *11 {return 3}
        *12 {return 3}
        *13 {return 3}
        *14 {return 3}
        *1 {return 1}
        *2 {return 2}
        *3 {return 2}
        *4 {return 2}
        default {return 3}
    }
}

В измененном способе выводы мы полученный список кальков разделяем запятыми и выводим его в канал:
#egghelp @ IrcNet.ru писал(а): <@tvrsh> !findcalc eggdrop
<@lamestbot> * По маске 'eggdrop' найден 1 кальк: эггдроп.
<@tvrsh> !findcalc *eggdrop*
<@lamestbot> * По маске '*eggdrop*' найден 121 кальк: эггдроп, statstcl, bseen, погода, ping, ...
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.

За это сообщение автора tvrsh поблагодарил:
Blans (14 сен 2012 21:43)
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Дорабатываем calc.tcl

Сообщение tvrsh » 20 июн 2010 12:43

Если вам нужно знать время добавления калька, то откройте скрипт и найдите в нем процедуру ::calc::showcalc
Найдите в ней строку
                 if {$res != ""} {::calc::out $nick $chan "\00304*\003 [lindex $first 0] = [lindex $res 4] \[[lindex $res 1]\]"
и после нее добавьте
                ::calc::out $nick $chan "\00304*\003 Добавлен [clock format [lindex $res 2] -format "%d.%m.%Y - %I:%M:%S"]."
ниже найдите строки
                } else {set res [::calc::getbyname [lindex [::calc::randomdata] 3] ""]}
                ::calc::out $nick $chan "\00304*\003 [lindex $res 3] = [lindex $res 4] \[[lindex $res 1]\]"
и после них добавьте
                ::calc::out $nick $chan "\00304*\003 Добавлен [clock format [lindex $res 2] -format "%d.%m.%Y - %I:%M:%S"]."

Теперь кальки будут показываться вот так:
#egghelp @ IrcNet.ru писал(а): <@tvrsh> man eggdrop
<@lamestbot> * eggdrop = Скачать архив бота(handlen32) с исправлением отображения версии в ботнете и с модулями gseen, stats, social: http://www.ircnet.su/files/eggdrop1.6.19+ctcpfix+(gseen+stats+social).mod.tgz Для установки бота смотри !calc install [tvrsh]
<@lamestbot> * Добавлен 26.05.2009 - 09:25:45.
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: Дорабатываем calc.tcl

Сообщение tvrsh » 04 фев 2012 12:09

Чтобы при анонсе кальков была возможность выбирать в каком порядке их показывать, надо сделать следующее:
В настройки добавляем строки
# random calcs in announcements? (1/0)
set calc(random)        1
 

Далее, в процедуре ::calc::randomdata заменяем
TCL: [ Скачать ] [ Скрыть ]
                set rnum [rand [llength $chandata]]
                set num 0
                foreach cdata $chandata {
                        if {$num == $rnum} {return $cdata}
                        incr num
                }
на
TCL: [ Скачать ] [ Скрыть ]
        if {$calc(random) == "0"} {
            if {[info exists calc(num)] && $calc(num) != "" && $calc(num) <= [expr [llength $chandata] - 1]} {
                incr calc(num)
                return [lindex $chandata $calc(num)]
            } else {
                set calc(num) 0
                return [lindex $chandata $calc(num)]
            }
        } else {
                set rnum [rand [llength $chandata]]
                set num 0
                foreach cdata $chandata {
                        if {$num == $rnum} {return $cdata}
                        incr num
                }
            }


Теперь можно выбирать, выводить случайные кальки, или в порядке добавления в базу.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.

За это сообщение автора tvrsh поблагодарил:
ayaal_86 (04 фев 2012 12:30)
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Дорабатываем calc.tcl

Сообщение Blans » 14 сен 2012 21:42

Скрипт вообще отличный :) За дополнения спасибо :)
Blans
 
Сообщения: 10
Зарегистрирован: 07 май 2009 21:59
Откуда: Irkutsk
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Дорабатываем calc.tcl

Сообщение Bart » 04 окт 2015 09:43

tvrsh писал(а):
if {$res != ""} {::calc::out $nick $chan "По маске '$mask' [lindex {. найден найдено найдены} [::calc::numgrp [llength $res]]] [llength $res] [lindex {. кальк калька кальков} [::calc::numgrp [llength $res]]]: [join $res ", "]."
        } else {::calc::out $nick $chan "По маске '$mask' кальки не найдены..."}

Если искать по маске *, то будет вывод из всех кальков. Как можно сделать, например, По маске 'https*' найдено 11 кальков, показаны первые 10: варианты...
Аватара пользователя
Bart
 
Сообщения: 24
Зарегистрирован: 05 фев 2014 01:35
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi

Re: Дорабатываем calc.tcl

Сообщение Vertigo » 04 окт 2015 09:54

Bart писал(а): Как можно сделать, например, По маске 'https*' найдено 11 кальков, показаны первые 10

Заменить
if {$res != ""} {::calc::out $nick $chan "По маске '$mask' [lindex {. найден найдено найдены} [::calc::numgrp [llength $res]]] [llength $res] [lindex {. кальк калька кальков} [::calc::numgrp [llength $res]]]: [join $res ", "]."

на
TCL: [ Скачать ] [ Скрыть ]
if {$res != ""} {
if {[llength $res] > 10} {
::calc::out $nick $chan "По маске '$mask' [lindex {. найден найдено найдены} [::calc::numgrp [llength $res]]] [llength $res] [lindex {. кальк калька кальков} [::calc::numgrp [llength $res]]], показаны первые 10: [join [lrange $res 0 9] ", "]."
} else {
::calc::out $nick $chan "По маске '$mask' [lindex {. найден найдено найдены} [::calc::numgrp [llength $res]]] [llength $res] [lindex {. кальк калька кальков} [::calc::numgrp [llength $res]]]: [join $res ", "]."}

За это сообщение автора Vertigo поблагодарил:
Bart (04 окт 2015 11:00)
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8


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

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

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

cron