Eggdrop/TCL FAQ.

Частые вопросы возникающие при работе с ботами. Загляните сюда перед созданием новой темы.

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

Eggdrop/TCL FAQ.

Сообщение tvrsh » 10 дек 2010 15:30

Администрирование.

Как заставить бота послать мне запрос на DCC Chat?
/ctcp <botnick> chat

Я забыл свой пароль owner'a на бота, что делать?
1) "Убить" бота (kill -9 <pid-бота>)
2) Зайти редактором в userfile бота ("<имя бота>.user")
3) Найти запись о вашем аккаунте
4) Удалить в ней строку начинающуюся с "--PASS"
5) Запустить бота и сделать "/msg <botnick> pass <password>"

Как подделать CTCP-запросы VERSION и USERINFO?
В строках конфига прописать:
set ctcp-version "MyIRC v1.0 pizza"
set ctcp-userinfo "Kewl bot in the World!"

Почему не отрабатывается CTCP-Flood за CTCP запросах?
Установите "2" в строке конфига:
set ctcp-mode 2

В сети, где висит мой бот, длина ников более девяти символов. Как сказать боту, чтобы запоминал длинные ники?
Установите в строке конфига:
set nick-len 32

Пытаюсь сделать .adduser, а он говорит "user isn't on the channel".
.+user <nick> <hostmask>
.chattr <nick> [flags] [#chan]

Как сменить ник бота на ходу?
.set nick <newnick>

Как запустить и убрать бота на другой канал?
Для этого потребуются права +n.
Запустить:
.+chan <#chan>

Убрать:
.-chan <#chan>

Но .-chan удалит всю созданную информацию о канале.
Для простого "cycle" можно сделать
/msg <botnick> go <#chan>

Для временного запрета канала:
.chanset <#chan> +inactive

На моем канале стоит +k, как сделать, чтобы бот входил на такой канал сам?
.chanset <#chan> chanmode "+k <keyword>"

Каждые несколько минут приходит новая копия бота. Почему?
Вероятно вы неправильно настроили botchk скрипт. Проверьте все параметры и пути в нем.

Как давать пользователям опа на входе?
Включите режим канала +autoop и дайте пользователям +o.
.chanset <#chan> +autoop
.chattr <nick> +o [#chan]
Если не хотите давать всем пользователям имеющим +o оп на входе,
то отключите autoop и дайте этим пользователям +a.
.chanset <#chan> -autoop
.chattr <nick> +a [#chan]

Как давать пользователям войса на входе?
Включите режим канала +autovoice и дайте пользователям +v.
.chanset <#chan> +autovoice
.chattr <nick> +v [#chan]
Если не хотите давать всем пользователям имеющим +v войс на входе,
то отключите autovoice и дайте этим пользователям +g.
.chanset <#chan> -autovoice
.chattr <nick> +g [#chan]

Если попытаться дать +o пользователю, бот сразу его снимает! Почему?
a) Включен режим bitch, который не дает пользователям без +o получать
статус опа на канале. Отключите режим bitch с помощью:
.chanset <#chan> -bitch

b) Включен режим revenge, который не дает пользователям с +d получать
статус опа на канале. Флаг +d появляется у пользователей, если
включен режим revenge и пользователь делает "плохо" боту.
Например, deop'ает или kick'ает его. Отключите режим revenge:
.chanset <#chan> -revenge

c) Пользователя опнул сервис (ChanServ). Бот недоумевает, почему опов
раздает тот, кого нет на канале. Чтобы этого не происходило,
включите режим канала +nodesynch:
.chanset <#chan> +nodesynch

Как правильно устанавливать флаги пользователям, чтобы потом не пришлось переделывать или не было проблем?
Как вы уже знаете флаги делятся на глобальные (на все каналы, где сидит
бот) и локальные (в пределах заданного канала). Разделяются они символом
вертикальной черты "|". Соответственно для установки глобального флага
применяйте команду:
.chattr <hand> m|

для установки локального флага:
.chattr <hand> |m <#chan>

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

Я сменил параметры канала в конфиге, перезапустил бота, а ничего не изменилось. В чем дело?
Параметры всех каналов хранятся в динамическом файле "chanfile".
Чтобы их сменить воспользуйтесь командой
.chanset <#chan> <argument>

Например, установка режима +autoop делается через:
.chanset <#chan> +autoop

Как установить флаги канала?
.chanset <#chan> chanmode <flags>

Например, чтобы бот всего держал флаги +nt и выключал флаги +mki,
надо сделать:
.chanset <#chan> chanmode +nt-mki

Чтобы посмотреть текущие настройки канала, наберите:
.chaninfo <#chan>

Когда я делаю .relay на бота, в строках появляются лишние символы типа: "<bot> Hey [1mNick![0m My name is [1mBot1.1[0m". Как исправить?
Все верно. Таким образом отображается ANSI на не-ANSI терминалах. Для исправления наберите:
.fixcodes off

Не могу зайти на боте через Telnet. В лог пишет, что Bad password, хотя все правильно. Хосты верные. Мистика какая-то!
Вероятно вы успели поставить патч буквы "я", который лишает возможности логиниться через telnet. Пересоберите бота без этого патча.

Есть бот (eggdrop v1.6.4) и скрипт, который делает bind фразы и отвечает на нее. Но после первого ответа бот больше не реагирует на внешние раздражители. Кривые руки или баг в боте?
Баг в боте. Исправить можно либо установив патч на 1.6.4 или обновив его до новой версии, 1.6.5 или выше.

Как дать/отнять оп пользователю на канале?
Дать:
.op <nick> [#chan]

Отнять:
.deop <nick> [#chan]

Как дать/отнять войс пользователю на канале?
Дать:
.voice <nick> [#chan]

Отнять:
.devoice <nick> [#chan]

Как кикнуть пользователя с канала?
.kick [#chan] <nick> [за что]

Как забанить пользователя?
.kickban [#chan] [-|@]<nick> [comment]

Банит и кикает пользователя с конкретного канала.
.+ban <hostmask> [#chan] [%bantime <XdXhXm>] [comment]

Добавляет постоянный (если не указан bantime) бан.
Он также будет действовать на всех каналах, где сидит бот.

Как забанить весь домен *.domain.net, но кроме хоста host.domain.net?
.+ban *.domain.net
.+exempt host.domain.net


Взято из http://www.amiga.org.ru/eggdrop/eggtcl.faq
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Основы программирования.

Сообщение tvrsh » 10 дек 2010 17:31

Основы программирования.

Как вызвать и передать параметры процедуре?
proc myproc {a b c} { ... }
myproc 1 2 3
 
Процедура myproc получит: a=1, b=2, c=3

Как запустить shell-команду и вывести output в канал?
Если на выходе одна строка, можно просто:
set output [exec command]

Например:
set serveruptime [exec uptime]

А если на выходе несколько строк или вы не знаете сколько их будет, то
лучше применять следующий код:
    foreach temp [split [exec command] "\r\n"] {
        putserv "PRIVMSG $chan :$temp"
    }

Как проверить содержит ли переменная цифру?
TCL: [ Скачать ] [ Скрыть ]
   if {![catch {expr $var}]} {
    # $var is a number
    } else {
    # $var is not a number
    }

Как узнать какие события bind'ит мой бот?
.binds all
или
.binds <тип> all
Например
.binds dcc all

Как из скрипта "убить" процеруду?
rename <proc_name> ""

Как прочитать/установить ENV-переменную?
Прочесть:
set myenv $env&#40;DISPLAY&#41;

Установить:
set env&#40;DISPLAY&#41; unix:0

Проверить:
if {[info exists env&#40;VARNAME&#41;]}

Как узнать IP бота?
TCL: [ Скачать ] [ Скрыть ]
set ip [myip]
foreach v {d c b a} {
    set $v [expr $ip & 255]
    set ip [expr $ip >> 8]
}
set botip "$a.$b.$c.$d"

После каких изменений в скрипте надо делать .restart, потому что .rehash не помогает?
После удаления bind'ов и после изменения количества переменных в процедурах.

Какие буквы или цифры я могу использовать в флагах пользователей для своих скриптов, чтобы не конфликтовали с ботовскими?
Все большие буквы (A-Z) и цифры (0-9). Но если вы ставите еще и чужие скрипты, то следите, чтобы их флаги уже не конфликтовали с вашими.


Взято из http://www.amiga.org.ru/eggdrop/eggtcl.faq
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Работа с пользователями и userfile.

Сообщение tvrsh » 11 дек 2010 01:52

Работа с пользователями и userfile.

Как посчитать количество пользователей в канале?
set usersnum [llength [chanlist $chan]]

Как "вынуть" из userfile пользователей с конкретными флагами?
userlist AB
- покажет пользователей с флагом "A" или "B"
userlist AB&
- покажет пользователей с флагами "A" и "B"

Можно ли каким-либо образом держать свои данные, не относящиеся к пользователям в userfile?
По идее нет. Но можно прибегнуть к хитрости и содержать эти данные в XTRA-полях самого бота :)

Как читать/писать информацию в XTRA-полях пользователей?
Прочесть:
getuser <hand> XTRA <имя поля>

Записать:
setuser <hand> XTRA <имя поля> <что записать>

Стереть:
setuser <hand> XTRA <имя поля>

Как проверить флаги пользователя?
[matchattr $hand <flag|flag> $chan]

Флаги расположены так: <глобальный>|<локальный>
Если канал не указать, будут проверены только глобальные флаги.


Взято из http://www.amiga.org.ru/eggdrop/eggtcl.faq
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Работа со списками и строками.

Сообщение tvrsh » 14 дек 2010 00:20

Работа со списками и строками.

Как создать список?
Список создается с помощью команды:
set list "one two three four five"

В итоге мы получим список в пятью элементами. Пустой список создается командой:
set list ""

Как взять один элемент списка?
Первый элемент всегда имеет номер "0". Значит для получения первого элемента сделайте:
lindex $list 0

Как найти по списку в списке?
set mainlist "a b c d e"
    set mylist "h z y c k"
    foreach i $mylist { if {[lsearch $mainlist $i]>=0} {return 1} }

Как добавить новый элемент в список?
lappend $list "newelement"

Для добавления нового элемента не в конец списка, а в заданную позицию
(номер в списке) используйте:
linsert $list <позиция> "newelement"

Как заменить или удалить заданный элемент списка?
lreplace $list <с позиции> <по позицию> <на что заменить>

если <на что заменить> не указать, элемент будет удален.
Например, имея список:
set list "a b c"

и проведя операцию с ним командой:
lreplace $list 1 1

мы получим список $list с элементами "a c"

Как выбрать строку из списка наугад (RND)?
set list { "number one" "number two" "number three" }
    set random [lindex $list [rand [llength $list]]]

Как заменить символ в строке на другой?
regsub -all -- "windows" "$string" "unix" mystring

Заменит слова "windows" на "unix" в строке $string и запишет новую строку в $mystring.

Как из куска HTML вырезать текст между <pre> и </pre>?
Сначала найти <pre> через lsearch, потом найти </pre>. И выбрать серединку через lrange.
set a [lrange $str [expr [lsearch $str "<pre>"] + 1] [expr [lsearch $str "</pre>"] - 1]]

Как взять один символ (или два/три символа) из строки?
set string "eggdrop"

Пример с одним символом (результат будет "d"):
string index $string 3

Пример с группой символов #1 (результать будет "dr"):
string range $string 3 4

Пример с группой символов #2 (результать будет "drop"):
string range $string 3 end


Продолжение следует.
Взято из http://www.amiga.org.ru/eggdrop/eggtcl.faq
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.

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


Вернуться в FAQ + HowTo

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

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

cron