Вопросы по скриптам
|
|
|
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 минуты, из-за этого возможно?
|
|
|
|
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 (бот), а на других он не работает, на другом боте все отлично работает, что может быть?
|
|
|
|