Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиДругоеПара слов об IRC
© suriv 06.12.2008

1)Предисловие
2)Алиасы, идентификаторы и переменные
3)Менюшки
4)Скрипты
5)Примеры для практики

Begin

Хеллоу, хочу сразу вас предупредить дорогой читатель, что в этой статье вы не увидете как "взломадь инт0рнед", "похэкодь соседа" или "написадь своего мего превадного троя на дельфи",кои статьи щас почему-то стало "модно" писать и которыми завален весь рунет.Так что если вам это не по душе можете смело дальше не читать, а закрыть страницу или пролистать вниз и запостить комент типо "КГ/AM".. потому что непохек.С самого начала я собирался написать статью "чисто для себя", по двум причинам

1)Дабы закрепить свои знания в данной области (с памятью проблемы - сказываются частые падения вниз головой с качелей в детстве. Я серьёзно))..
2)Ну и хоть как то научиться четко формулировать свои мысли Т.к это как никак тренирует мозг и не даёт ему окончательно атрофироваться засохнуть ИМХО.В этой статье я хотел лишь слегка затронуть тему Mirc скриптинга.

Итак, начнём с того что IRC это сервисная система,при помощи которой можно общаться с другими людьми в реальном времени,которая была создана финским студентом Ярко Ойкариненом.В русском сленге её часто называют "иркой","ирцем" или "миркой","мирцем" (немного забегу вперед:последние два примера не совсем из той оперы, "не совсем" потому что "миркой" или "мирцем" обычно называют клиент для IRC сетей).Я не буду здесь описывать как настраивать mIRC, и заходить на каналы тут я только опишу пару сервисов и команд для них Итак, начнём с NickServ, который предназначен в основном для регистрации и "защиты" ника.Сразу добавлю что можно писать /ns вместо /msg Nickserv команды, это намного быстрей и удобней. В первую очередь нам надо зарегистрировать себе ник на сервере, что позволяет сделать команда /ns REGISTER пароль [email].

Хотелось бы отметить что регистр символов в пароле различаться ! Т.е пароли Vasya и VASyA это совершенно два разных пароля. Впредь заходя под своим свежезарегестрированным иком вы должны проидентифицироваться что позволяет сделать команда /ns IDENTIFY пароль_при_реге.Команда /ns LOGOUT работает наоборот,т.е с вас снимается статус владельца ника.Теперь перейдем к ChanServ'у, сервису который позволяет создавать и управлять своими каналами.Зарегестрировать свой канал нам позволяет команда /cs REGISTER #канал пароль описание При регистрации канала у вас должны быть права ОПа и этот канал не должен быть зарегестрированым. Проидентифицироваться на своем канале позволяет команда /cs IDENTIFY #канал пароль, если вы зашли под своим ником проидентифицировавшись то можно не идентифицироваться на канале.

Непосредственно mIRC скриптинг

Что же такое скрипт ? Как говорит хелп мирка (к которому я буду иногда обращаться в этой части,но истолковывать своими словами с небольшими дополнениями) - это набор правил,которые используються для автоматизации действий mIRC. mIRC имеет собственный язык скриптов, который служит для выполнения многих задач, от управления вашими IRC каналами до мультиплеерных игр.Писать скрипты можно хоть в блокноте , но я бы советовал вам делать это во встроенном в mIRC редактором скриптов т.к это намного удобней. Весь мирц-скриптинг сводиться к редактированию следующих файлов (в версии 6.31,в 6.21 эти файлы находяться в папке с мирцем):


%путь к вашей папке с mIRC%sriptsaliases.ini - здесь содержаться ваши алиасы
%путь к вашей папке с mIRC%sriptspopups.ini - здесь всплывающие меню
%путь к вашей папке с mIRC%sriptsvars.ini - переменные
%путь к вашей папке с mIRC%sriptsusers.ini - уровни доступа пользователей и собырий
%путь к вашей папке с mIRC%remote.ini - а здесь - ваши скрипты
Aliases

Алиас - Это созданная пользователем последовательность часто используемых команд, сгруппированная в один сценарий, для упрощения часто повторяющихся действий.Чтобы создавать свои алиасы нужно знать хотябы основные команды IRC. Создав свой сценарий/алиас вам больше не придеться долбить в строку ввода часто используемые или длинные команды, например: /msg nickserv identify **** . Рассмотрим структуру алиаса:

/<имя нашего сценария> /<имя команды> <список параметров (иногда не обязательно)>

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

/<имя нашего сценария> {
<команда 1> <список параметров>
<команда 2> <список параметров>
<команда 3> <список параметров>
}
или
/<имя сценария> <команда1> <сп. параметров> | <команда2> <сп. параметров> | <команда3> <сп. параметров>

Как упоминалось выше список параметров команды может и отсутсвовать вовсе. Многие, принявшись за изучение какого-либо языка программирования пишут свой "Hello World", создание mIRC скриптов это конечно же не программирование, но сейчас мы сделаем с вами аналогичное, т.е напишем простейший алиас который отправляет на канал сообщение "Hello World". Войдите в редактор алиасов (ALT+D) и напишите с новой строки:

/hello /say Hello World

Итак:

1)/hello это непосредственно имя сценария/алиаса к которому мы можем обращаться как раз по этому имени..
2)/say - непосредственно команда IRC печатающая ваше сообщение
3)Hello World - параметры команды say

Если вы введёте в строку ввода /hello то вы увидите отправленное сообщение "Hello World".Лучше не засорять канал бесполезными сообщениями,а зарегистрировать себе новый (см.выше) или же просто отобразить сообщение у себя в окне чата, заменив /say на /echo.Запуская данный сценарий результат его выполнения т.е строку "Hello World" увидете только вы.Вот еще несколько простых алиасов которые позволяют получить общее представление о структуре алиасов с которыми у вас не должно возникнуть проблем:

/privall /say Hello All
/aw /me Отошел покушодь
/poka /me Прощаеться со всеми | /quit good bye

Также мы можем обращаться к нашему алиасу не по его имени а по горячей клавише, мы можем использовать только функциональные клавиши (т.е F1-F12) но и этого нам должно вполне хватить, учитывая то что мы можем делать связки вида Ctrl+F8 и Shift+F8, это 36 различных комбинаций которых нам должно хватить "за глаза и за уши". Ну и как обычно пару примеров:

F2 /say Hello All - при нажатии F2 отправляет сообщение Hello All
sF2 /say Hello All - при нажатии Shift+F2
cF2 /say Hello All - при нажатии Ctrl+F2
Параметры и Идентификаторы

В своих алиасах вы также можете использовать идентификаторы ($),которые по сути можно назвать спец. переменными которые возвращают какое-либо значение. Рассмотрим следующий пример алиаса:

/mw /say $1

$1 - это как раз тот идентификатор,о котором я говорил выше. В данном случае это первый аргумент (параметр) командной строки.Также существует множество других идентификаторов с которыми вы можете столкнуться в будущем. Вот некоторые из них: $ip - возвращает ваш собственный айпи, $me - ваш ник, $chan - канал на котором вы находитесь в данный момент. Описание остальных идентификаторов вы можете найти в хелпе к мирку.Как я уже сказал $1 - это первый параметр/аргумент командной строки т.е если вы введёте в строку ввода "/mw Hello" то вы "отправите" сообщение Hello. Нетрудно догадаться, что если мы напишем алиас вида:

/mw /me $2 $3

и вобьём в строку ввода "/mw Снова приветствует всех" то вы "отправите" только *Vasya_Pupkin приветствует всех, т.к мы не передали в команду ME первый параметр строки т.е слово "Снова". Также вы можете передать все параметры, начиная с какого то конкретного, что позволяет нам сделать идентификатор $x- это передаст все параметры начиная с Х и до конца строки...(напр: $3-).

Также мы можем запретить запуск алиаса если какой либо из параметров "пустой" т.е алиас: /poka /me slaps $$1 around with $$2 - не будет запущен,если хотябы один параметр ($$) не указан т.е сценарий /poka не будет выполнен если мы не укажем например второй параметр./mj /join $? - здесь как видно, мы куда то заходим только непонятно куда,переменная $? - означает то что данный параметр должен быть введен вручную т.е при выполнении данного скрипта будет отображено диалоговое окно для ввода параметра.

Заголовок диалогового окна можно изменить: $?="Введи название канала для входа" Параметр $! содержит строку которую вы только что ввели в окне диалога... Также мы можем склеивать текст благодоря идентификатору "$+". Обьяснять не буду т.к это должно быть понятно - покажу на примере:

1)say $+(text_1,text_2) 2)say text_1 $+ text_2

оформлены по разному, но это одно и тоже.

Я считаю что знания нигде лучше не закрепляются, чем на практике вот мы этим щас и займёмся... Сейчас мы напишем небольшой скрипт эвея:

mw {
  if ($away == $false) {
    set %x $me                     
    $?="Куда уходим ?"
    me ушел по причине: $!
    away $$!
    nick $me $+ |away
  }
  else echo 4 -=х Вы уже отошли х=-
} 

nmw {
  if ($away == $true) {
    nick %x
    away
    msg nickserv identify *password*
  }
  else echo 4 -=х Вы никуда не отходили. = х=-
}

Здесь мы встречаемся с конструкцией IF-THEN-ELSE которая может выполнять различные действия в зависимости от того какие результаты возвращаються,если перевести на русский язык то это будет выглядеть как "если-то-иначе". Можем рассмотреть как эта конструкция уcтроена: if ("аргумент" "оператор" "аргумент") {выполняемое действие при успешном выполнении условия} else {выполняемое действие,если условие не выполнено} теперь рассмотрем что такое оператор. говоря простым русским языком эта штука сравнивает значения аргументов. один из операторов - "==" (оператор равентсва) т.е если первый аргумент равен второму то считать условие выполненным... существует и множество других операторов например: "!=" условие можно считать выполненным если первый аргумент не равен второму, "<=" если первый аргумент меньше или равен второму... В качестве примера приведу:

/ta {
if ($me == suriv) say я сурев
if ($me == sur1v) say test_2
else nick suriv
}

По моему тут всё очень просто: если мой ник suriv написать "я сурев",если мой ник sur1v написать "test_2", иначе (если не ник не suriv и не sur1v)переименовать себя в suriv.Теперь вернёмся к нашему скрипту эвэя, выяснив в первую очередь стоим ли мы уже в эвее или нет,если стоим то просто вывести сообщение и ничего дальше не делать,если же не стоим то "работать" дальше. Это можно сделать благодаря вышеупомянутой конструкции IF-THEN-ELSE и иден-тору $away,который может принимать два значения в зависимости от того находитесь ли вы эвее ($true) или нет ($false), мы как раз сравниваем: "if ($away == $false) {здесь выполняем нужные нам команды}" Строкой ниже мы видим незнакомую строку. "set %x $me" - здесь мы объявляем (set) переменную (%х) которая будет хранить наше имя ($me) на будущее.

Дальше мы выводим диалоговое окно с заголовком "Куда уходим ?" для ввода сообщения. Следующая строка "переключает" вас в режим эвэй, если вы ничего не ввели в диалоговое окно то наш алиас просто не выполниться т.к я уже говорил что если мы используем "$$x" то алиас не будет выполняться если данный параметр пуст,дальше мы добавляем в хвост своего имени |away... Теперь рассмотрим скрипт "снятия" эвея.. Опять же сравниваем находимся ли мы в эвее, если да то выполняем работу если нет, то просто пишем уведомление о паранойе.

Допустим мы находимся в эвее -первым делом надо вернуть наш ник обратно мы это делаем это уже довольно знакомой командой /nick, %x эта как раз та переменная в которую мы сохранили наш ник в скрипте эвэя.. команда /away без параметров снимает с вас флаг away... и последняя строка нужна если вы зарегистрированы на канале для того чтобы дабы не писать каждый раз длиннющую строку /msg nickserv identify *pass* мы сделаем это автоматом.. куда вместо pass вы должны естественно вписать свой пароль

Menu

Сейчас мы с вами разберём простые примеры менюшек,и добавим пару своих всплывающих меню. Итак,меню (конкретно в mIRC скриптинге) - это то что вы видите в окне статуса,привата,канала,списка ников канала,главного меню, нажав в каком либо из этих окон правую кнопку.... Mirc как раз позволяет создавать отдельные всплывающие меню для вышеперечисленных окон.Я считаю что в некоторых ситуациях удобней использовать меню, чем писать в строку ввода имя нашего алиасa, тем более если мы ему передаём какиелибо параметры.Структура Меню:

:
"menuitem" - название пункта меню

":" - разделитель, отделяющий название пункта меню и выполняемых команд для данного элнмента (пункта) меню
"commands" - как не сложно догадаться сюда вы вставляете свои команды.
Создадим простое меню.Жмём Alt+P или переходим на вкладку Menu если "окно скриптов" у вас уже открыто..


В верхнем меню выбираем Вид -> Канал (View-> Channel).Tаким образом мы с вами создадим всплывающее меню которое будет появляться только в окне канала после нажатия на нём правой кнопкой.. итак пишем:[/p]
Says
.Hello
..Hello all:/say Hello All
..Hello "user":/me Mr. $+ $me пожал руку $?
.Mess
..Mess Tee:/me ушел пить чай
..Mess Smoke:/me ушел курить
..Mess away:/me ушел по дела
.Bye
..Bye all:/me прощаеться со всеми

Только что состряпанное меню не должно у вас вызвать вопросов относительно касающихся того что идёт после ":" т.к эти команды мы уже использовали. Здесь мы видим то, что многие строки идут с точками в начале.Таким образом мы указываем подменю какого то одного из пунктов меню.Т.е эл-ты "Mess Tee","Mess Smoke" и "Mess away" являються подменю пункта меню "Mess" который в свою очередь являеться подменю пункта меню "Says"... Уловили ?

Т.е чем "глубже" мы идем тем больше точек мы ставив перед названием элемента меню - т.е при каждом новом "вложении" добавляем одну точку перед названием элемента меню - всё просто.Как уже видно,пункты меню содержащие в себе другие подменю пишуться без ":<команда>"т.к при наведении на них раскрываеться вложенные в них меню и естественно оно не может выполнить какую либо команду.. Т.е можете нажимать на них до посинения ничего не пройзойдет. Для создания разделителей используеться знак "-":

Test_1:/say test one
Test_2:/say test two

Также мы можем из своих меню ссылаться на алиасы, указав вместо стандартной команды имя алиаса.Например данное меню ссылаеться на наш старый "скрипт эвея":

Away_test
.away_on:/mw
.away_off:/nmw

Это несколько облегчило задачу т.к вам теперь не придеться набирать в окне ввода длинюющую команду /mw или /nmw)) пара движений мышкой и наш алиас запущен.

Scripts

Итак вкладка Scripts как нетрудно догадаться предназначена для создания скриптов т.е програм обработчиков которые срабатыают в ответ на различные события IRC, будь то строка содержащая слово "дергать" или же смена ника какого либо пользователя на том же канале что и вы... Итак разберем простой скрипт:

on *:INVITE:#:/msg $nick Спасибо я обязательно зайду на $chan

В первую очередь хочу добавить что здесь идентификаторы уже работают немного по другому, т.е идентификатор $chan о котором я говорил,обозначающий текущий канал на которым вы находитесь в данный момент, то здесь это же идентификатор имеет уже значения,которые непосредственно связанны с выполняемым скриптом... т.е если возвращаеться ник,то это ник пользователя запустившего наш обработчик,в нашем случае $chan уже обозначает не текущий канал а канал($chan) на который вас пригласил(INVITE) пользователсь ($nick).Разберем по частям:

В большинстве случаев используеться именно ON.Здесь мы указываем что наш протокол будет реагировать на какое либо событие - ON, либо на протокол получения информации - CTCP или RAW

<*> - Здесь нам нужно задать уровень пользователя,который сможет "запустить" наш обработчик. Уровень 1 или * позволяет "запустить" любому пользователю наш скрипт,т.е конкретно в нашем случае он будет реагировать на приглашения/инвайты от любого пользователя независимо от его уровня доступа если бы мы использовали "on 30" то наш обработчик реагировал бы только на пользователей с уровнем доступа 30 и выше (про уровни доступа позже).

- Здесь непосредственно само событие на которое должен реагировать наш обработчик. Самих событий в мирц достаточно много,например

on KICK - событие на кик какого либого пользователя
on TEXT - событие на текст в привате или на канале
on OP - событие на получение опа какого либо пользователя

В нашем случае обработчик реагирует на получение приглашения вас на любой канал

<#> - Здесь мы должны сообщить обработчику, на события связанные с какими каналами ему реагироать т.е здесь мы сообщаем обработчику чтобы он срабатывал при получение приглашения на какой либо канал (#fix,#general, #test - их можно вводить через запятую).В нашем случае обработчик реагирует когда нас приглашают на любой канал (#)

</msg $nick Спасибо я обязательно зайду на $chan>" - Как уже видно, сюда мы вводим команды при запуске обработчика.... Т.е если все условия удовлетворены то наш обработчик выполняет именно эти команды.Как я уже говорил здесь идентификаторы $chan и $nick обозначачабт не канал на котором вы находитесь и не ваш ник (соотвественно), а тот канал на кототорый вас пригласил пользователь запустивший наш обработчик..Вроде по этой части всё должно быть понятно... Для "верности" рассмотрим еще один скрипт:

on *:JOIN:#:/msg $chan Привет $nick !

Если перевести на наш родной язык то получается что-то вроде этого: При заходе (событие JOIN) пользователя с любым уровнем доступа (on *) на любой канал(#),написать собщение на канале "канал_на_котором_сработал_обработчик": Привет "имя_зашедшего_пользователя" ! (/msg $chan Привет $nick !) Для пущей убедительности рассмотрим еще один скрипт, на этот раз автоидентификация:

on *:NOTICE:*IDENTIFY*:?:{
  if ($nick == NickServ && $server == irc.rusnet.ru) { privmsg NickServ identify "ваш_пароль" } 
  if ($nick == NickServ && $server == irc.dalnet.ru) { privmsg NickServ identify "ваш_пароль" } 
}

Начнем с Первой строки, которую можно "расшифровать" следующим образом: Реагировать на любого пользователя (или событие) если он нам прислал нотис (NOTICE)в приват (?) в котором встречаеться строка IDENTIFY,дальше идут команды которые по сутя являються "проверками", если ник пользователя вызвавшего обработчик - NickServ (от него пришел нотис)и сервер на которым вы находитесь в данный момент irc.rusnet.ru, ТО послать приватное сообщение NickServ'u со строкой identify "ваш_пароль" Отдельно хотелось бы сказать насчёт *IDENTIFY*:

*IDENTIFY - если строка в нотисе заканчиваеться словом NOTICE
IDENTIFY* - если слово IDENTIFY первое в строке
*IDENTIFY* - если слово IDENTIFY присутствует в тексте (т.е наличие символа "*" не обязывает чтобы было какое либо слово/a в том месте... Если в нотисе единственное слово IDENTIFY то данное условие будет считаться выполненым при всех трех вариациях (*IDENTIFY, IDENTIFY*, *IDENTIFY*)

Немного практики

Если вы собираетесь работать в своих скриптах со текстом и обрабатывать его (разбивать на слова и прч...),то идентификатор $gettok самый подходящий вариант. Здесь мы рассмотрим работу с токенами, думаю одного примера хватит чтобы понять принцип работы идентификатора $gettok итак: $gettok(text,N,C)

text - текст который мы хотим обработать
N - здесь мы указываем номер слова которое хотим получить
C - здесь указываем символ разделитель нашего токена

т.е: $gettok(Ночь:Улица:Фонарь:Аптека,3,58) вернет нам слово "Фонарь" т.к это третье слово если учитывать то что слова разделяються друг от друга символом ":", ASCII код которого 58.Посмотреть таблицу ASCII кодов можно в хелпе к мирку или же идентификатором $asc() который возвращает ASCII код указанного символа в скобках т.е чтобы узнать ASCII код символа ":" нужно использовать $asc(:)

/nap {
set %den $gettok($date,1,47)
set %mes $gettok($date,2,47)
set %god $gettok($date,3,47)
if (%mes == 01) set %mes января
if (%mes == 02) set %mes февраля
if (%mes == 03) set %mes марта
if (%mes == 04) set %mes апреля
if (%mes == 05) set %mes мая
if (%mes == 06) set %mes июня

if (%mes == 07) set %mes июля
if (%mes == 08) set %mes августа
if (%mes == 09) set %mes сентября
if (%mes == 10) set %mes октября
if (%mes == 11) set %mes ноября
if (%mes == 12) set %mes декабря
me напоминает что сегодня: %den $+ ое %mes %god года...
}

Разберем этот скрипт. В первую очередь присваем переменным нужные нам значения. Тут мы видим идентификатор $date который возвращает дату в формате /day/month/year... в качестве разделителя слов мы взяли "/" который как раз и разделяет день месяц и число..Первое слово присваем переменной %den которая будет хранить текущий день, второе слово присваем %mes которая будет хранить месяц,третье - текущий год.Дальше мы сравниваем значение переменной %mes с текущим месяцем если значения совпадают то присваем этой переменное уже не число как мы это делали выше, а название месяца и наконец пишем сообщение от третьего лица сообщающее сегоднящнюю дату. Впринципе можно было обойтись без переменных (первые 3) но было бы больше писанины имхо:

if ($gettok($date,2,47) == 01) set %mes bla-bla-bla
.................
if ($gettok($date,2,47) == 12) set %mes bla-bla-bla

me напоминает что сегодня: $gettok($date,1,47) $+ $gettok($date,2,47 $gettok($date,3,47) года... Или же поместить "громоздкую" конструкцию сравнения IF-THEN-ELSE,которую неуместно было бы тут использовать. Но как я уже говорил это лишь примеры для практики... Которые можно решать различными способами и чем больше вариантов мы "опробуем" те лучше для нас самих.Прежде чем перейдем к файлам хотелось бы возвратиться к нашему скрипту эвея который я немного улучшил и добавил новую "фичу"которая пишет сколько времени вы отсутсвовали.

mw {
  set %myhour
  set %mymin $gettok($duration($awaytime,3),2,58) $+ мин
  set %mysec $gettok($duration($awaytime,3),3,58) $+ сек

  if !$away {
    set %x $me                     
    $?="Куда уходим ?"
    me ушел по причине: $!
    away $$!
    nick $+($me,|away)
  }
  else {
    nick %x
    me отсутствовал %myhour %mymin %mysec
    away
    msg nickserv identify *password*
  }
}

Первое что бросаеться в глаза это два новых идентификатора "$duration" и "$awaytime"... Начнемс с "$awaytime" который указывает сколько времени вы провели в эвее в секундах. Но так как строка вида "*Vasya_Pupkin отстутсвовал 1432 секунд" будет не очень красиво смотреться, то мы должны привести её в порядок - т.е возвратить время в формате Hour:Minute:Second, что и позволяет нам сделать идентификатор "$duration". Если быть более конкретным то он принимает "время и дату" в секундах, а возвращает уже в формате "week day hour minute second" или hour:minute:second, в зависимости от того какой параметр мы ему "передадим", ну и работу с токенами мы уже проходили.

Здесь мы мы берем слова,которые отделяються друг от друга символом ":", ASCII код которого 58. который как раз и возвращает идентификатор $duration (с параметром 2),отделяя часы от минут и секунд.. $gettok($duration($awaytime,3),2,58) $+ мин Остальное в принципе должно быть всё понятно, только теперь наш скрипт занимает меньше места несмотря на добавление новой "фичи". И теперь это не два отдельных скрипта как раньше, а один единственный. В котором мы проверяем стоит ли у нас флаг эвея (т.е в эвее ли мы или нет)- если находимся,то снять с нас флаг эвея, написав сообщение от третьего лица сколько времени вы остутсвовали, проидентифицировавшись на сервере, если же мы не в эвее то сделать это, как обычно указав причину ухода. Впринципе здесь не должно возникнуть у кого-то трудностей с пониманием работы данного алиаса...

Дабы не заниматься тафтологией я буду приводить примерых простых скриптов и по ходу дела обьяснять что к чему.Щас мы попробуем написать скрипт... даж не знаю как его обозвать. Может быть видели каналы где стоят боты, которые выдют рандомный анекдот при отравке сообщения содержащего строки - !анек или !anec.Попробуем сделать то же самое разбирая по ходу дела работу файлами и новыми идентификаторами.Но здесь мы разберем алиас "цитат в одну строку т.к это пога будет полгче".

Cначала нам надо сделать проверку существует ли файл с нашими "цитатами" или нет для этого воспользуемся идентификатором $exists(filename) или же $isfile(filename) (лично я не увидил никакой разницы между ними так что можно использовать любой) где "fileame" это путь к файлу который мы хотим проверить, если файл существует то он возвращает нам $true, если же такого файла не находиться то $false.

Многие устанавливают mIRC в директорию C:Program FilesmIRC, многие но не все.. дабы не возникло никаких казусов воспользуемся идентикатором $mircdir который возврашает путь к папке с установленым мирком.Теперь мы должны прочитать любую строку из нашего файла с цитатами,для чтения файла существует ф-ция $read(filename) (для более подробного "описания" обратитесь к хелпу мирка) в итоге получаем простой скрипт который реагирует на слово !q от любого пользователя и выдаёт рандомную (случайную) строку из файла:

on 1:TEXT:!q*:#:{
  set %quotesfile $mircdir $+ quotes.txt
  if ($exists(%quotesfile) == $true) /msg $chan 3 вспомнил перл: $read(quotes.txt)
  else echo Файл не найден
}

Не так уж и сложно как казлось. Как и обещал теперь напишем скрипт выдающий от третьего лица сегодняшнюю дату, как видно скрипт совсем не "полегчал" а наоборот, усложнен специально для того чтобы познакомиться с новыми конструкциями языка.И "взять на вооружение" новые приёмы скриптописания.

/test {
  set %mn 1
  set %mfile $+($mircdir,months.txt)
  set %den $gettok($date,1,47)
  set %mes $gettok($date,2,47)
  set %god $gettok($date,3,47)
  if $exists(%mfile)  {
    while (%mn <= 12) {
      if (%mes == $gettok($read(%mfile,%mn),1,59)) {
        set %mes $gettok($read(%mfile,%mn),2,59) 
        goto Okay 
      }
      inc %mn
    }
    echo 4 Error !
    /halt
:Okay
    me напоминает что сегодня: %den $+ ое %mes %god года...
  }
  else echo 4 Файл не найден !
}
Файл Months.txt:
01;Января
02;Февраля
и т.д до 12.

Как обычно, разберем его по строкам.Первые пять строк - создание и присваивание нашим переменным "нужных" нам значений, здесь все должно быть понятно и не должно нуждаться в обьяснении. Дальше мы проверяем существует ли файл с названием месяцев (months.txt) если нет то сообщаем об этом пользователю и завершаем работу алиаса, если же данный файл находим то запускаем цикл While.Структура которого схожа с конструкцией IF-THEN-ELSE: While (Условие) {Выполняемые команды}

То есть цикл будет выполняться пока выражение в круглых скобках будет правдой.Конкретно в нашем случае мы будем читать файл и сравнивать его первое слово в строке, значение которой имеет переменная %mn ($read(%mfile,%mn)с текущим месяцем пока эта же переменная %mn будет меньше или равна 12.Если значения не совпадают то увеливаем переменную %mn на единицу (inc %mn) и "проходим" наш цикл с начала.При совпадении присваиваем нашей переменной %mn новое значение(текст), которое мы берем из того же файла на той же строке где и совпали наши значения (т.е удовлетворены условия конструкции IF-THEN-ELSE),но которое являеться вторым словом, которое разделяеться от первого символом ";" ascii код которого 59($gettok($read(%mfile,%mn),2,59)).И переходим на метку "Okay".

В mirc-скриптинге, да и вообще в любом языке программирования метки являються командами безусловного (т.е принудительного) перехода на какую либо часть нашей программы. Мы же переходим на 18ую строку которая содержит me напоминает что сегодня: %den $+ ое %mes %god года...и завершаем работу алиаса. Если мы "прошли" наш цикл все 12 раз и по каким-то необьяснимым причинам значения текущего месяца и порядкового числа месяца в файле не совпали то выдаём сообщение об ошибке, и завершаем работу алиса командой /halt которая не позволит выполняться ему дальше и попасть на строку с: me напоминает что сегодня: %den $+ ое %mes %god года... Вот и всё, может для кого-то немного запутано но это пока цветочки ( ягодок в статье не будет)) ) Единственое что хотелось бы добавить, так это то что мы немного по другому "оформили" конструкцию IF-THEN-ELSE.По простой причине того, что если идентификатор возвращает значение типа Boolean т.е "$true" или "$false" (1 или 0) то мы можем не писать "if ($identificator == $true)"а можем написать "if $identifikator" что будет тем же самым как и пример выше ("if !$identifikator" тоже самое что и "if $identifikator == $false").Можно уменьшить и упростить скрипт убрав всяческие проверки,сообщения об ошибках и сверять номер месяца не со "%mn"ой строкой в файле а с номером "прохода" скрипта и при выполненом условии читать из файла порядковый номер этой строки.Т.е файл будет выглядеть:

Января
Февраля

и т.д

iNt 20h

Вот впринципе и всё что я хотел описать в данной статье...Здесь практически нету "полезных и интересных" скриптов типа: qwerty=йцук,автоприветсвие всех пользователей,вставка выделенного ника в списке юзеров канала в строку ввода по горячей клавише,etc... Так как моей целью было описать стандартные структуры/конструкции и синтаксис языка,познакомив вас с основными командами на простых примерах, а не просто скопипастить скрипты и пояснить их другими словами.Ссылки на сайты и статьи которое помогли мне при написании статьи и которые возможно пригодяться вам:

http://www.bestirc.ru/ - Кульный сайт на котором можно скачать как русифицированый mIRC так и справку для него (которая также очень помогла и ответила на некоторые вопросы),на русском языке.Также там можно найти неплохие статьи в том числе и по mIRC скриптингу.
http://www.neora.ru - Аналогично, сайт по тематике IRC сетей, огромное количество хороших статей как для начинающих так и для "закаленных"
http://ircinfo.ru/ - Неплохой сайт где как говорит титл сайта можно скачать ирц ботов и клиентов, а также скрипты, ну и ественно имеються статьи по основным командам, установке и настройке WinDrop/EggDrop.
А также 2 статьи - http://www.megabyte-web.ru/47-2007/tvoya-podruzhka-irca-chast-4-mirc-skripting.html и http://rtfm.inetik.ru/index.php?shstate=125
http://irc.vsi.ru/forum/showthread.php?p=72#post72 - Описание IRC сервисов (Nickserv,ChanServ,MemoServ)

Гритсы: Немалую благодарность выражаю FIXER'у за моральную поддержку

May be to be continued...

У вас кто-то женился, родил, окатился итд? Тогда нужно организовать праздник и отметить это дело на всю катушку




© suriv 06.12.2008

e-Commerce Partners Network
suriv написал:

блин.. жесть оформлено((

xazlon написал:

КГ/АМ
Лудше бы о xchat скриптенге пару слов нописал =

ктото написал:

гавно

lapapam написал:

irc is dead

Alien написал:

Меня удивляет , что такое количество людей не в состоянии предоставить конструктивную критику, а в состоянии только давить ... это самое.
Статья - неплохая , для широкого профиля я бы сказал, но все же мне кажется ,что есть вода без которой можно было обойтись.
Желаю мотивации для написания следующей статьи.

Малышка написал:

Я вот хотела написать примитивный скрипт для игры в арену, читала статью так нифига и не поняла ни грамма (

Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
22.09.2017 18:36:49 Avito777jaf написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Здравствуйте,...
Новый релиз
22.09.2017 18:26:34 Avito777jaf написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Приветствую...
Сайт снова работает!
22.09.2017 18:12:48 Avito777jaf написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Приветствую...
Новая статья
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100