Това е изчерпателен списък с всички TCL команди добавени за eggdrop. Всички
вградени команди в TCL са все още тук разбирасе. Но можете да използвате и
тези за да манипулирате способностите на ботът. Написани са според категорията
към която принадлежат.

ВНИМАНИЕ: Този лист е верен за eggdrop v1.6.0! Скриптове писани за
  v1.3/v1.4 сериите на eggdrop вероятно ще работят с няколко
  малки модификации зависещи от скриптът.

Сктиптове писани за v0.9, v1.0, v1.1 или v1.2 вероятно няма да работят
без модификация. Команди които са променени в v1.6 сериите
(или са нови) са маркирани с вертикална черта отляво.

***### ГЛАВНИ EGGDROP КОМАНДИ ###***

това са главните команди използвани в eggdrop, за специфични команди
за модулите погледнете после.


*** OUTPUT КОМАНДИ ***

  putserv <текст> [опция]
    изпраща текст към сървърът, подобно на 'dump' (проектирана за директни команди
      към сървърът);
      сървър опциите са:
      -next     слага съобщението с по голяма привилегия
    връща: нищо

  puthelp <текст> [опция]
    изпраща текст към сървърът, подобно на 'putserv', но използва различна привилегия
      (проектирана да изпраща съобщения към канали или хора)
    опциите са:
      -next     слага съобщението с по голяма привилегия
    връща: нищо

  putquick <текст> [опция]
    изпраща текст към сървърът, подобно на 'dump' (проектирана за директни команди
      към сървърът); 
    опциите са:
      -next     слага съобщението с по голяма привилегия
    връща: нищо

  putkick <канал> <псевдоним,псевдоним,...> [причина]
    изпраща kicks към сървърът и се опитва да добави колкото се може повече псевдоними в 
    една kick команда.
    връща: нищо

  putlog <текст>
    изпраща текст към логът на всеки канал, маркиран като 'misc' (o)
    връща: нищо

  putcmdlog <текст>
    изпраща текст към логът на всеки канал, маркиран като 'command' (c)
    връща: нищо

  putxferlog <текст>
    изпраща текст към логът на всеки канал, маркиран като 'file-area' (x)
    връща: нищо

  putloglev <левел(и)> <канал> <текст>
    изпраща текст към лог, маркиран с всички валидни левели (използвайте
    "*" за да маркирате всички лог левели)
    връща: нищо

  dumpfile <псевдоним> <име на файл>
    изкарва съдържанието на файл от help/text директорията на потребител в IRC чрез
      msg (една линия на msg); потребителят няма флагове, така че флаговете на 
      файлът няма да работят.

  queuesize [опашка]
    връща: номер на съобщенията в всички опашки. Ако е зададена опашка, само размерът
      на опашката се връща. валидни опашки са: mode, server, help.

   clearqueue <опешка>
     връща: номер от изтритите линии от дадена опашка


*** USER RECORD MANIPULATION COMMANDS ***

  countusers
    връща: номерът на потребителите в базата данни на бота

  validuser <име>
    връща: "1" ако потребител с това има съществува; в противен случай "0"

  finduser <псевдоним!идент@хост>
    търси потребителски запис който най-близо отговаря на зададените идент@хост
    връща: намереното име, или "*" ако няма такова

  userlist [флагове]
    връща: лист с имената на потребителите на бота
      можете да използвате няколко флага като средство за сивпадение,
      употреба: [global]{&/|}[chan]{&/|}[bot]

  passwdok <име> <парола>
    проверява паролата зададена за даденият потребител
    ако използвате за парола "" или '-' можете да разберете
    дали потребителят има сложена парола.
    връща: "1" ако паролата отговаря на тази на потребителят; "0" ако не

  getuser <име> <вид> [екстра информация]
    валидните видове са:
      BOTFL   - връща текущите флагове на ботът на потребител
                (ако е бот :)
      BOTADDR - (друго което е смао за ботове :) връща лист съдържащ
                адресите на ботът, телнет портът на ботът, и relay портът му.
      HOSTS   - връща лист с хостовете на потребителят
      LASTON  - връща лист съдържащ кога последно е видян потребителят,
                и каде последно е.
                ИЛИ LASTON #канал връща времето когато последно е видян потребителят
		    в каналът или 0 ако няма информация
      INFO    - връща глобалната инфо линия на потребителят
      XTRA    - връща старата екстра информация
      COMMENT - връща видимите само за мастъри коментари на потребителят
      EMAIL   - връща електронната поща на потребителят
      URL     - връща уеб страницата на потребителят
      HANDLE  - връща името на потребителят така както е записано в потребителският файл

  setuser <име> <вид> [екстра информация]
    това е обратното на getuser, позволява ви да вземате няколко променливи
    екстра полета :
      PASS    - използвайте това за да сложите парола на потребителят (ако няма 3-ти аргумент 
			ще бъде премахната)
      HOSTS   - за слагане на хост, ако няма екстра информация бива изтрит
      LASTON  - 2 форми:
                setuser <име> laston  <място>
                  слага глобалено laston време
                setuser <име> laston 
                  слага глобално laston време, оставяйки мястото празно
                setuser <име> laston  <канал>
                  ще сложи laston времето на потребителят за даден канал
                  (ако вече е там)

|  chhandle <старо име> <ново има>
|    променя името на потребител
|    връща: "1" при успешна промяна; "0" ако името се използва, инвалидно е 
|      или не може да бъде намерен потребителят

  chattr <име> [changes [канал]]
    променя атрибутите на даден потребител, ако включите някакви -- промените
      с в формата '+f', '-o', '+dk', '-o+d', др; ако е зададен канал
      флаговете се записват за каналът, можете да използвате и +o|-o #channel
 	форматът;

  botattr <име> [changes [канал]]
    подобно на chattr, освен че добавя атрибути на бот различни от
    нормалните за потребител, това включва специфични флагове за подялба на
    канал като +s

  matchattr <име>  [канал]
    връща: "1" ако даденият потребител има дадените флагове.

  adduser <име> <хостмаск>
    добавя нов потребител с име и хостмаск (без парола и флагове)
    връща: "1" ако е успешно, "0" ако вече съществува

  addbot <име> <адрес>
    добавя нов запис за бот с име и адрес за свързване (без парола и флагове)
    връща: "1" ако е успешно, "0" ако вече съществува

  deluser <име>
    изтрива потребител с това име
    връща: "1" ако е успешно, "0" ако потребителят не същестува

  delhost <име> <хостмаск>
    маха хостмаска от листът с хостмаски на потребител
    връща: "1" ако е успешно, "0" ако хостмаскът не е в листът или потребителят
	не същестува

  addchanrec <име> <канал>
    добава запис за даден канал на потребител
    връща: "1" ако е успешно, "0" ако потребителят не съществува или ако няма такъв
	канал

  delchanrec <име> <канал>
    премахва записът за каналът на потребител; това включва всички флагове
     за каналът
    връща: "1" ако е успешно, "0" ако потребителят не съществува или ако няма такъв
	канал

| haschanrec <име> <канал>
|   връща: "1" ако името има запис за даденият канал, "0" ако няма

  getchaninfo <име> <канал>
    връща: инфо за даденият канал

  setchaninfo <име> <канал> <инфо>
   добавя инфо за даденият канал на портребител
   ако инфо е "none" то ще бъде премахнато.
   връща: нищо

  newchanban <канал> <бан> <създател> <коментар> [време] [опция]
    добавя бан към листата на каналът; време е след колко минути
	банът ще изтече и ще бъде премахнат; ако не е зададено време, се
	използва ban-time (обикновнно 60); слагането на време на 0 го прави
	перманентно; валидните опции са:
        sticky     прави изключението винаги да е активно в каналът, дори и с 
			 dynamicexempts on
        none       (няма ефект)
    връща: нищо

  newban  <създател> <коментар> [време] [опция]
    добавя бан към глобалният лист (който има ефект при всички канали);
      другите аргументи работят точно както при newchanban
    връща: нищо

  newchanexempt <канал> <изключение> <създател> <коментар> [време] [опция]
    добавя изключение към листата на каналът; време е след колко минути
	изключението ще изтече и ще бъде премахнат; ако не е зададено време, се
	използва exempt-time (обикновнно 60); слагането на време на 0 го прави
	перманентно; валидните опции са:
        sticky     прави изключението винаги да е активно в каналът, дори и с 
			 dynamicexempts on
        none       (няма ефект)
    връща: нищо

  newexempt <изключение> <създател> <коментар> [време] [опция]
    добавя изключение към глобалният лист (който има ефект при всички канали);
    другите аргументи работят точно както при newchanexempt
    връща: нищо

  stick <маска> [канал]
    право банът sticky, или ако е зададен канал, го прави за канал. 
    връща: "1" ако е успешно, "0" ако не е

  unstick <маска> [канал]
    прави бан да не е повече sticky, или ако е зададен канал, го прави
    за канал. връща: "1" ако е успешно, "0" ако не е

  stickexempt <маска> [канал]
    прави изключение sticky, или ако е зададен канал, го прави за него. 
    връща: "1" ако е успешно, "0" ако не е

  unstickexempt <маска> [канал]
    прави изключение да не е повече sticky, или ако е зададен канал, го прави
    за канал. връща: "1" ако е успешно, "0" ако не е

  killchanban <канал> 
    премахва бан от бан листата на каналът
    връща: "1" ако е успешно, "0" ако не е

  killban 
    премахва бан от глобалната бан листа
    връща: "1" ако е успешно, "0" ако не е

  killchanexempt <канал> 
    премахва изключение от каналът
    връща: "1" ако е успешно, "0" ако не е

  killexempt 
    премахва изключение от глобалната листа
    връща: "1" ако е успешно, "0" ако не е

  ischanjuped [канал]
    връща: "1" ако каналът е juped и ботът не може да влезе, "0"
      ако не е

  isban  [канал]
    връщаж: "1" ако банът е в глобалната бан листа, "0" ако не е; ако не 
	е зададен канал, се проверяват и тези за каналът

  ispermban  [канал]
    връща: "1" ако банът е в глобалната бан листа И е маркиран като перманентен,
      "0" ако не е; ако не е зададен канал, се проверяват и тези за каналът

  isexempt <изключение> [канал]
    връща: "1" ако изключението е в глобалният списък от такива , "0" ако не е; ако 
	не е зададен канал, се проверяват и тези за каналът

  ispermexempt <изключение> [канал]
    връща: "1" ако изключението е в глобалният списък от такива И е маркирано като
	перманентно, "0" ако не е; ако не е зададен канал, се проверяват и
	тези за каналът

  isbansticky <бан> [канал]
    връща: "1" ако банът е sticky в глобалната листа, "0" ако не е;
	ако не е зададен канал, се проверяват и тези за каналът

  isexemptsticky <изключениеt> [канал]
    връща: "1" изключението е sticky в глобалният лист,
      "0" ако не; ако не е зададен канал, се проверяват и тези за каналът

  matchban <псевдоним!идент@хост> [канал]
    връща: "1" ако адресът на потребителят съвпада с глобален бан,
      "0" алп ме; ако не е зададен канал, бан листата на канлът се проверява
	и тя

  matchexempt <псевдоним!идент@хост> [канал]
    връща: "1" ако адресът на потребителят съвпада с +e в глобалният
      лист, "0" ако не; ако не е зададен канал, се проверява и листата на канлът

  banlist [канал]
    връща: лист с глобалните банове, или (ако е зададен канал) лист с
      банове за канал; всеки запис е сам по себе си лист съдържащ:
	хостмаск, коментар, време когато изтича, кога е добавен, кога последно
	е бил сложен и създател (времето е в unixtime формат)

  exemptlist [канал]
    връща: лист от глобални изключения, или (ако е зададен канал) лист с
      тези от канал; всеки запис е сам по себе си лист съдържащ:
	хостмаск, коментар, време когато изтича, кога е добавен, кога последно
	е бил сложен и създател (времето е в unixtime формат)

  newignore <хостмаск> <създател> <коментар> [текущо време]
    добавя запис към игнор листата на ботът; текущо време е след колко минути игнорът ще
 	изтече и ще бъде премахнат; ако не е зададено текущо време, се използва ignore-time 	
	(обикновнно 60); слагането на текущо време на 0 го прави перманентен
    връща: нищо

  killignore <хостмаск>
    премахва запис от игнор листата
    връща: "1" ако е успешен, "0" ако не е

  ignorelist
    връща: лист с игнорите; всеки запис сам по себе си е лист, съдържащ:
      хостмаск, коментар, време когато изтича, кога е добавен, и създател
      (времето е в unixtime формат)

  isignore <хостмаск>
    връща: "1" ако игнорът е в листът, "0" ако не е

  save
    записва потребителският файл в/у диска
    връща: нищо

  reload
    зарежда потребителският файл от диска (препокривайки това което е в паметта)
    връща: нищо

  backup
    прави копие на базата данни в/у дискът
    връща: нищо

  getting-users
    връща: "1" ако ботът в момента сваля потребителски файл от поделен бот
      , "0" ако не

*** КОМАНДИ ЗА КАНАЛ ***

  channel add <име> <лист с опции>
    добавя канал който ботът да мониторва; пълен лист с опциите е даден в
      eggdrop.complete.conf; обърнете внимание, че опциите за каналът
      трябва да бъдат в лист (обграден в {})
    връща: нищо

  channel set <име> <опции...>
    слагате опции за даденият канал; пълен лист с опциите е даден в
      eggdrop.complete.conf; 
    връща: нищо

  channel info <име>
    връща: лист с информация за даденият канал: enforced mode, idle
      kick limit, need-op скприт, need-invite скрипт, и няколко
      +/- опции както са в конфигурационият файл

  channel remove <име>
    премахва канал от базата данни на ботът
    връща: нищо

  savechannels
    запазва насатройките за каналите в файлът който е дефиниран.
    връща: нищо

  loadchannels
    зарежда настройките на канал от файлът който е дефиниран.
    връща: нищо

  channels
    връща: лист от каналите в които е ботът

  isbotnick <псевдоним>
    returns: "1" ако псевдонимът съвпада с псевдоним на бот; "0" ако не е

  botisop <канал>
    returns: "1" ако ботът има операторски статус в каналът; "0" ако не е

  botisvoice 
    returns: "1" ако ботът е имал +v в даденият канал; "0" ако не е

  botonchan <канал>
   връща: "1" ако ботът е в даденият канал; "0" ако не е

  isop <псевдоним> <канал>
    връща: "1" ако някой под това име е в каналът на ботът и има операторски
	статус; "0" ако не

  isvoice <псевдоним> <канал>
    връща: "1" ако някой под това име е в каналът на ботът и има +v; "0" 
	ако не

  onchan <псевдоним> <канал>
    връща: "1" ако някой под това име е в каналът на ботът; "0" ако не

  nick2hand <псевдоним> [канал]
    връща: име на <псевдоним> в <канал>
    ако <канал> не е зададен, ботът ще провери във всичките си канали
    ако <псевдоним> не е намерен връща ""
    ако <псевдоним> е намерен, но не е познат на ботът връща "*"

  handonchan  <канал>
    връща: "1" ако идент@хост на някого в каналът съвшада с даденото име; "0" ако не

  hand2nick <име> [канал]
    връща: псевдонимът на първият човек в <канал> чиито идент@хост
      съвпадат с името;
    ако <канал> не е зададен, ботът ще провери всичките си канали

  ischanban  <канал>
    връща: "1" ако това е бан

  ischanexempt <изключение> <канал>
    връща: "1" ако това е +e.

  chanbans <канал>
    връща: лист с текущите банове в канал, всеки елемент е
     в форма {бан <от кого> <кога>} <кога> в секунди от POV на ботът.

  chanexempts <канал>
    връща: лист от текущите +е в канал,
      всеки елемент е в форма {изключение <от кого> <кога>} <кога> е в секунди
      от POV на ботът.

  resetbans <канал>
    премахва всички банове за канал които не са в бан листата на ботът,
      и слага всички банове които не са в каналът а трябва да са.
    връща: нищо

  resetexempts <канал>
    премахва всички +е от канал

  resetchan <канал>
    препрочита информацията за каналът от сървърът
    връща: нищо

  getchanhost <псевдоним> [канал]
    връща: идент@хост на <псевдоним>
    ако <канал> не е зададен, ботът ще провери всички канали
    ако <псевдоним> не е в каналът(ите), връща ""

  getchanjoin <псевдоним> <канал>
    връща: timestamp от човекът който влиза в каналът

  onchansplit <псевдоним> <канал>
    връща: "1" ако псевдонимът е в сплит; в противен случай "0"

  chanlist <канал> [флагове[&флагове за каналът]]
    флаговете са всички глобални флагове, '&' означава да се гледа и за
    флагове за каналът. Примери:
       n         (Собственик на ботът)
       &n        (Собственик в канал)
       o&m       (Глобален оператор, Мастър в канал)
    сега можете да използвате дори по услижнени съвпадения за флагове, включващи +&- флагове
    и & или | (и или или) съвпадения
    връща: лист от псевдоними в текущият канал на ботът които имат зададените флагове;
       ако не са зададени флагове, всички псевдоними се връщат

  getchanidle <псевдоним> <канал>
    връща: номер в минути за човекът който е idle; "0" ако
      даденият потребител не е в каналът

  getchanmode <канал>
    връща: стринг от видът "+ntik ключ" за даденият канал

  jump [сървър [port [парола]]]
    преминава на зададеният сървър, или (ако не е зададени никакъв) на следващият
      в сървър листата на ботът
    връща: нищо

  pushmode <канал> <мод> [аргумент]
    променя мод в каналът (пример: pushmode #lame +o goober); всички
      променени модове ще се изпратят наведнъж (комбинирани в една линия
      колкото е възможно) когато скриптът приключи, или когато се извика 'flushmode'

  flushmode <канал>
    премахва всички допълнително сложени модове на каналът, освен тези които
      скриптът е задал (само зададените за каналът)

  topic <канал>
    връща: стринг с текущият топик в даденият канал

  validchan <канал>
    проверява дали ботът е в даденият канал
    връща: 1 ако е, 0 ако не е 

  isdynamic <канал>
    връща: 1 ако каналът съществува като динамичен, 0 ако не 

  setudef <флаг/цяло число> <име>
    инициализира дефиниран потребителски флаг за канал или настройка от вида на цяло число.
     Можете да го използвате като всеки друг флаг или настройка.
    ВАЖНО: Не забравяйте да реинициализирате вашите флагове/настройки след рестарт,
    или те ще бъдат загубени.

  renudef <флаг/цяло число> <старо име> <ново име>
    преименува дефиниран потребителски флаг за канал или настройка от вида на цяло число.

  deludef <флаг/цяло число> <име>
    изтрива дефиниран потребителски флаг или настройка от вида на цяло число.

*** DCC КОМАНДИ ***

  putdcc  <текст>
    изпраща текст към дадениет потребител
    връща: нищо

  dccbroadcast <съобщение>
    изпраща съобщението ви към всички в botnet-а, в формата
      "*** <съобщение>" за локалните потребители, и "*** [Бот] <съобщение>" за
      потребителите в другите ботове

  dccputchan <канал> <съобщение>
    изпраща съобщението ви към всички в даденият канал в botnet-а, в 
      формата както е при dccbroadcast -- валидните канали са от 0 до 99999
    връща: нищо

  boot <потребител@бот> [причина]
     изритва потребител от partyline
     връща: нищо

  restart
    презарежда ботът и спира всички таймери
    обърнете внимание, че това маха и зарежда наново всички модули, ботът ви също така ще 
      смени сървърът.
    връща: нищо

  rehash
    презарежда ботът
    връща: нищо

  dccsimul  <текст...>
    симулира написване на текст от dcc потребител; командите трябва да се 
	предхождат от '.' за да бъдат симулирани
    връща: нищо

  hand2idx <име>
    връща: idx (номер по-голям или еквивалентен на нула)за даденият потребител,
	ако той е на party line в chat мод, file area, или под контрол на скрипт;
	"-1" ако не е -- ако потребителят се среща няколко път се връща по старият
	idx

  idx2hand 
    връща: името на потребителят с този idx

  valididx 
    връща: "1" ако idx същестува; "0" ако не

  getchan 
    връща: текущите канали в които е потребителят в party line;
      "0" индикира че е в груповият party line, "-1" означава, че имаchat off,
      и валидните стойности са от 1 до 99999 за приват каналите

  setchan  <канал>
    слага канал за потребител на party line (потребителят не бива известен,
	че е в нов канал);
    връща: нищо

  console  [канал] [модове за конзолата]
    променя модовете на конзолата за dcc потребител, или на неограничени модове 
	(като "mpj") или просто добавя/маха флагове (като "+pj" или "-moc" или "+mp-c");
	връща: a list containing the user's (new) channel view, and (new)
      console mode, or nothing if that user isn't currently in dcc chat

  echo  [статус]
    задава echo на потребителят on или off; статусът трябва да е 1 или 0
    връща: новата стойност на echo за потребителят (или текущата стойност, ако не е 
      зададена никаква стойност за статус)

  putbot <име на ботът> <съобщение>
    изпраща съобщение през целият botnet към друг бот; ако никой скрипт спре
      съобщението на другият край, то изчезва
    връща: нищо

  putallbots <съобщение>
    изпраща съобщение в целият botnet към всички свързани ботове
    връща: нищо

  killdcc 
    спира party-line или file area връзка
    връща: нищо

  bots
    връща: лист с ботовете които са свързани в botnet

  botlist
    връща: лист с ботовете в текущият botnet; всяка точка се характеризира
      с четири елемента: bot, uplink, version, sharing
      status.

      bot    : името на ботът
      uptlink: през кого е свързан ботът
      version: цифровата му версия
      sharing: "+" ако ботът се поделя с някого, в противен случай "-"

  islinked <бот>
    връща: "1" ако ботът е усшещно свързан, "0" ако не е

  dccused
    връща: номерът на dcc връзките които се използват в момента

  dcclist ?вид?
    връща: лист с активните връзки, всяка точка в листът се характеризира с шест 
	елемента:
        { <име> <хост> <вид> {<други>} }

      видовете са: chat, bot, files, file_receiving, file_sending,
      file_send_pending, script, socket (това са връзки които не са сложени
      още под 'control'), telnet, и server.

  whom <канал>
    връща: лист от хората в botnet които са в даденият канал (0 е 
      началният); всяка точка в листа ще се характеризира с шест елемента:
	псевдоним, бот, хост, флагове ('-', '@', '+', или '*'), минути покой,
	и away съобщението (празно поле ако потребителят не е away)
      ако определите канал като * всеки потребител в botnet се показва с
	допълнителен аргумент - каналът в който е

  getdccidle 
    връща: номер в секунди за това колко време не е активен dcc chat/file system/script
 	потребител

  getdccaway 
    връща: away съобщението на потребител от dcc (или "" ако потребителят не е
      away)

  setdccaway  <съобщение>
    слага съобщение на потребител от party line и го маркира като away; ако се сложи
      "", потребителят се смята за завърнал се
    връща: нищо

  connect <хост> <порт>
    прави опит за връзка и създава dcc запис за нея;
      'control' командата трябва да се използва веднага след испещна връзка
    връща: idx на новата връзка

  listen <порт> <вид> [опции] [флаг]
    отваря порт за да приема заявки за телнет; типът трябва да е един от
      "bots", "all", "users", "script", или "off":

  listen <порт> bots [маска]
    прима връзки само от ботове; оптималната маска се използва за
	да идентифицира допустимите ботове;
    връща: порт #

  listen <порт> users [маска]
    приема връзки само от потребители (без ботове); оптималната маска се използва за
	да идентифицира допустимите псевдоними;
    връща: порт #

  listen <порт> all [маска]
    позволява връзки от всекиго; оптималната маска е нужна за да се идентифицира 	
	псевдоним/бот
    връща: порт #

  listen <порт> script <процес> [флаг]
    приема връзки които моментално се предават на процеса: idx на новата връзка
    в момента може да е само 'pub', което кара ботът да позволява на всички
    да се свръзват.
    връща: порт #

  listen <порт> off
    затваря даденият порт
    връща: нищо

  dccdumpfile  
    dumps out a file from the text directory to a dcc chat user;
    the flag matching that's used everywhere else works here too

*** MISCELLANEOUS COMMANDS ***

  bind <тип> <атрибут(и)> <име на командата> [име на процедурата]
    добавя нова команда по ключова дума към бота; валидните типове да описани
      по-долу; <атрибут(и)> са флаговете, които потребителя трябва да има, за да
      се задейства командата; <име на командата> за всеки тип са описани по-долу;
      [име на процедурата] е името на процедурата, която TCL ще извика за командата
      (вижте по-долу какъв трябва да бъде формата на процедурата); ако
      <име на командата> е пропуснат, bind-а няма да бъде добавен -- вместо това,
      текущият bind ще бъде върнат (ако е stackable, лист с текущите bind-ове ще се
      върне) да, можете да използвате новият флаг bind метод тук също, и ето къде
      става изключително мощен, защото няма нужда да правите проверки на потребителските
      флагове в функцията отново... преставете си:
        bind pub -o&+o command command_proc
      да позволите само на специалните оператори в канала да използват командата! Работи добре!
      връща: име на командата, която е добавена, или (ако <име на командата> не е зададено),
      списък с текущите bind-ове за тази команда.

  unbind <тип> <атрибут(и)> <име на командата> <име на процедурата>
    премахва вече дефиниран bind
    връща: името на командата, която е била премахната

| binds ?вид/маска?
|  връща: лист с tcl байнднатите команди, всеки елемент от листа има следните 5 елемента:
|    {<вид> <флагове> <име> <избирания> <процес>}

  logfile [<модове> <канал> <име на файлът>]
    създава нов лог файл, който ще записва модовете зададени за каналът -- или,
	ако не е зададен лог файл, просто връша лист с лог файловете;
	"*" може да се използва със значение на всички канали; можете също така 
	да промените модовете и каналът на същестуващ лог файл. Задавайки празна
	стойност за модове и канал кара ботът да спре да записва за даденият канал.
    връща: име на файл или създава файл, или (ако не е задаедн лог файл) лист с
      лог файловете като: "{mco * eggdrop.log} {jp #lame lame.log}"

  maskhost <псевдоним!идент@хост>
    връща: хостмаск за даденият стринг ("n!u@1.2.3.4" -> "*!u@1.2.3.*",
      "n!u@lame.com" -> "*!u@lame.com", "n!u@a.b.edu" -> "*!u@*.b.edu")

  timer <минути> 
    изпълнява tcl команда след определен брой минути
    връща: timerID

  utimer <секунди> 
    изпълнява tcl команда след определен брой секунди
    връща: timerID

  timers
    връща: лист от активните таймери в минути; всеки запис в листа съдържа номер
	в минути който му остава до активизация, командата която представлява и
	timerID

  utimers
    връща: показва активните таймери в секунди, идентични по формат с 'timers'

  killtimer 
    премава таймер в минути от листата
    връща: нищо

  killutimer 
    премахва таймер в секунди от листата
    връща: нищо

  unixtime
    връща: дълъг integer който представлява текущото време според unix

  duration <секудни>
    връща: номер в секунди конвериран в години, седмици, дни, часове,
      минути, и секунди. 804600 секунди се превръща в 1 седмици 2 дена
      7 часа 30 минути.

  strftime  [време]
    връща: форматиран стринг от време използващ стандарният strftime
      формат, използва стойноста на време, или сега ако не е зададено време

  ctime 
    връща: форматиран date/time стринг базиран на текущите настройки,
	от даденият unix time стринг; "Fri Aug  3 11:34:55 1973"

  myip
    връща: дълъг номер представляващ IP адресът на ботът, както може
      да изглежда (например) при DCC заявка

  rand <ограничение>
    връща: рандом integer н/у 0 и ограничение-1

  control  <команда>
    премахва потребител от party line и изпраща всички следващи входове към TCL командата,
      която е зададена; командата ще бъде повикана с два параметъра:
      idx на потребителя, входящият текст; командата трябва да върне "0" при добре
      свършена работа и 1, за да индикира, че оставя контрола на потребителя отново на бота;
      idx трябва да е за потребител или в party line зоната или в файл зоната; ако текста вход
      е празен (""), индикира, че dcc потребителя е прекъснал връзката. Съшо така, ако текста
      вход е празен, не използвайте killdcc на него, ще се провали с "invalid idx".
    връща: нищо

  sendnote <от> <за> <съобщение>
    симулира изпращане на съобщение от един потребител към друг (това може да се направи  
	и през ботнетът)
    връща: "1" ако съобщението е прието или изпратено към друг бот,
      "2" ако съобщението е запазено локално, "3" ако кутията на потребителят е твърде
	пълна за да запише съобщението, "4" ако Tcl binding прихваща съобщението, "5" ако
      съобщението е запазено защото потребителят е away, или "0" ако изпращането се провали

  link [via-bot] <бот>
    опит да се свърже директно към друг бот (или, ако го правите през друг бот,
      казва на другият бот да опита)
    връща: "1" ако изглежда добре и ще опита; "0" ако не

  unlink <бот>
    опитва се да махне бот от botnet
    връща: "1" ако успее; "0" ако не

  encrypt <ключ> <стринг>
    връща: encrypted стринг (използвайки blowfish), декодиран в ascii използвайки
      base-64, така че може да бъде изпратен през botnet-ът

  decrypt <ключ> <64 битов базиран криптиран стринг>
    връща: decrypted стринг (използвайки blowfish)

  encpass <парола>
    връща: encrypted стринг (използвайки blowfish)

  die [причина]
    кара ботът да се спре незабавно; ако не е дадена причина се използва "EXIT"

  unames
   връща:  Текущата операционна система която ползва ботът.

  dnslookup  <процес> [[аргумент1] [аргумент2] ... [аргументХ]]
    Задава dns lookup заявка. Командата няма да се осъществи ако
    dns модулът не е зареден, в противен случай ще връене резултат или веднага 
    или веднага след като извика процеса (т.е: ако lookup-а вече е кеширан).
    Веднага щом заявката бъде изпълнена , <процеса> ще се извика както следва:
      <процес> ip_адрес хост статус [[аргумент1] [аргумент2] ... [аргументХ]]
    статусът е 1 ако lookup е успешен и 0 ако не е. Всички други допълнителни 
    параметри (като аргумент1, аргумент2 и аргументХ) биват добавени към другите
    параметри на процесът.

  md5 <стринг>
    връща: 128 битово MD5 съобщение от даденият стринг.

| callevent 
|   Задейства процес ръчно. Например:
|     callevent rehash

ГЛОБАЛНИ ПРОМЕНЛИВИ:
  (Всички config-file променливи са глобални. Но тези променливи се задават от бота.)

  botnick
    текущият псевдоним който използва ботът; "Valis", "Valis0", др.

  botname
    текущият nick!user@host който сървърът вижда; "Valis!valis@crappy.com"

  server
    текущият сървър който ботът използва; "irc.math.ufl.edu:6667"

  version
    текущата версия на ботът "1.1.2+pl1 1010201 pl1";
      първото е версията, следвано от цифровата версия,
      и всяко следващо са имената на пачовете които са добавяни

  numversion
    текущата цифрова версия на ботът "1010201";
      Цифровата версия е "MNNRRPP" където:
        M  е по-големият издаден номер
        NN е по-малкият
        RR е междинният
        PP е пач левелът за този междинен номер

  uptime
    unixtime стойноста за това кога ботът е бил стартиран

  server-online
     unixtime стойноста за това кога ботът се е свързал за текущият сървър

  lastbind
    Последната команда която е била използвана.

| isjuped
|   стойноста е 1 ако псевдонимът на ботът е juped(437), в противен случай 0.


***### NOTES МОДУЛ КОМАНДИ ###***

тези команди са добавени от notes.so за да ви позволяват да запазвате
съпбщения за потребители които да ги четат по късно

  notes <потребител> [номер на листа]
    получавате информация за съобщенията запазени за потребителят
    връща: (ако сте задали число) номер на съобщението за потребителят,
             -1 ако няма такъв потребител, -2 ако ноте файлът го няма, 0 
	     ако няма такова съобщение. Всяко съобщение в листът е само
	     по себе си лист: първи елемент от кого, втори елемент 
             timestamp, 3rd съобщението само по себе си. 
	     ('notes mynick "2-4;8;16-"')

  erasenotes <потребител> <номер на листа>
    изтрива едно или всички запазени съобщения за потребител
    връща: -1 ако няма такъв потребител, -2 ако ноте файлът го няма, 
	     0 ако няма такова съобщение, или номер.
             'erasenote mynick "-"' изтрива всички съобщения за mynick.

  listnotes <потребител> <номер на листа>
    показва същестуващите съобщения според номера в листа (пример: "2-4;8;16-")
    връща: -1 ако няма такъв потребител, -2 ако ноте файлът го няма,
             0 ако няма такова съобщение, или номер.

  storenote <от> <за> <съобщение> 
    записва съобщение за по-късно прочитане, известява idx за полученото съобщение
    (използвайте idx == -1 ако искате да не го известява).
    връща: 0 при успеь non-0 при провал

***### ASSOC МОДУЛ КОМАНДИ ###***

  assoc <канал> [име]
    слага име свързано с името на botnet каналът, ако зададете такова 
    връща: текущото име на каналът, ако има такъв

  killassoc <канал>
    премахва име свързано с botnet канал, ако същестува,
    използвайте 'killassoc &' за да премахнете всички assocs.
    връща: нищо

***### COMPRESS МОДУЛ КОМАНДИ ###***

  compressfile [-level ]  [target-file]
  uncompressfile  [target-file]
    Компреси ра или разкомпресира файлове. Левел опцията определя компресията.
    Възможните опции са от 0 до 9. Ако не зададете 'target-file', 'src-file' 
    ще бъде препокрит.

  iscompressed <име на файл>
    Определя кога <файлът> е в gzip компресия. Връща "1" ако е,
    "0" ако не е и "2" ако някакъв вид грешка попречи на проверката.

***### FILE SYSTEM МОДУЛ КОМАНДИ ###***

  setpwd  <директория>
    променя директорията на file system потребител, в точният вид в който
    'cd' го прави. 
    връща: нищо

  getpwd 
    връща: текущата директория на file system потребител

  getfiles <директория>
    връща: лист от файлове в зададената директория; 

  getdirs <директория>
    връща: лист от поддиректориите в дадена директория

  dccsend <име на файл> <псевдоним>
    опит за dcc файл трансфер към даденият псевдоним; файлът трябва да бъде 
      описан с цялата си патечка или да е в стартовата директория на ботът
    връща: "0" при успешно изпращане, "1" ако dcc таблицата е пълна (твърде
      много връзки), "2" ако не може да отвори сокет за трансферът, "3" ако 
      файлът не съществува, и "4" ако файлът се остави за по късно изпращане
      (което ще рече, че потребителят има твърде много трансфера в момента)

  filesend  <име на файл> [псевдоним]
    както при dccsend, само че оперира за текущият filesystem потребител
    връща: "0" при неуспех; "1" при успех 

| fileresend  <име на файл> [псевдоним]
|   както filesend, само че стартира DCC RESEND вместо DCC SEND,
|     което позволява на хората да възтановят прекъснат файл трансфер ако клиентът им
|     поддържа протоколът. ircII/BitchX/и др. го поддържат mIRC не.
|   връща: "0" при провал; "1" при успех 

  setdesc <директория> <файл> <опесание>
    слагате описание на файл в дадената директория;
     връща: нищо

  getdesc <директория> <файл>
    връща: описание на файлът в директорията, ако такъв съществува

  setowner <директория> <файл> <име>
    променя собственоста на файл в директорията; 
    връща: нищо

  getowner <директория> <файл>
    връща: собственикът на файл в директорията

  setlink <директория> <файл> <връзка>
    създава или променя свързани файлове (файл който съществува в друг бот);
    връща: нищо

  getlink <директория> <файл>
    връща: връзката за свързан файл, ако същестува

  getfileq <име>
    връща: лист с файловете които на някого; всеки елемент в листът се характеризира
      с два елемента: псевдоним на който принадлежи файлът, и името на файлът

  getfilesendtime 
    позволява ви да разберете unix времето когато файл трансфер започне.
    връща: "-1" когато няма трансфеер за даденият idx, "-2" когато idx не
      съвпада с файл трансфер

  mkdir <директория> [<нужни флагове> [канал]]
    създава директория в файловата система, само потребители с дадените флагове могат
    да влизат в нея
    връща:
      0 при успех
      1 при невъзможност да създаде директорията
      2 при 'directory exists' но това не е директория

  rmdir <директория>
    изтрива директория от файловата система
    връща: 0 при усшец, 1 при провал

  mv <файл> <описание>
    премества файл от едно място на друго, могат да се местят и по много файлове,
    тоест /incoming/*
    връща: номерър на файловете които са копирани при успешна операция;
      -1 = невалиден файл, -2 = невалидно местоположение
      -3 = ако се опитвате да го копирате в/ самият него (duh!) -4 = няма съвпадение

  cp <файл> <местопредназначение>
    същото както 'mv', само че оставя оригиналният файл на мястото му
    връща: същото катко при mv

  getflags <директория>
    връща: флагът нужен за да се влезе в дадената директория

  setflags <директория> [<флагове> [канал]]
    слага нужните флагове за достъп в директорията
    връща: 0 при успех, -1 при неуспех


*** BIND ***

  Можете да използвате 'bind' командата, за да извикате определени TCL
  процедури, когато е засечено някакво определено действие. Например, можете
  да напишете TCL процедура, която се извиква всеки път, когато потребител
  каже 'opastnost' в канала.

  Някои bind типове са отбелязани като "stackable". Това означава, че можете
  да прекрепите няколко команди към едно и също действие. Обикновенно, например,
  bind като 'bind msg - spri msg:spri' (което ще направи msg команда "spri", която
  ще извика TCL процедурата "msg:spri") ще препокрие всеки предишен bind, който сте
  направили за msg командата "spri". Със "stackable" bind-ове, като 'msgm' например,
  можете да bind същата команда към няколко процедури. Когато bind-а бъде засечен,
  ВСИЧКИ TCL процедури, които са bind, ще бъдат извикани.

  За да премахнете bind, използвайте 'unbind' командата. Например, за да премахнете
  bind-а за "spri" msg командата, използвайте 'unbind msg - spri msg:spri'.

  (A) BIND ТИПОВЕ

    Следващите неща са списък с bind типове и обяснение за това как работят.
    Под всеки bind тип е форматът на bind командата, списъкът с аргументите
    изпратени към TCL процедурата и обяснение.

    (1)  MSG
         bind msg <флагове> <команда> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <текст>

         Описание: използва се за /msg команди. Първата дума от потребителското
           msg е <командата>, и всичко останало става аргументи към <текст>.
         Модул: server

    (2)  DCC
         bind dcc <флагове> <команда> <процедура>
         име-на-процедурата   <текст>

         Описание: използва се за partyline команди; <командата> е първата
           дума и всичко останало става аргументи към <текст>.  е валиден,
           докато потребителя не излезе. След това, може да бъде използван от друг
           потребител, така че бъдете много внимателни когато запазвате idx за дълги
           периоди от време.
         Модул: core

    (3)  FIL
         bind fil <флагове> <команда> <процедура>
         име-на-процедурата   <текст>

         Описание: същото като DCC, само че задейства bind-а само, ако потребителя
           е в файл зоната, а не в party line-а.
         Модул: filesys

    (4)  PUB
         bind pub <флагове> <команда> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал> <текст>

         Описание: използва се за команди от канала. Първата дума е <командата>, а
           всичко останало е аргумент към <текст>.
         Модул: irc

    (5)  MSGM (stackable)
         bind msgm <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <текст>

         Описание: гледа за съвпадение цялата линия на текста от /msg с <маската>.
           Това е полезно, когато искате да извиката TCL процедура, при казването на
           определена фраза или дума независимо къде се намира тя в текста.
         Модул: server

    (6)  PUBM (stackable)
         bind pubm <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал> <текст>

         Описание: съшото като MSGM, само че се задейства от неща казани в канала,
           а не неща казани с /msg към бота. Съвпадението с <маската> ще буде направено
           срещу името на канала последвано от текста и може да съдържа ?, *, %, ~.
         Модул: irc

    (7)  NOTC (stackable)
         bind notc <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <текст> <цел>

         Описание: <Цел> ще бъде или псевдоним (очевидно това ще бъде псевдонима на бота),
           или името на канал. Съвпадението с <маската> ще бъде направено срещу целият
           notice и може да съдържа ?, *, %, ~. Смята се за нарушение на протокола, когато се
           отговаря на /notice в IRC, затова това е планирано само за вътрешно използване
           (логване, и т.н.). Забележете, че NOTC bind не задействат server notice-ите.

           Новите TCL процедури трябва да се декларират така:
             proc notcprotzedurata {psewdonim identhost hand tekst {tzel ""}} {
               global botnick; if {$tzel == ""} {set dest $botnick}
               ...
             }
           За съгласуваност.
         Модул: server

    (8)  JOIN (stackable)
         bind join <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал>

         Описание: задейства се, когато някой влезе в канала. <маската> ще бъде сравнена с
           "#канал псевдоним!идент@хост" и може да съдържа ?, *, %, ~.
         Модул: irc

    (9)  PART (stackable)
         bind part <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал> <съобщение>

         Описание: задейства се, когато някой изелзе от канал. <маската> ще бъде сравнена с
           "#канал псевдоним!идент@хост" и може да съдържа ?, *, %, ~. Ако не е зададено съобщение
           при излизане, <съобщение> ще бъде "".

           Новите Tcl процедури трябва да се декларират така:
             proc partprotzedurata {psewdonim identhost hand kanala {syobstenie ""}} { ... }
           За съгласуваност.
         Модул: irc

    (10) SIGN (stackable)
         bind sign <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал> <причина>

         Описание: Задейства се при /quit, или може би, когато някой излезе, заради netsplit и
           не се е върнал. Съобщението от /quit е последният аргумент на процедурата. ?, *, %, ~ може
           да се използват <маската>, която ще се сравни с '#канал псевдоним!идент@хост'.
         Модул: irc

    (11) TOPC (stackable)
         bind topc <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал> <топик>

         Описание: задейства се при смяна на топика. <Маската> може да съдържа ?, *, %, ~ и тя ще се
           с '#канал <новият топик>'.
         Модул: irc

    (12) KICK (stackable)
         bind kick <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал> <обект> <причина>

         Описание: задейства се, когато някой изрита потребител от канала. <Маската>
           се сравнява с '#канал обект', където обект е псевдонима на потребителя, който
           е бил изритан (може да съдържа ?, *, %, ~). Процедурата се извиква с псевдоним,
           идент@хост, и handle на този, който изритва потребителя, както и канала, псевдонима
           на потребителя, който е бил изритан и причината; флаговете се игнорират.
         Модул: irc

    (13) NICK (stackable)
         bind псевдоним <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал> <новият-псевдоним>

         Описание: задейства се, когато някой си смени псевдонима. <Маската> се сравнява
           с '#канал новият-псевдоним' и може да съдържа ?, *, %, ~.
         Модул: irc

    (14) MODE   (stackable)
         bind mode <флагове> <маска> <процедура>
         име-на-процедура <псевдоним> <идент@хост>  <канал> <сменен-мод> <жертва>

         Описание: смяната на модовете се разделят на части преди да бъдат пратени тук, така че
           <смененият-мод> винаги ще бъдат единичен мод, като"+m" или "-o". Жертвата ще показва
           аргументите зададени към смененият мод (за o/v/b/e/I) или "", ако не се изисква
           аргумент за този мод. Флаговете се игнорират. Автоматичният отговор на бота за мода ще
           бъде направен СЛЕД извикването на всички TCL процедури. <Маската> ще се сравни с 
           '#канал +/-модове' aи може да съдържа ?, *, %, ~.

           Ако е сървърски мод, псевдонимът ще бъде "", идент@хост ще бъде името на сървъра 
           и handle ще е *.

           Забележете, че "жертвата" е добавена към 1.3.23 и това ще провали работата
           на TCL скриптовете написани за pre-1.3.23 версии, които използват този bind.
           Бърз и лесен fix (от guppy) следва (пример):

           Старите скриптове изглеждат така:
             bind mode - * mode_protzedura
             proc mode_protzedura {psewdonim identhost hand kanal mc} { ... }

           За да го направите да работи за 1.3.23+ и все още да е съвместимо със старите ботове,
           направете:
             bind mode - * mode_protzedura_fix
             proc mode_protzedura_fix {psewdonim identhost hand kanal mc {jertwa ""}} {
               if {$jertwa != ""} {append mc " $jertwa"}
               mode_protzedura $psewdonim $identhost $hand $kanal $mc
             }
             proc mode_protzedura {psewdonim identhoss hand kanal mc} { ... }
         Модул: irc


    (15) CTCP (stackable)
         bind ctcp <флагове> <ключова-дума> <процедура>
         име-на-процедура <псевдоним> <идент@хост>  <цел> <ключова-дума> <текст>

         Описание: <Цел> ще бъде псевдоним (очевидно псевдонимът на бота) или
           име на канал. <ключова-дума> е ctcp командата (която може да съдържа
           *, ?, ~, %), а <текстът> може да е празен. Ако процедурата върне 0, ботът
           ще се опита да извърши своите вътрешни процедури като отговор на командата.
         Модул: server

    (16) CTCR (stackable)
         bind ctcr <флагове> <ключова-дума> <процедура>
         име-на-процедура <псевдоним> <идент@хост>  <цел> <ключова-дума> <текст>

         Описание: Също като ctcp, но се задейства при ctcp-отговор
           (ctcp се съдържа в notice, а не в privmsg)
         Модул: server

    (17) RAW (stackable)
         bind raw <флагове> <маска-за-ключовата-дума> <процедура>
         име-на-процедурата <от-кого> <ключова-дума> <текст>

         Описание: предишните версии на Eggdrop се нуждаеха от специални опции
           при компилиране, за да включат този bind, но сега е стандартен.
           <Маската> ще бъде сравнена с <ключова-дума> (или с numeric, като "368",
           или <ключова дума> като "PRIVMSG"). <От-кого> ще бъде или името на сървъра
           или от кой потребител идва съобщението (зависейки от <ключовата-дума>);
           флаговете се игнорират. Последователността на аргументите е идентичен на
           последователността изпратен от IRC сървъра към бота. Пре-процедурата само
           разделя RAW-а, така че да може да се определи <ключовата дума>. Ако
           процедурата върне 1, Eggdrop  няма да изпълни никакви следващи процедури
           (това може да довете до странно поведение при вашият бот в някои случаи).
         Модул: server

    (18) BOT
         bind bot <флагове> <команда> <процедура>
         име-на-процедура <бот-изпращач> <команда> <текст>

         Описание: задейства се при съобщение идващо от друг бот от ботнета. 
           Първата дума е командата, а останалото са аргументи към <текст>;
           флагове се игнорират.
         Модул: core

    (19) CHON (stackable)
         bind chon <флагове> <маска> <процедура>
         име-на-процедура  

         Описание: когато някой влезе в party-line зоната на бота чрез
           dcc chat или telnet в началото се извиква този bind, преди те да
           се свържат към чат канал (така че... да можете да смените
           канала в 'chon' процедурата). <Маската> се сравнява с 
           handle и може да съдържа ?, *, %, ~. Този bind не се задейства, когато
           някой се върне от файл зоната, и т.н.
         Модул: core

    (20) CHOF (stackable)
         bind chof <флагове> <маска> <процедура>
         име-на-процедура  

         Описание: задейства се, когато някой напусне party line-а. Сравнението
           на <маската> ще бъде направено с handle и може да съдържа ?, *, %, ~.
           Забележете, че връзката вече може да е прекъсната, така че не пращайте
           никакви изходни данни към idx.
         Модул: core

    (21) SENT (stackable)
         bind sent <флагове> <маска> <процедура>
         име-на-процедура  <псевдоним> <път/до/файл>

         Описание: след като потребител вече е получил файл от бота благополучно,
           bind-а ще се задейства. Сравнението на <маската> ще бъде направено
           с handle на потребителя, който е осъществил трансфера и <маската> може
           да съдържа ?, *, %, ~. <псевдоним> е истинският получател (в IRC) на файла.
           Пътят е свързан с dcc директорията (освен ако файл трансферът не е  
           задействан от скрипт, който е извикал 'dccsend', в който случай пътят
           е точният път зададен при извикването на 'dccsend' командата).
         Модул: transfer

    (22) RCVD (stackable)
         bind rcvd <флагове> <маска> <процедура>
         име-на-процедура  <псевдоним> <път/до/файл>

         Описание: задейства се, когато потребител вече е уплоаднал успешно файл.
           Сравенението на <маската> ще бъде направено с потребителският handle.
           <Псевдонимът> е името на псевдонима в IRC на човека, който е уплоаднал
           файла. Пътят сочи към директориятя където файлът е сложен, свързан с
           dcc директорията (обикновенно това е вашата incoming директория).
         Модул: transfer

    (23) CHAT (stackable)
         bind chat <флагове> <маска> <процедура>
         име-на-процедура  <канал#> <текст>

         Описание: когато някой каже нещо в ботнета, се задейства този bind.
           Флаговете се игнорират; handle може да бъде потребител на този бот
           ("DronePup") или на друг бот ("Eden@Wilde") и затова не можете да
           разчитате само на локалните потребителски записи. Сравнението 
           на <маската> отново ще бъде направнео с цялата линия на текста и 
           поддържа ?, *, %, ~.
         Модул: core

    (24) LINK (stackable)
         bind link <флагове> <маска> <процедура>
         име-на-процедура <име-на-бота> <чрез>

         Описание: задейства се, когато някой бот се свърже към ботнета.
           <име-на-бота> е псевдонимът на бота, който туко що се е свързал;
           <чрез> е ботът, чрез който се е свързал новият бот в ботнета.
           Сравнението на <маската> ще бъде направена с името на псевдонима,
           който се свърза към ботнета и поддържа *, ?, %, ~. Флагове се игнорират.
         Модул: core

    (25) DISC (stackable)
         bind disc <флагове> <маска> <процедура>
         име-на-процедура <име-на-бота>

         Описание: задейства се, когато ботът излезе от ботнета, поради каквато
           и да е причина. Също като link bind-а, флагове се игнорират;
           сравнението на <маската> ще бъде направено с името на псевдонима на бота,
           който е разкачен и <маската> може да съдържа ?, *, %, ~.
         Модул: core

    (26) SPLT (stackable)
         bind splt <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал>

         Описание: задейства се, когато някой излезе, поради от канал.
           Забележете, че това може да е фалшива тревога (лесно е да се
           фалшивицира netsplit signoff съобщение на някои мрежи);
           Сравнението на <маската>, която може да съдържа ?, *, ~, %, се 
           прави с '#канал псевдоним!идент@хост'. Всеки, който е SPLT
           ще задейства или REJN, или SIGN до следващите wait-split
           (дефиниран във конфигурационният ви файл) минути.
         Модул: irc

    (27) REJN (stackable)
         bind rejn <флагове> <маска> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <канал>

         Описание: някой пресъединил се от split. Сравнението на
           <маската>, която може да съдържа ?, *, ~, %, се прави
           с '#канал псевдоним!идент@хост'.
         Модул: irc

    (28) FILT (stackable)
         bind filt <флагове> <маска> <процедура>
         име-на-процедурата  <текст>

         Описание: потребителите от party line-а и файл системата ще бъдат прекарани
           първо през filt (филтър) и след това към другире процедури. Ако процедурата
           върне празен стринг, текстът се смята за преработен. В противен случай, ботът
           ще използва текстът върнат от процедурата и ще продължи да обработва него.
         Модул: core

    (29) NEED (stackable)
         bind need <флагове> <маска> <процедура>
         име-на-процедурата <канал> <тип>

         Описание: този bind се задейства при някои определени действия,
           например когато ботът се нуждае от опреторски статус в канал или
           му трябва ключ за даден канал. Типовете са: op, unban, invite,
           limit, и key; Сравнението на <маската> ще бъде направено с 
           '#канал тип' ии може да съдържа ?, *, ~, %. Флагове се игнорират.

           Пирмери:
             bind need - "% op" needop < задейства се само при нужда от +o
             bind need - "*" needall   < задейства се при всички нужди
         Модул: irc

    (30) FLUD (stackable)
         bind flud <флагове> <тип> <процедура>
         име-на-процедурата <псевдоним> <идент@хост>  <тип> <канал>

         Описание: всеки флуд засечен от настройките за флуд (като 'flood-ctcp')
           се пращат първо тук преди да бъдат обработени. Ако процедурата върне
           1, няма да се вземат никакви други действия срещи флуда; ако процедурата
           върне 0, ботът ще извърши своето нормално "наказание" за флуда.
           Флуд типовете са: pub, msg, join, или ctcp (и могат да бъдат маскирани
           като "*" при bind); Флаговете се игнорират.
         Модул: server

    (31) NOTE
         bind note <флагове>  <процедура>
         име-на-процедурата <от> <към> <текст>

         Описание: идващите съобщения (notes) (или от party line-а, или от някой IRC,
           или път от друг бот от ботнета) се проверяват от тези binds преди да бъдат
           пратени за понататъчно обработване. Ако bind съществува, ботът няма да
           достави съобщението (note).  трябва да бъде точен (без *, ?, %, ~),
           но не се правят разлики между малки и големи букви; Флагове се игнорират.
         Модул: core

    (32) ACT (stackable)
         bind act <флагове> <маска> <процедура>
         име-на-процедура  <канал#> <действие>

         Описание: когато някой направи действие (action) на ботнета, се включва този bind.
           Флаговете се игнорират; Сравнението на <маската>, която може да съдържа ?, *, %, ~,
           се прави с текста от действието.
         Модул: core

    (33) WALL (stackable)
         bind wall <флагове> <маска> <процедура>
         име-на-процедура  <съобщение>

         Описание: когато ботът получи wallops, се задейства този bind; Флаговете се
           игнорират; Сравнението на <маската> се прави с текстът от wallops съобщението.
         Модул: server

    (34) BCST (stackable)
         bind bcst <флагове> <маска> <процедура>
         име-на-процедура <име-на-бота> <канал#> <текст>

         Описание: когато ботът съобщи нещо на ботнета (вижте 'dccbroadcast' по-горе),
           се задейства този bind. Флаговете се игнорират; Сравнението на <маската>
           се прави със съобщението от текст и може да съдържа ?, *, % , ~.
         Модул: core

    (35) CHJN (stackable)
         bind chjn <флаг> <маска> <процедура>
         име-на-процедура   <канал#> <флаг>  <идент@хост>

         Описание: когато някой влезе в канал от ботнета, се задейства
           този bind. when someone joins a botnet канал, it invokes this
           binding.  Сравнението на <маската> се прави с канала и може да
           съдържа ?, *, % , ~. Флагът може да бъде един от тези:
           * (owner), + (master), @ (op), или % (ботнет master).
         Модул: core

    (36) CHPT (stackable)
         bind chpt <флагове> <маска> <процедура>
         име-на-процедура <име-на-бот>   <канал#>

         Описание: когато някой излезе от канал от ботнета, се задейства този
           bind. Флаговете се игнорират; Сравнението на <маската> се прави с
           канала и може да съдържа ?, *, % , ~. 
         Модул: core

    (37) TIME (stackable)
         bind time <флагове> <маска> <процедура>
         име-на-процедура <минута> <час> <ден> <месец> <година>

         Описание: позволява ви да въртите определена процедура през определен
           период от време. <Маската> съвпада с 5 цели числа разделени със празни
           места, те са в следния формат: "минута час ден месец година".
           Минута, час, ден и месец имат нула пред себе си когато са единични, така че
           са винаги точно два символа дълги; година е точно четери символа.
         Модул: core

    (38) AWAY (stackable)
         bind away <флагове> <маска> <процедура>
         име-на-процедура <име-на-бота>  <текст>

         Описание: задейства се, когато някой потребител излезе с away или се back (върне)
           на ботнета. <Текст> е причината, която е била зададена (тексът е "", когато
           потребителя се връща). Сравнението на <маската> се прави с името на псевдонима
           на бота, към който потребителят е свързан, и може да съдържа ?, *, % , ~.
           Флагове се игнорират.
         Модул: core

    (39) LOAD (stackable)
         bind load <флагове> <маска> <процедура>
         име-на-процедура <модул>

         Описание: задейства се, когато се зареди модул. Сравнението на <маската> се
           прави с името на модула и може да съдържа ?, *, % , ~. Флагове се игнорират.
         Модул: core

    (40) UNLD (stackable)
         bind unld <флагове> <маска> <процедура>
         име-на-процедура <модул>

         Описание: задейства се, когато някой модул се премахне. Сравнението на <маската> се
           прави с името на модула и може да съдържа ?, *, % , ~. Флагове се игнорират.
         Модул: core

    (41) NKCH (stackable)
         bind nkch <флагове> <маска> <процедура>
         име-на-процедура <стар-handle> <нов-handle>

         Описание: задейства се, когато handle-а на локален потребител се смени
           (в потребителският файл). Сравнението на <маската> се прави със старият
           handle на потребителя и може да съдържа ?, *, % , ~. Флагове се игнорират.
         Модул: core

    (42) EVNT (stackable)
         bind evnt <флагове> <тип> <процедура>
         име-на-процедура <тип>

         Описание: задейства се, когато някоя от тези действия се случи.
           Флаговете се игнорират; валидните действия са:
             sighup     - задейства се при kill -HUP 
             sigterm    - задейства се при kill -TERM 
             sigill     - задейства се при kill -ILL 
             sigquit    - задейства се при kill -QUIT 
             save       - задейства се, когато потребителският файл се запазва
             rehash     - задейства се точно след rehash
             prerehash  - задейства се точно преди rehash
             prerestart - задейства се точно преди restart
             logfile    - задейства се, когато дневно логовете се сменят
             loaded     - задейства се, когато ботът свършви зареждането си

             connect-server    - задейства се точно преди да се свръжем към IRC сървъра
             init-server       - задейства се точно при връзка с IRC сървъра ни
             disconnect-server - задейства се точно, когато се разкачим от IRC сървъра ни
         Модул: core

    (43) LOST (stackable)
         bind lost <флагове> <маска> <процедура>
         име-на-процедура  <псевдоним> <път> <битове-предадени> <дължина-на-файла>

         Описание: задейства се, когато DCC SEND трансфера се "прецака" :), тогава когато
           връзката се прекъсне преди данните да бъдат успешно предадени/получени. Това
           обикновенно се случва при потребителски отказ.
         Модул: transfer

    (44) TOUT (stackable)
         bind tout <флагове> <маска> <процедура>
         име-на-процедура  <псевдоним> <път> <битове-предадени> <дължина-на-файла>

         Описание: задекства се, когато DCC SEND трансфера не върви за дълъг
           период от време независимо поради каква причина или когато
           трансфера изобщо не е бил приет.
         Модул: transfer


  (B) ВЪРНАТИ СТОЙНОСТИ

    Някои bind вземат под внимание стойността, която връща процедурата
    (използвайте 'return <стойност>'). Обикновенно те очакват или 0, или 1,
    а връщайки празен стринг е равносилно на 0. Внимавайте, когато пропуснете
    return, резултатът от последната TCL командата ще бъде върнат от процедурата
    вместо return. Това не винаги ще върне желаният от вас резултат (това е
    "подобрение" в TCL).

    Ето списък с bind-ове, които взимат под внимание върнатата стойност от процедурите,
    която са задействали:

    (1) MSG   Върнете 1, за да логнете командата така:
                (псевдоним!идент@хост) !handle! команда

    (2) DCC   Върнете 1, за да логнете командата така:
                #handle# команда

    (3) FIL   Върнете 1, за да логнете командата така:
                #handle# files: команда

    (4) PUB   Върнете 1, за да логнете командата така:
                <<псевдоним>> !handle! команда

    (5) CTCP  Върнете 1, за да "помолите" бота да не процедира CTCP командата.
              В противен случай той ще отговори на пратеното към него CTCP съобщение
              (обикновенно съобщениет за грешка, ако не знае как да се оправи с него).

    (6) FILT  Върнете "", за да индикирате, че текстът е бил процедиран, и ботът трябва
              просто да го игнорира. В противен случай той трябва да се отнесе с текста
              както всеки друг.

    (7) FLUD  Върнете 1, за да "помолите" бота да не предприема нищо срещу флуда.
              В противен случай той ще премине към нормалното наказание.

    (8) RAW   Върнете 1, за да накарате бота да не процедира сървърският текст.
              Това може да довете до проблеми, защото ботът няма да може да
              процедира нормално на нещата идвайки към него -- бяхте предупредени.

    (9) CHON  Върнете 1, за да "помолите" бота да не процедира partyline join действието.

    (10) CHOF  Върнете 1, за да "помолите" бота да не процедира partyline part действието.

    (11) WALL   Върнете 1, за да логнете командата така:
                 !псевдоним! съобщение

*** CONTROL ПРОЦЕДУРИ ***

  Използвайки 'control' команда, можете да контролирате DCC връзка (или излизаща
  TCP връзка) със скрипт. Всичкият текст приет от връзката се изпраща на определената
  процедура. Всичкият излизащ текст ще бъде изпратен с 'putdcc'.

  Control процедурата се вика с следните параметри:
    име-на-процедурата  <текст>

  Това ви позволява да използвате една прцедура за няколко връзки. Idx
  ще остане същият докато връзката прекъсне.

  За да означи, че връзката е затворена, вашата control процедура ще се
  извика с празен текст (текстът ще бъде ""). Това е единственият път когато
  ще бъде извикана с "" като текст, и ще бъде последният път когато процедурата
  ще се извика за тази връзка. Не викайте killdcc за idx когато текстът е празен,
  винаги ще се провали с "invalid idx".

  Ако искате да върнете контролът над връзките си обратно на Eggdrop, процедурата
  ви трябва да връща 1, в противен случай връщайте 0 за да вземете контролът.


*** TCP ВРЪЗКИ ***

  Eggdrop ви позволява да правите два вида TCP ("telnet") връзки:
  излизащи и пристигащи. За излизащи връзки, определяте отдалеченият хост
  и порт за връзка. За пристигащи, определяте портът на който да се очакват.

  За да стартирате излизаща връзка използвайте:
    set idx [connect <хост> <порт>]

  $idx съдържа нов DCC запиз за излизаща връзка.

  Всички връзки използват non-blocking (често наричани "asynchronous",
  които е погрешно) I/O. 

  Единственият път когато връзка ще върне грешка е когато хостът който сте
  задали не може да се резолвне (това се отнася до DNS). Ако връзката се провали
  веднага ще получите EOF.

  Веднага когато извикате 'connect' трябва да зададете 'control' за новият
  idx. След което, връзката ще продължи като нормална DCC връзка която е сложена
  под контрола на някой скрипт. Ако върнете "1" от контролната процедура (индикирайки
  че изкате да върнете контролът на Eggdrop), ботът ще затвори връзката. Други команди
  които работят с нормална DCC връзка, като 'killdcc' и 'putdcc', съшо ще работят с този idx.
  'killdcc' команда ще се провали с 'invalid idx', ако се опитате да я използвате за затворен
  сокет.

  За да създадете порт на който ботът да очаква връзка използвайте:
    listen <порт> script <процедура>

  Процесите трябва да се декларират като:
    <име-на-процедурата> 

  Например:
    listen 6687 script listen:grab

    proc listen:grab {newidx} {
      control $newidx listen:control
    }

    Когато нова връзка пристигне на порт 6687, Eggdrop ще създаде нов idx за връзката.
    Този idx се изпраща на 'listen:grab'. Процедурата веднага слага този idx под контрол.
    Веднъж щом е извикан 'listen:grab', idx се държи точно както излизаща връзка.

  Най-добрият начин да се научите тези команди е да намерите скриптове които ги използва.
  Надяваме се че това ви дава добро начало.


*** MATCH СИМВОЛИ ***

  Много от bind позволяват съвпадение на символи в аргументите. Ето ги четирите специални 
  символа:

  ?  съвпада с всеки единичен символ
  *  съвпада с 0 или повече символа от всеки вид
  %  съвпада с 9 или повече non-space символи (може да се използва за съвпадение с 
     единична дума)
  ~  съвпада с 1 или повече символи разделени с пространство