• На проекте открылась регистрация только для продавцов. Для обычных пользователей будет открыта позже. Подробнее.
    P.S. Не надо скидывать ссылки на форумы, где у вас ноль сообщений. Подобные заявки будут отклонятся.

Скриптинг Как сделать своего IRC бота (mIRC скриптинг)

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Сейчас расскажу, как сделать бота самому. Для этого потребуется два mIRC клиента, первЫй это под которЫм вЫ сидите, а второй и будет наш бот :)
Заходим первЫм клиентом на сервак, и джойнимся на какойнить свободнЫй канал для тестов. Заходим тудаже вторЫм клиентом(будущим ботом). Жмем во втором клиенте комбинацию клавишь Alt+R, откроеться окно в котором собственно и будем писать бота:) Пишем:

Код:
on *:TEXT:*прЫвет*:#:/msg $chan Здарова $nick, я $me супермега бот канала $chan :)

Теперь пишем первЫм клиентом в канале Всем прЫвет, если бот ответит, то все нормл :)
Объясняю сам скрипт:

  1. on – говорит мирку что будем обрабатЫвать какое либо собЫтие.
  2. * – уровень пользователя на собЫтие которого бот будет реагировать (* - реагировать на всех)
  3. TEXT – собЫтие на которое бот будет реагировать, в данном случае на текст
  4. *прЫвет* - какой текст бот будет отслеживать, в данном примере бот будет реагировать на все фразЫ содержашие слово прЫвет.
  5. # - реагируем только на текст появившийся на канале (? – в привате, * - для любого сообщения, #webcriminal – токо для данного канала)
  6. /msg – собственно сама команда, которую бот исполнит если на канале произнесут слово прЫвет (/describe - равна команде /me)
ЗЫ: вот и все :) теперь можете в мирковском хелпе посматреть какие собЫтия может обрабатЫвать мирк. Наберите /help on

Сейчас объясню как брать фразЫ из текстового файла. Изменим немного вЫшеописанЫй скрипт.

Код:
 on *:TEXT:*прЫвет*:#:if ( $nick != $me ) timerTEXT 1 3 msg # $read -u5 Texts\text.txt

  1. if ($nick != $me) – если ник не равен моему, то вЫполняем следуюшую команду.
  2. timerTEXT – запускаем таймер текст 1 сообщение за 3 секундЫ (это чтоб флуда небЫло)
  3. $read – читает одну строку из файла и вставляет ее в текущую позицию в алиасе.

Создайте в дириктории мирка папку Texts, а в ней текстовЫй файл text.txt, а в нем такие строчки:

Код:
ПрЫвет $nick коль не шутишь :)
Здарова, здарова $nick, тебе приведствует бот $me
Приветствую тебя на канале $chan

Теперь пишем на канале Всем прЫвет, и бот ответит какойнить фразой из текстового файла :)

ЗЫ: если возникнут вопросЫ спрашивайте.
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Поехали дальше, сейчас напихаем в бота еще пару скриптов:)

Сначала научим бота отвечать, если обращаются именно к нему, а то надоедает, когда бот влезает в разговор, и приходиться делать //mode $chan +m , и бота лишать статуса на канале :)

В скрипт пихаем такую строчку:
Код:
if ($count($1-,$me) != 0) { ... }
Объясняю, что он делает:
if ( ) { } – в круглЫх скобках находятся сравниваемЫе значения, а в фигурнЫх скобках находятся командЫ, которЫе будут вЫполненЫ, если значение в круглЫх скобках истеное (true).
Теперь поясняю, что делается в круглЫх скобках.
$count($1-,$me) != 0 - возвращает количество найденных подстрок $me в строке $1-. Поясняю, например, ник у бота DB0t и кто-нибудь пишет DB0t прЫвет. Произойдет следующее действие:
($count(DB0t прЫвет, DB0t) != 0 ) Скрип найдет 1 ник в строке, вследствие чего вЫполниться неравенство 1 != 0, и скрипт продолжит свою работу, если бЫ не написали ника команда бЫ не вЫполнилась. Здесь должно бЫть все понятно, ибо все разжевал :)

Далее напишем шуточнЫй скрипт «Русской рулетки»
Что скрипт будет делать:
Кто-нибудь на канале пишет !рулетка, после чего бот рандомно кикает кого-нибудь с канала.

Код:
Код:
on *:TEXT:!рулетка*:#:/timerPyJIetka 1 3 msg # Верчу, кручу, кого-то кикнуть хочу | /timerKick 1 4 kick $chan $nick($chan,$rand(1,$nick($chan,0))/nick) вот тебе и русская рулетка :)
Поясняю скрипт:
on *:TEXT:!рулетка*:#:/timerPyJIetka 1 3 msg # Верчу, кручу, кого-то кикнуть хочу – это думаю понятно :)
Стоит пояснить тока: $nick($chan,$rand(1,$nick($chan,0))/nick)
$nick($chan,N/nick) – возвращает N-Ый ник из списка ников канала $chan. Если вместо N поставим 1, то вернет первЫй ник из списка, но нам нужен случайнЫй ник, поэтому вместо N вставляем идентификатор $rand(1,$nick($chan,0)). $rand работает двояко, если указать числа, то он вернет случайное число между ними, если буквЫ, то букву. В нашем случае он будет вЫбирать число между 1 и количеством человек на канале. Количество ников на канале возвратит этот скрипт $nick($chan,0). Вот и все скрипт случайно вЫбирает номер ника из списка ников канала, и кикаеться :)

ЗЫ: в следующий раз расскажу, как сделать чтобЫ бот запоминал какую-нибудь фразу по команде пользователя. Например, сделаем цитатник, чтобЫ потом можно бЫло просмотреть сохраненЫе цитатЫ.
ЗЫ2: если есть вопросЫ или предложения пишите. Возможно, помогу :)
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Эмм как я понял у тебя не получилось с if ($count($1-,$me) != 0) { ... }

ПрЫмер: on *:TEXT:*сиськи*:#:if ($count($1-,$me) != 0) { msg # бивис он сказал сиськи :) }

когда на канале ктонить боту напишет фразу содиржащию слово сиськи, бот на это ответит "бивис он сказал сиськи"

[14:57:57] <ddd> cyko_bot сиськи епть
[14:57:57] <cyko_bot> бивис он сказал сиськи :)
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Эммм, я просто не успеваю :) Статья то большая вЫходит :)
Наверно за вЫходнЫе сделаю.
 

M03r

8айтовый
WebVoice
заодно напиши, как сделать так, что бы бот писал статус, по типу: /me трахнул весь мир.
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Чета я начал ту статью писать офигенно большую :) Вот решил кратко описать обещанное вЫше.

Для начала объясню, как сделать, чтобЫ бот запоминал фразЫ, по команде пользователя.

on *:TEXT:!добавить *:#:/write pacpac.txt $2-

Если написать !добавить <текст>, то в файл pacpac.txt запишется эта строчка. Например:
!добавить сиськи. В файл запишется сиськи.

Подробней про write можно посмотреть в миркхелпе в разделе КомандЫ mIRC.

Короткий пример, как бота заставить говорить от первого лица, тобишь /me.

on *:text:*трахнул*:#:/describe $chan трахнул $nick

/describe и есть альтернатива команде /me. Если кто-нибудь на канале напишет текст, содержащий слово трахнул, то бот напишет что он трахнул того человека, от первого лица :)
Пример:
Код:
  [21:16:47] <mArkus> мла меня трахнуло током :(
  [21:16:48] * cyko_bot трахнул mArkus
ЗЫ: все имена в примере вЫмЫшленЫ, любое сходство тупо стеб.
 

M03r

8айтовый
WebVoice
рульненько :) еще такая уйня, при логирировании после цитаты идут непонятные квадратики и циферки, при том только на 2 каналах, остальное все норм. моно как-нить этот мусор удалить?
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Это происходит из-за того что текст пишут цветнЫм, либо вЫделяют жЫрнЫм, подчеркиванием и тп :) Убрать это можно, в mIRC, где скриптЫ бота, жмешь Alt+o и там лезишь в IRC - сообщения, и там ставишь галки вЫрезать кодЫ из входящих сообщений. Бот больше вЫделений цветом и тому подобного не увидет :)
Это еще можно вЫрубить набрав в строке ввода /strip [+-burc] плюс включить, минус вЫключить.
Например:
/strip +bu
Будет вЫрезаться жЫрность и подчеркивание
b - жирнЫй
u - подчеркивание
r - инверсия
с - цвет
Можно пойти програмнЫм путем изменив скрипт:
Код:
до
 on *:TEXT:!добавить *:#:/write pacpac.txt $2-
после
 on *:TEXT:!добавить *:#:/write pacpac.txt $strip($2-)
$strip вЫрезает bold, underline, reverse, и colour из текста.
 

M03r

8айтовый
WebVoice
отличненько. теперь мне бы надо, чтобы он реагировал на сис. события, это реально? :)
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Как я понял под сис собЫтиями тЫ имел введу реагирование на заход, вЫход с канала например :)
пеши в строке ввода в мирке /help on, появиться справка по мирку о обработчиках собЫтий, там можешь вЫбрать on ACTION, on TEXT, on JOIN, on QUIT и тп. И почитать что тот или иной обработчик делает :)

Пример:
on *:PART:#covert:if ( $nick != $me ) { /splay -cwmpq coro.wav }

Если ктонибудь покинет канал #covert, то проиграет мелодия coro.wav

ЗЫ: чтобЫ поболее узнать про splay, набери в строке ввода в мирке /help /splay и жми энтр :)

ЗЫ2: надеюсь с обработчиками собЫтий все ясно :)
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Запишешь фразЫ "На канал пришли" и "С канала ушли", и спомошью сплай через собЫтия джоин и парт заставишь?)
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Боту необходимо сообщать скоко времени, каждЫй час он будет сообщать точное время :)
Код:
.timer00 0:00 1 1 describe $chan 12,7Марсианское время... 12,1  << П О Л Н О Ч Ь >>    Всех, кто не дрЫхнет, с НовЫм Днем поздравляю! :)
.timer01 1:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 1 ЧАС НОЧИ >>    Все, уже дрЫхнут давно... Наверное  :)
.timer02 2:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 2 ЧАСА НОЧИ >>
.timer03 3:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 3 ЧАСА НОЧИ >>
.timer06 6:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 6 ЧАСОВ УТРА >>    Кто - нибудь уже проснулся или нет? :)
.timer07 7:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 7 ЧАСОВ УТРА  >>    Пора вставать! :)
.timer08 8:00 1 1 describe $chan 12,7Марсианское время... 12,1 << 8 ЧАСОВ УТРА  >>    Всех с ДобрЫм Утром! :-)
.timer09 9:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 9 ЧАСОВ УТРА  >>    Уже все завтракали? :)
.timer10 10:00 1 1 describe $chan 12,7Марсианское время...  12,1 << 10 ЧАСОВ УТРА  >>    Скоро полдень :)
.timer11 11:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 11 ЧАСОВ  >>    Скоро полдень :)
.timer12 12:00 1 1 describe $chan 12,7Марсианское время... 12,1  << П О Л Д Е Н Ь  >>    Всем ДобрЫй День! :)
.timer13 13:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 13 ЧАСОВ  >> 
.timer14 14:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 14 ЧАСОВ  >> 
.timer15 15:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 15 ЧАСОВ  >> 
.timer16 16:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 16 ЧАСОВ  >> 
.timer17 17:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 17 ЧАСОВ  >>    Вот и еще один день кончается... :((
.timer18 18:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 18 ЧАСОВ  >>    Всем ДобрЫй Вечер!
.timer19 19:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 19 ЧАСОВ  >>    Ужинать пора... :)
.timer20 20:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 20 ЧАСОВ  >>    Всем на просмотр "Спокойной Ночи, МалЫши" :-)))
.timer21 21:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 21 ЧАС  >>    ДОМ-2 посмотрите, и спать :))
.timer22 22:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 22 ЧАСА >>    Эхх, еще чуть-чуть и спать...
.timer23 23:00 1 1 describe $chan 12,7Марсианское время... 12,1  << 23 ЧАСА >>    Всем доброй ночи...
Еще надо чтоб бот по запросу пользователя говорил скоко времени:
Код:
on *:text:!время*:#:timer1 1 3 msg # Сейчас $asctime(HH:nn:ss)
Подробней можно почитать в мирковском хелпе. "ИндификаторЫ времени и датЫ"
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Скрипт разговора в привате.

Жмем alt+r потом файл -> создать. Вставляем этот код:

Код:
on *:TEXT:*:?: { 
 .timer $+ $nick 1 60 closemsg $nick  ;;;Если в течении минутЫ боту нечего не ответят, приват 

закроеться.
 .timerUNSETPR_NICK 1 60 unset %Pr_Nick  ;;;СбрасЫвает значение переменной и удаляет ее из 

списка переменнЫх.
 .timerUNSETPR_PING 1 60 unset %Pr_Ping  ;;; -//-
 filter Texts\Data_Talks.txt talk_msg_chan.tmp $1-* 10* ;;;Команда сканирует файл на наличие 

указанного текста и записЫвает его в файл.
 ignore -u3 $nick ;;;Игнорит ник 3 секундЫ.

 if ($exists(talk_msg_chan.tmp) == $true) {  ;;;Возращает $true если файл существует
  if (%Pr_Ping != On) {
   set %Found_Talk_Msg_Chan $read talk_msg_chan.tmp | set %Reples_Talk_Line_Pr 

$right(%Found_Talk_Msg_Chan,6) ;;;ПересчитЫвает ранее вЫчесленЫе индификаторЫ и возвращает 6 

символов с права из индификатора.
   inc %Reples_Talk_Line_Pr | remove talk_msg_chan.tmp ;;;Увеличивает значение переменой, и 

удаляет файл *.tmp
    .timerREPLES_PR 1 3 msg $nick $read -1 %Reples_Talk_Line_Prv Texts\Data_Talks.txt | Halt 

;;;Халт останавливает скрипт.
   }
 }

 filter Texts\Data_Ping.txt Search_prv_Ping.tmp $1-
 if ($exists(Search_Pr_Ping.tmp)  == $true) { .timerREPLES_PONG 1 3 msg $nick где то это я уже 

слЫшал... | remove Search_Pr_Ping.tmp | Halt } ;;;Проверка на повтор фраз говоримЫх боту в 

приват.

 if ($exists(talk_msg_chan.tmp)  == $false) {
  if (%Last_Pr_Write == $1-) { .timerREPLES_PONG 1 3 msg $nick не повторяйся... | halt }
  if (%Ping_msg_Pr == On) { if (%Last_Prv_Nick != $nick) { Halt } }
 } 

 if (%Ping_msg_Pr != On) { write  Texts\Data_Ping.txt $1- | set %Last_Pr_Write $1- | 

set %Ping_msg_Pr On | .timerREPLESPONG 1 3 msg $nick $read -l1 Texts\Data_Ping.txt | 

set %Last_Pr_Nick $nick | halt } 

 inc %Write_Msg_Talk_Line 2 | write  Texts\Data_Talks.txt $read -l1 

Texts\Data_Ping.txt %Write_Msg_Talk_Line | write  Texts\Data_Talks.txt $1-
 write -dl1 Texts\Data_Ping.txt ;;;Запись текста в файл.
 set %Ping_msg_Pr Off 
 .timerREPLESPONG 1 3 msg $nick $read Texts\priv_Idle.txt
Потом жмем Файл -> Сохранить как, и сохраняем как Privat.ini
Незабудь создать папку Texts, и в ней Data_Talks.txt и Data_Ping.txt

И еще создаем файл priv_Idle.txt с содержимЫм:
Код:
:)
ах тЫ шалунишка :)
класс!!
я тащюсь!
ну вооще!
:(
я тебя понял..
да
думаешь?
мдя....
ну и что?
как это?
да уж...
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
Если хочешь чтоб твой бот незапоминал всякий мат, то перед скриптом привата, вставь фильтр мата:

Код:
;;;Фильтр мата в привате:
on *:text:*БАНУТ*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*банут*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick
on *:text:*бать*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*бля*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*Бля*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick
on *:text:*6ля*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick  
on *:text:*БЛЯ*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*андон*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*АЛУП*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*алуп*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*АНДОН*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*МАНД*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*манд*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*УДАК*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*удак*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*удило*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*П*И*З*Д*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*ПИЗД*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*пизд*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*ид*рас*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick
on *:text:* СУ*КА *:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:* сука *:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*cучка *:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*Х*У*Й *:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick
on *:text:*ХУЙ *:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*хуй*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*хуя*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*Хуй*:?:timerMATPRV 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*Ш*Л*Ю*Х*А*:?:timerMat 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick
on *:text:*шлюха*:?:timerMat 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick
on *:text:*UCK*:?:timerMat 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick 
on *:text:*uck*:?:timerMat 1 3 msg $nick не матерись сЦуко!!! | .timerCLOSEPRIVAT 1 60 closemsg $nick
 

ddd

(•̪̀●́)=o/̵͇̿̿/'̿̿ ̿ ̿̿
Команда форума
WebOwner
WebVoice
У твоего бота стопудоф будут смотреть версию и тп, кароче делать ctcp запросЫ. Так что сделаем свои ответЫ:

Код:
ctcp *:VERSION:*: .ctcpreply $nick VERSION <cyko_bot Version> | halt
ctcp *:PING:*: .ctcpreply $nick PING WIN! | halt
ctcp *:TIME:*: .ctcpreply $nick TIME извените часов нет :\ | halt
ctcp *:FINGER:*: .ctcpreply $nick FINGER отвали от меня :\ | halt

Добавляем это в скриптЫ.
 
Сверху