Как отменить задержку между фразами |
Как отменить задержку между фразами |
Kreon |
Nov 24 2007, 06:29 PM
Post
#1
|
Developer Group: Root Admin Posts: 396 Joined: -- From: Внешние пределы Member No.: 2 |
Как известно, eggdrop имеет встроенный конвеер для вывода всех сообщений, отправляемых ботом, который служит для предотвращения зафлуживания бота, но в то же время и существенно замедляет вывод ботом текста. В определенных случаях может появиться желание подобную очередь отключить. Например, это может понадобиться, если не требуется выводить одновременно большого количества текста, требуется мгновенная реакция бота на события, или же просто ваш бот наделен правами IRC-оператора.
Тогда на помощь придет встроенная, но недокументированная в eggdrop команда putdccraw, позволяющая отправлять сообщения в обход очереди. Синтаксис: putdccraw <idx> <len> <text> IRC-сервер, к которому подключен бот, имеет idx = 0; len - длина отправляемой строки текста; в конец text необходимо добавить символ перевода строки '\n'. Пример применения в виде функции: CODE proc putfast {arg} { append arg "\n" putdccraw 0 [string length $arg] $arg } Таким образом, заменив требуемые putserv в вашем скрипте на определенный таким образом putfast можно добиться мгновенного вывода. Более того, есть возможность автоматически заменить все имеющиеся и будущие putserv'ы, puthelp'ы и putquick'и, переопределив их, чтобы бот использовал putfast для вывода всех своих данных с помощью следующего скрипта. Внимание! Использование данного кода может спровоцировать флуд вашим ботом ирк-сервера, что может вызвать любые последствия от единичного дисконнекта вашего бота от сервера, вплоть до перманентного gline'а. CODE proc putfast {text} { append text "\n" catch {putdccraw 0 [string length $text] $text} } if {[info commands "putserv_original"]=="putserv_original"} { rename putserv "" rename putserv_original putserv } rename putserv putserv_original proc putserv { text {mode ""}} { putfast $text } if {[info commands "puthelp_original"]=="puthelp_original"} { rename puthelp "" rename puthelp_original puthelp } rename puthelp puthelp_original proc puthelp { text {mode ""}} { putfast $text } if {[info commands "putquick_original"]=="putquick_original"} { rename putquick "" rename putquick_original putquick } rename putquick putquick_original proc putquick { text {mode ""}} { putfast $text } В отличие от оригинальной версии putfast_vs_putserv.tcl, в данный код добавлена проверка на подключенность бота к IRC-серверу, что исключает возможность возникновения ошибки "invalid idx" при попытке отправления какого-либо текста по таймерам после отключения бота от IRC-сервера. В принципе, также для проверки подключения можно использовать следующий код: CODE if {![string match "*(server)*" [dcclist]]} {return} ЗЫ: Если у кого-либо есть предложения, как можно более оптимально проверить, подключен ли бот к серверу или нет - поделитесь ими Сложность заключается в том факте, что переменные $server и бинды, сообщающие об успешном подключении, выставляются после успешной окончательной регистрации ботом на сервере, тогда как возможность отсылки RAW-команд, собственно, для этой самой регистрации, появляется раньше, и отследить её можно только в [dcclist]. -------------------- Не понял сам - не дай понять другому
|
Lo-Fi Version | Time is now: 21st May 2024 - 09:26 PM |