Исправляем ошибки в tcs.tcl

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

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

Исправляем ошибки в tcs.tcl

Сообщение tvrsh » 10 янв 2010 17:06

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

Ошибка составления маски при бане пользователя с длинным идентом.
Рассмотрим на примере:
[15:15:19] * bantest (1234567890@212.152.28.ircnet-22826) has joined #egghelp
[15:15:36] <tvrsh> !ban bantest
[15:15:36] * bionic sets mode: +b *!23456789@212.152.28.*

Если мы явно не указываем маску бана для юзера с максимальной длинной идента(10 символов) то скрипт обрезает его первый и последний символы и ошибочно не выставляет * по краям идента.

Чтобы это исправить найдите в скрипте процедуру makemask и в ней строку
if { ($maskmode != 2) && ($maskmode != 3) && ($maskmode != 4) } { return "*![lindex [split $userhost "@"] 0]@[lindex [split [maskhost $userhost] "@"] 1]" }
в которой исправьте
return "*![lindex [split $userhost "@"] 0]@[lindex [split [maskhost $userhost] "@"] 1]"
на
return "*!*[lindex [split $userhost "@"] 0]*@[lindex [split [maskhost $userhost] "@"] 1]"

Теперь сохраняем скрипт и рехашим бота.
После этого мы получаем следующее:
[15:57:36] * bantest (1234567890@212.152.28.ircnet-22826) has joined #egghelp
[15:57:46] <tvrsh> !ban bantest
[15:57:46] * bionic sets mode: +b *!*23456789*@212.152.28.*
[15:57:46] -NOTICE- <bionic> Перманентный бан *!*23456789*@212.152.28.* на канале #egghelp . Причина: not welcome
[15:57:46] * bantest was kicked by bionic (Banned: not welcome)

Работает.
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: Исправляем ошибки в tcs.tcl

Сообщение tvrsh » 10 янв 2010 17:18

Ошибка в команде !banlist

При попытке просмотреть в привате бота список банов получаем такой результат:
[16:13:49] <tvrsh> !banlist #egghelp all
[16:13:49] <bionic> No Such Channel. Нет такого канала: {#egghelp


Как исправить:
Откройте скрипт и найдите в нем процедуру transchan и в ней, в регсаб
regsub -all {([№\~\:\"\,\}])+} $itext "" itext
допишите \{, чтобы получилось так:
regsub -all {([№\~\:\"\,\}\{])+} $itext "" itext

Сохраняем скрипт, рехашим бота и проверяем что получилось:
[16:15:44] <tvrsh> !banlist #egghelp all
[16:15:44] <bionic> Глобальные баны:
[16:15:44] <bionic> *!*FaRs*@217.150.45.21 - by bionic (Created: Mon Dec 28 09:04:26 2009 ) Last Used: Never ::: Expire: Sun Mar 7 19:44:26 2010 ::: Reason: F*king inviter
...
[16:15:48] <bionic> Конец списка.

Работает.
По мотивам http://forum.eggdrop.org.ru/index.php?showtopic=3253
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: Исправляем ошибки в tcs.tcl

Сообщение tvrsh » 13 янв 2010 18:14

Следующий пункт нашей программы.

Разбиваем строки про 400 символов в каждой.
Лично меня это коснулись при просмотре списка хостов у викторинных игроков. Как правило хостов много и в одну строку они не помещаются.

Изначально многострочный вывод в скрипте не реализован. Придется делать самим.
Открываем скрипт и находим процедуру out_msg. Перед ней вставляем такой код:
TCL: [ Скачать ] [ Скрыть ]
    # Получаем того, кому отсылать текст, сам текст, длинну строк и символы
    # по которым разбиваем строку.
    proc splittcsmsg {target text {lineLen 400} {delims { }}} {
          if {[string length $text] <= $lineLen} {
             putserv "PRIVMSG $target :$text"
             return
         }
      set _text [split $text $delims]
      set x 0; set i 0
      while {$x < $lineLen} {
        if {$i >= [llength $_text]} { return }
        set wordlen [string length [lindex $_text $i]];
          if {$x + $wordlen > $lineLen} { break }
          incr x $wordlen
          incr x; incr i
          }
    putserv "PRIVMSG $target :[string range $text 0 [expr $x - 1]] "
    splittcsmsg $target [string trimleft [string range $text $x end]] $lineLen $delims
    }

Этот код мы взяли тут Работа с длинными строками

Далее, в процедуре out_msg строку
  puthelp "PRIVMSG $who :$text"
заменяем на
  splittcsmsg $who $text

Сохраняем скрипт и рехашим бота.
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: Исправляем ошибки в tcs.tcl

Сообщение tvrsh » 13 янв 2010 18:25

Подсчет количества хостов в команде !whois
До:
[17:16:05] <tvrsh> !whois tvrsh
[17:16:05] <bionic> Сидящий на канале tvrsh в юзерлисте известен как tvrsh
[17:16:05] <bionic> Его флаги(глобальные|для канала #egghelp): (jlmnoptxQ|aglo). Инфо: - [AUTH: YES] [Last mod CHATTR: tvrsh].

Открываем скрипт. Находим в нем процедуру make:whois и в ней строку
out_msg $target $marker "Его флаги\(глобальные\|для канала $chan\): (\002[chattr $first_target -]\|[lindex [split [chattr $first_target - $chan] |] 1]\002). $f_tr."

заменяем на:
out_msg $target $marker "Всего хостов: [llength $f_hosts]. Его флаги\(глобальные\|для канала $chan\): (\002[chattr $first_target -]\|[lindex [split [chattr $first_target - $chan] |] 1]\002). $f_tr."

Сохраняем скрипт, рехашим бота.
После:
[17:21:55] <tvrsh> !whois tvrsh
[17:22:13] <bionic> Сидящий на канале tvrsh в юзерлисте известен как tvrsh
[17:22:13] <bionic> Всего хостов: 4. Его флаги(глобальные|для канала #egghelp): (jlmnoptxQ|aglo). Инфо: - [AUTH: YES] [Last mod CHATTR: tvrsh].

Работает. Мелочь, а приятно.
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: Исправляем ошибки в tcs.tcl

Сообщение tvrsh » 24 мар 2010 23:17

Скрипт обновился до версии 20.03.2010. Некоторые из фиксов этой ветки попали в релиз. Скачать скрипт можно тут: tcs_20.03.2010
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: Исправляем ошибки в tcs.tcl

Сообщение Blans » 16 сен 2012 15:36

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

Re: Исправляем ошибки в tcs.tcl

Сообщение tvrsh » 29 сен 2012 22:29

Не успел его забрать. Эгдропоргру умер опять.
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 скрипты

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

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

cron