Регистрация | Вход
[ Главная · Новые сообщения ]
Форум » Основной раздел » Мастерская » Вопросы по скриптам
Вопросы по скриптам
Vladislav 13.07.12 00:42 #151
Добавь в скрипт следующую процедуру:

Code
proc faqantiflood {id time} {
global faqantiflood
if {[info exists faqantiflood($id)]} { return 1 } { set faqantiflood($id) [clock sec]; utimer $time [list unset faqantiflood($id)]; return 0 }
}


Затем в начало каждой проверки на текст добавь строку изменяя порядковый номер:

Quote
if {[faqantiflood $uhost,1 300]} {return}


uhost - запоминать будет по хосту, можно также по nick
1 - порядковый номер проверки
300 - время в секундах

Пример:

Quote
bind pubm - * faq1

proc faq1 {nick uhost hand chan text} {
set text [string tolower [string trim [string map { {}} [stripcodes bcur $text]]]]

if {[string match "*вылетает* *игра*" $text] || [string match "*игра* *вылетает*" $text]} {
if {[faqantiflood $uhost,1 300]} {return}
set otvet {"на Windows 7 игру запускать в режиме совместимости с Windows XP SP3; на Windows XP: в папке с игрой файл \"speed2.exe\" переименовать в \"speed_2.exe\""}
putserv "PRIVMSG $chan :$nick, [lindex $otvet [rand [llength $otvet]]]"; return}

if {[string match "*как* *ставить* *совместимость*" $text] || [string match "*совместимость* *как* *ставить*" $text] || [string match "*совместимость* *ставить* *как*" $text] || [string match "*как* *совместимость* *ставить*" $text]} {
if {[faqantiflood $uhost,2 300]} {return}
set otvet {"на ярлыке игры нажать правой кнопкой мыши => \"свойства\" => во вкладке \"совместимость\" выбрать \"совместимость с Windows XP SP3\" и \"запуск от имени администратора\" => нажать \"применить\" и \"ок\""}
putserv "PRIVMSG $chan :$nick, [lindex $otvet [rand [llength $otvet]]]"; return}
}

proc faqantiflood {id time} {
global faqantiflood
if {[info exists faqantiflood($id)]} { return 1 } { set faqantiflood($id) [clock sec]; utimer $time [list unset faqantiflood($id)]; return 0 }
}
Brian-Tommy 13.07.12 07:17 #152
спасибо, Vladislav, очень помог
с partmsg.tcl я бы долго возился
Brian-Tommy 13.07.12 11:19 #153
а возможно ли такое с мои скриптом - faq1.tcl, чтобы в скрипте задать такую фразу, на которую бот бы не отвечал? - то есть, если, например: "*гонок не видно*" и на все вариации с этой фразой, на них он будет отвечать, а на фразу, например: "гонок не будет видно" и на все заданные фразы он отвечать не будет. возможно ли такое сделать?
Vladislav 13.07.12 17:15 #154
Можешь перед проверками на текст добавить по аналогии проверку на подобные фразы c одним return

Quote
if {[string match "*гонок не будет видно*" $text]} {return}


и тогда скрипт не будет дальше проверять или можно только для данной проверки изменить условие

Quote
if {([string match "*не* *ви* *гон*" $text] || [string match "*не* *наход* *гон*" $text] || [string match "*не* *ви* *игр*" $text] || [string match "*не* *наход* *игр*" $text] || [string match "*нет* *гон*" $text] || [string match "*нет* *игр*" $text] || [string match "*не* *показыва* *гон*" $text] || [string match "*не* *показыва* *игр*" $text] || [string match "*игр* *не* *показыва*" $text] || [string match "*игр* *не* *ви*" $text] || [string match "*игр* *не* *наход*" $text] || [string match "*гон* *не* *показыва*" $text] || [string match "*гон* *не* *ви*" $text] || [string match "*гон* *не* *наход*" $text] || [string match "*гон* *нет*" $text] || [string match "*игр* *нет*" $text] || [string match "*где* *гон*\\?*" $text] || [string match "*где* *игр*\\?*" $text] || [string match "*игр* *где*\\?*" $text] || [string match "*гон* *где*\\?*" $text]) && (![string match "*гонок не будет видно*" $text])} {
set otvet {"необходимо настроить фильтр: в лобби (где отображаются гонки) в правом верхнем углу нажмите \"фильтр\", спросите на канале, какие режимы у созданной гонки и выставите соответсвующие в \"фильтре\""}
putserv "PRIVMSG $chan :$nick, [lindex $otvet [rand [llength $otvet]]]"; return}
Brian-Tommy 14.07.12 11:35 #155
Vladislav, еще такая проблема, бот запущен на VDS, ОС - Linux (платформа - Debian), подключается к серверу IRC.IRCLuxe.Ru, но периодически он выходит из IRC с сообщением

Quote
[16:44:38] HKS [~bot@78.24.221.76] вышел из IRC: Ping timeout"


сказали что это может быть из-за площадки на VDS, обратился в тех поддержку, там сказали, что судя из лог файлов, с сервером все в порядке и сказали обратиться к разработчику бота... из-за чего это может происходить?
Vladislav 14.07.12 12:17 #156
Это может быть из-за vds из-за irc-сервера если есть возможность попробовать другой, из-за скриптов которые на боте. Выявить из-за чего именно достаточно сложно, наверно только методом исключения, например проследить сваливается бот после какой-то команды или может он что-то делает в автоматическом режиме. Как быстро возвращается в сеть. В принципе если он вылетает из сети два раза в неделю это нормально) Главно чтоб быстро возвращался, а вот если приходится его убивать и заново запускать тогда тут 100% виноват скрипт. Так же проследить если с кажем есть бнц на том же сервере что и бот, отваливается ли оно, вдс хоть и говорит что у них всё нормально, но это далеко не так.
Brian-Tommy 14.07.12 12:49 #157
Vladislav, спасибо за подробный ответ
кстати, когда бот выходит из сети с сообщением ping timeout, потом чтобы его запускать, приходится убивать процесс и запускать бота, дело в каком то скрипте?
Vladislav 14.07.12 12:58 #158
Скорее всего да. Может у тебя скрипт стоит связанный с проксями? Так же может быть скрипт который что-то пытается выполнить да попадает в бесконечный цикл или просто ему надо много времени. Если такое происходит без команды, а в автоматическом режиме то смотри в putty может там что-то отобразится прежде чем зависнет.

Скорее всего это скрипт добавлял ты, так как в сборке таких скриптов не замечено)

Пример неправильной работы скрипта, данное действие приведёт к длительному пингтаймауту

Quote
!tcl return [llength [::egglib::readdata data/ymhuk/bases/questions.txt]]
Brian-Tommy 14.07.12 13:04 #159
вроде с прокси я никакой скрипт не ставил, да и вылетает бот ни понятно когда... хорошо, посмотрим, увидим
а дело не может быть в faq1.tcl, остальные скрипты только которые с этого сайта из раздела: "скрипты", правда есть еще один скрипт: trecker.tcl, он держит "комнату", за место того, чтобы создавать ее с компа
вроде он не должен быть, потому что такой же скрипт стоит и на другом боте, (держит другую "комнату"), он всего лишь один раз вылетел, но больше так и стоит

а если после перезапуска бота, я снова набираю эту команду "!стартс", чтобы комната не исчезла потом, просто комната исчезает не сразу, а спустя 3-4 минуты, из-за этого возможно?
trecker.tcl (1.9 Kb)
Vladislav 14.07.12 13:19 #160
faq1.tcl вряд ли, а вот второй скрипт возможно раз он имеет подключение к интернету и таймер который каждые 20 сек подключается к сайту причём я так понял если несколько раз набрать старт то проверки на запуск нет и количество соединений будет увеличиваться, так же возможны скрипты и с этого сайта) они же не тестируются в постоянном режиме.

Другой бот может быть на другом сервере это тоже зависит.

В общем расставляй putlog в скрипте и смотри какой будет последний при зависании или скрипты отключай в общем методом исключения.
Brian-Tommy 14.07.12 13:31 #161
спасибо, попробую, а putty должен быть уже включен перед тем, как бот зависнет, или можно уже после?

Code
bind join - * name
proc name {nick uhost hand chan} {
putlog ok
}


что означает putlog ok и для чего он?

я смотрю в putty (точнее kitty - разницы нет) - там зависает не на 1, а на 2 точнее последняя цифра 2, но он не зависает, а продолжает дальше, 1 2 1 2 и т.д.
Vladislav 14.07.12 13:37 #162
Quote
putlog 1
catch {set parsing_tok [::http::geturl "http://plangc.ru/tracker/index.php?do=vpn_add&addr=&port=$port&game=VPN&mod=[http::formatQuery $game]&vpnport=$vpnPort&playerscount=$playerscount&chan=planu2&roomname=[http::formatQuery $roomname]&ts2=none&playerlist=[http::formatQuery $list]" -timeout 20000]}
::http::cleanup $parsing_tok
utimer $up [list addroom $nick $uhost $hand $chan ""]
putlog 2


в putty смотри там будет маячить 1 2 1 2 если бот зависнет то он зависнет на 1 так как начнёт подключаться к сайту, ну конечно если виновник этот скрипт. В логах бесполезно изменения же не сразу добавляются. 20 сек это очень часто. Минут 5 хотя бы.
Brian-Tommy 14.07.12 14:01 #163
а может и в правду, из-за того что если несколько раз !стартс, у него темп все ускоряется и ускоряется, может из-за этого он потом и вылетает
хорошо, если еще будет вылетать, отключу скрипт и посмотрю без него
Vladislav 14.07.12 14:09 #164
Подобные скрипты:
http://windrop.clan.su/forum/12-38-1 (не работает вроде)
http://windrop.clan.su/forum/12-156-1
http://windrop.clan.su/load/2-1-0-72

Все они хорошо работали на вдспланете в германии, при переезде в сша началось тоже самое что у тебя, все они используют достаточно частое соединение с сайтом.

Ну было бы неплохо добавить проверку на запуск и увеличить таймер до минуты. А то у тебя и таймаут 20 и обновление 20, хотя далеко не всегда проблема в таймауте. Ты бы с начало выяснил этот ли скрипт, отключив его.
Brian-Tommy 14.07.12 18:10 #165
Владислав, в этом форуме ты давал скрипт, который проверяет версию irc клиента юзера, но он работает только когда я ввожу !версия Brian (я овнер) и !версия HKS (бот), а на других он не работает, на другом боте все отлично работает, что может быть?
version.tcl (0.6 Kb)
Форум » Основной раздел » Мастерская » Вопросы по скриптам
Поиск: