Статьи для начинающих:
Автор: yXo
Источник: bestirc.ruСкриптописание. Азы
Описание: Порой, так сложно взяться за изучение какого-либо языка программирования. mIRC скриптнг не исключение. Данная статья расскажет о первых шагах в мирк скриптинге, на наглядных примерах продемонстрирует удобство использования скриптов и простоту их написания!
------------------------------------------------------------------------------------------------
Ну что же, пользователь, теперь тебе предстоит научиться писать mIRC скрипты или систематизировать свои знания, может подкорректировать.
Чтобы начать изучение mIRC скриптописания ты должен достаточно хорошо знать IRC команды. Если ты их знаешь не достаточно хорошо, то в процессе обучения скриптописанию узнаешь побольше и о командах. Ну а теперь к делу!
Писать скрипты можно с помощью любого текстового редактора, в том числе и блокнота, но лучше использовать встроенный в mIRC редактор скриптов. Вызвать его можно, нажав сочетание клавишь Alt+R. Посмотрим на него. Сверху меню: Файл, Правка, ..., Справка. Ниже пять вкладок: Алиасы (Aliases), Менюшки (Popups), Скрипты (Remotes), Юзеры (Users), Переменные (Variables). Ниже окно для ввода/редактирования текста/кода. Ещё ниже что-то похожее на строку состояния. Ну и в самом низу три кнопки: Ок (OK), Отмена (Cancel), Помощь (Help).
Кстати, советую использовать именно русский mIRC, ибо не за чем усложнять себе жизнь, так как интерфейс программы на работоспособность скриптов и mIRC'а не влияет.
Примечание: дальше в статье к Вам я буду обращаться на "ты" в мужском роде. Если ты девушка, то воспринимай суффикс "л", как "ла" :)
--------------------------------------------------------------------------------
Алиасы
Начнём с Алиасов. Это самая первая вкладка.
Алиасы - это созданные пользователем команды для ускорения работы и упрощения часто повторяющихся действий.
Допустим, что каждый раз при подключении к серверу ты заходишь на канал #All. Для этого ты должен ввести целых десять символов "/join #All". Не надоедает?
И тут Алиасы приходят на помощь. Пропишем в Алиасах вот это:
/1 join #All
И нажмём Ок. В данном случае: "1" - имя новой команды, "join #All" - действие, которое должен совершить mIRC при вводе этой самой команды "1". Попробуй ввести /1 и нажать Энтер и ты попадёшь на канал #All. Удобно, не так ли? :)
А может тебе надо зайти сразу на несколько каналов, например на три сразу? На #a, #b и #c.
Пропиши это в алиасах:
/j {
join #a
join #b
join #c }
Зачем нужны скобочки? Затем, что у нас больше одной команды, целых три. Скобочки говорят mIRC'у, где начинается и заканчивается действие, которое должно быть выполнено при вводе команды /j.
Когды ты вводишь в эдитбоксе (строке ввода текста) /j, твой mIRC автоматически заходит на три канала, #a, #b и #c.
Ещё ппример:
/jj {
join #All
msg #All Привет всем! }
При вводе /jj mIRC зайдёт на канал #All и напечатает там Привет всем! От твоего имени конечно же :)
И напоследок:
/r nickserv identify $?"Введи пароль"
Это пример идентификации ника. При вводе команды /r вылетит окно, где будет написано "Введи пароль". Если введёшь - твой пароль отправится никсерву, если щёлкнешь Отмену или оставишь пустым - выполнение алиаса прекратится. $? - позволяет нам вызвать окошко, куда надо что-либо вводить.
Это не предел возможностей алиасов, но для начинающего пока что хватит. Азы написания алиасов у тебя есть!
--------------------------------------------------------------------------------
Менюшки
Менюшки (Popus) - это вторая вкладка. Здесь мы можем написать собственное меню. До пяти меню нам предлагает написать автор mIRC'a (перейди на вкладку Менюшки и посмотри меню "Вид"). А именно: меню Статуса, меню Канала, меню Привата, меню Списка ников и меню в Главном меню mIRC'a.
Поработаем с менюшкой окна Статуса.
Введём туда:
Зайти на #All: join #All
Выйти c #All: part #All
Сначала идёт название пункта меню, затем двоеточие (всегда), затем команда. Двоеточие даёт понять mIRC'у, что справа находится название, а слева сама команда.
Нажми ОК, перейди в окно статуса и нажми правую кнопку мыши. О чудо! :) Появилось меню из 2ух пунктов, которое ты сделал сам только что! Нажми на первый пункт и ты попадёшь на канал #All, затем на второй и ты выйдешь с этого канала.
В Менюшках между пунктами можно поставить знак "-". Это сепаратор, то есть разграничительная черта между пунктами.
Зайти на #All: join #All
-
Выйти c #All: part #All
Менюшки могут взаимодействовать с алиасами:
В менюшках прописываем:
Избранное: j
И жмём Ок.
А в Алиасах должны присутствовать строки, если ты не стёр:
/j {
join #a
join #b
join #c }
Теперь при нажатии в меню Статуса на пункт "Избранное" ты попадёшь на три канала, а,b и с.
Идею уловили? Поэкспериментируйте, создайте небольшое, но своё меню канала, привата :)
--------------------------------------------------------------------------------
Скрипты (Remote)
В скриптах обраватываются какие-либо события происходящие на IRC. Например, когда кто-нибудь зашёл - это событие, за него отвечает обработчик "JOIN", когда кто-нибудь вышел с IRC - это тоже событие, за него отвечает обработчик "QUIT". Обработчиков очень много, подробнее читай в хелпе к мирку (скачать можно в раздеое "IRC Софт")
Приведу пару примеров (а точнее всего 1), а остальное в хелпе по мирку.
Пример 1: пропиши это в "скриптах"(Remote):
on *:JOIN:#:msg $chan Привет $nick
Разберёмся по порядку. on - означает, что это обработчик (on употребляется со всеми обработчиками кроме ctcp и raw); * - означает, что обработчик будет работать не смотря на уровень пользователя; JOIN - сам обработчик, обрабатывающий всех, кто входит на канал; # - означает, что обработчик сработает на любом канале, где ты находишься; "msg $chan Привет $nick" - команда, которая выполнится, когда любой пользователь (так как *) зайдёт на любой канал (так как #) на котором ты сидишь.
$chan и $nick - это идентификаторы, $chan - это канал на котором сработал обработчик, $nick - это ник пользователя из-за которого сработал обработчик.
Не буду здесь расписывать что и как, так как всё чётко и доходчиво написано в справочном материале, который можно скачать в разделе "IRC Софт"
--------------------------------------------------------------------------------
Переменные
При более детальном изучении скриптов тебе придётся столкнуться с переменнымa.
Создать переменную можно командой /set.
Например: /set %my computer
Где %my - имя переменной (всегда начинается с "%"), а computer - значение переменной.
Ну и примерчик для закрепления: создадим две переменных, для этого перейдём к пятой вкладке "Переменные" и в одной строчке напишем "%1 кошка", а в другой "%2 собака" (естественно без кавычек). Жмём ОК.
Либо создадим, путём ввода
/set %1 кошка и /set %2 собака.
Теперь на канале в строке ввода текста (эдитбоксе) введём:
//say %1 это не %2 $+ , так как %2 гавкает, а %1 мяукает
Идентификатор $+ позволяет склеивать текст, в данном случае переменную (а точнее её значение) с запятой.
Автор: yXo
Использование $submenu
Описание: В данной статье мы рассмотрим создание всплывающих меню с помощью идентификатора $submenu.
------------------------------------------------------------------------------------------------
Использование $submenu
Введение
$submenu это идентификатор, появившийся в mIRC 6.0, помощь по mIRC описывает его так:
$submenu($id($1)) - это идентификатор, позволяющий вам динамически создавать пункты меню, и может быть вызван только из popup меню.
Идентификатор вызывает $id($1), где $id() это название вашего идентификатора, и где $1 = 1, и возрастает на 1 с каждым вызовом, дополняя своим содержанием $id() popup менюху.
Значение, которое возвращает $id()должно быть однострочным, как и в popup меню.
Операция прерывается, когда идентификатор $id() не возвращает ничего.
menu status {
Animal
.$submenu($animal($1))
}
alias animal {
if ($1 == begin) return -
if ($1 == 1) return Cow:echo Cow
if ($1 == 2) return Llama:echo Llama
if ($1 == 3) return Emu:echo Emu
if ($1 == end) return -
}
Значения begin и end заключаются в разделители.
Примечание: Вы не сможете создавать вложенные меню, данный идентификатор строит только одно меню.
Еще примеры
К несчастью, в помощи к mIRC дан только один пример этого очень нужного идентификатора.
Сейчас попытаемся понять его работу более глубоко на примерах. Итак начнем:
Сначало создадим следующий алиас:
alias _partchan {
if ($1 == begin) return -
if ($chan($1) ischan) return $ifmatch :part $ifmatch
}
Если не поняли его работу, то введите //echo -a $_partchan(1) и покажет первый из всего списка каналов на которых вы сидите, ввиде: #bestirc :part #bestirc
На первый взгляд ничего полезного в этом нет, но используя наш идентификатор $submenu мы сделаем из этого конфетку.
Вставляем в Popups, раздел Канал следующее:
Покинуть
.Все каналы:partall
.$submenu($_partchan($1))
И смотрим, что получилось, mIRC вставляет все каналы на которых вы сидите в popup меню. Раньше бы пришлось писать что-нибудь такое:
Покинуть
.Все каналы:partall
.-
.$chan(1):part $chan(1)
.$chan(2):part $chan(2)
; и т.д.
С использованием идентификатора $submenu, работать с popup стало намного проще и легче.
Продвинутые примеры
Еще один хороший пример использования $submenu – это когда у вас есть список элементов. Допустим у вас есть переменная %variable, содержащая список каналов. Например %recent.channels #mirc,#bestirc,#irchelp,#mircscripts,#help
Создаем такой алиас:
alias _recentchan {
if ($gettok(%recent.channels,$1,44)) return $ifmatch :join $ifmatch
}
И вставляем следующее в Popups:
Мои каналы
.$submenu($_recentchan($1))
И смотрим результат..
И еще несколько примеров
Еще одной отличительной особенностью $submenu является его поддержка других идентификаторов. Сейчас рассмотрим еще один интересный пример возможностей $submenu. Допустим у вас три переменные: одна – под любимые каналы, другая – под любимые ники, третья – под любимые ники:
%recent.join #mirc,#help,#irchelp,#mircscripts,#bestirc
%recent.server irc.dalnet.ru,irc.bestirc.ru,irc.dogma.net, irc.ru
%recent.nick yXo,yXu,yXa,yxactuk
Сейчас вы увидите, что даже название переменных создано с умыслом.
Создаем такой алиас:
alias _recent {
if ($gettok($($+(%,recent.,$2),2),$1,44)) return $ifmatch : $2 $ifmatch
}
Разберем скрипт по кусочкам:
$+(%,recent.,$2) – создаст переменную вида %recent.$2
Если значение $2 будет join, он создаст переменную %recent.join и т.д.
$(%recent.join,2) – это тоже самое, что использование идентификатора $eval. Таким образом, если у нас была переменная %recent.join, то использование данной конструкции вернет значение этой переменной (#help,#bestirc.. и т.д.).
А $gettok я думаю не нуждается в пояснениях, также как и $ifmatch.
Причина по которой мы назвали так наши идентификаторы, это чтобы удобнее было работать с ними в $_recent identifier.
Но вернемся к нашему скрипту, вставляем это в Popups:
Любимые
.Серваки
..$submenu($_recent($1,server))
.Каналы
..$submenu($_recent($1,join))
.Ники
..$submenu($_recent($1,nick))
И тестим, что мы получили ;)
А сейчас поработает с идентификаторами и переменными внутри $submenu. Если вы умеете динамически создавать и изменять вашим popups, используя команду /write, то скорей всего вы уже знакомы с такими конструкциями как $!identifiers и % $+ variables.
Для тех, кто не знает, они предназначены для записи в popup файлы не значения идентификатора $identifiers, а его самого, т.е. слово '$identifiers'. Тоже самое и для переменных %variables.
Как это все применимо для $submenu?
Сейчас увидим на простом примере. Пишем алиас:
alias _part {
if ($chan($1) ischan) return $ifmatch : part $ifmatch $!input(Введите сообщение,1,Part)
}
Заметьте, я использовал $!input вместо $input. Это не даст mIRC интерпритировать значение идентификатора $input при создании подменю (или значения popup).
Тоже самое и для переменных, если вы не хотите, чтобы переменная была обработана и считано ее значение, просто используем такую конструкцию % $+ variablename.
Вот еще один алиас для примера:
alias _rfpop {
var %c = $chan($1), %n = $gettok($3,1,33), %m = kick %c %n : $!+ $!input(Введите причину кика %n с %c ,1,Кик)
if ($2 == kb) %m = .raw mode %c +b $mask($gettok($3,2,33),2) $!+ $!lf $!+ %m
else %m = .raw %m
if ($1 isalpha) return -
if ($comchan(%n,$1).op) return %c : %m
if ($chan($1) ischan) return $!style(2) %c :return
}
Заключение
Надеюсь теперь, когда мы расширили свои познания в этом вопросе с помощью этих нескольких скриптов, у вас в голове созреет еще несколько идей использования данного идентификатора. Это не важно, используете ли вы переменные, ini файл, hash таблицы или просто текстовые файлы, идентификатор $submenu все равно может быть использован. Все, что вам понадобиться, это капелька выдумки и ваши скрипты превратятся действительно в произведения искусства.