/kick #channel ник причина
, а затем /ban ник или хост
А скрипт поможет осуществить эти операции предельно быстро и просто. Достаточно будет кликнуть мышкой по нужному пункту меню.
Давайте попробуем разобраться каким образом это работает в mIRC. В нем есть несколько разделов, которые и отвечают за все действия, совершаемые в IRC. Одним из них является раздел Remote (события) - следит за всем, что происходит в окнах вашего mIRC. Следующий раздел: Aliases. Aлиасы отвечают за всевозможные сокращенные команды. То есть вместо того, чтобы набирать
/join #channel
, можно создать Aliases, который будет выполнять эту команду, скажем при нажатии F7 или любой другой клавиши, на ваше усмотрение. Еще один раздел, который будет нас с вами интересовать: Popups (всплывающие окна). Popups - это выскакивающие менюшки. Вы просто кликнете по нику или в окне канала и выбираете нужный вам пункт, который совершит то или иное запрограммированное ранее действие. Users - секция хранения перечня пользователей с назначенным уровнем доступа для каждого. Variables - отвечает за хранение постоянных переменных и их значения.
Вызвать список всех этих разделов можно кликнув по иконке или выбрав в меню Tools соответствующий подраздел.
Позже мы рассмотрим каждый раздел более подробно. Но так как без знания синтаксиса, переменных, идентификаторов и команд мы скрипт ну никак не напишем. То давайте с ними и познакомимся.
Команды IRC
Ознакомьтесь с командами IRC. Вот наиболее часто употребляемые. IRC команды предназначены для выполнения действий на IRC, например для управления каналами./join #канал
- войти на канал/part #канал
- покинуть канал/list [#channel] [-MIN #] [-MAX #]
- выводит список доступных каналов. Например:/list
- вывести все каналы /list *w* -MIN 10 -MAX 20
- вывести все каналы, на которых находится от 10 до 20 человек, содержащие в названии букву w/me действие
- сообщить в текущий канал (приват) о своем действииСимвол
/
называется командным префиксом и не является частью команды. Он служит для указания мирку того, что вводимая строка является командой. Так же может использоваться префикс //
, заставляющий mIRC вычислить подставленные в команду идентификаторы и префикс /.
, блокирующий любой вывод текста на экран:------------------|-------------
Команда | Результат
------------------|-------------
/echo мой ник $me |мой ник $me
//echo мой ник $me|мой ник Zmey
/.echo мой ник $me|
--------------------------------
В теле скрипта использование префикса
/<
/pre> не обязательно.
<h2>ИДЕНТИФИКАТОРЫ</h2>
Идентификаторы являются аналогом функций. Вот краткий перечень наиболее часто используемых идентификаторов.
<ul>
<li><em>$active</em> - возвращает имя активного окна</li>
<li><em>$address (ник, индекс)</em> - возвращает маску, связанную с ником. В зависимости от индекса маска возвращается в виде:
0: *[email protected]
1: *!*[email protected]
2: *!*@host.domain
3: *!*user@*.domain
4: *!*@*.domain
5: [email protected]
6: nick!*[email protected]
7: nick!*@host.domain
8: nick!*user@*.domain
9: nick!*@*.domain
(например <em>$address (Guest, 5)</em> вернёт [email protected])
Внимание: для собственного ника эта функция вернет маску созданную на основе реального адреса, а для чужих - на основе скрытого, при условии, что человек использует режим +х</li>
<li><em>$away</em> - возвращает текущий эвэй-статус</li>
<li><em>$date</em> - возвращает текущую дату в формате день-месяц-год</li>
<li><em>$editbox (окно)</em> - возвращает содержание редактора для окна</li>
<li><em>$me</em> - возвращает текущий ник</li>
<li><em>$usermode</em> - возвращает ваши моды (напр. irx)</li>
<li><em>$os</em> - возвращает версию операционной системы (mirc 5.9 может вернуть одно из следующих значений: 3.1, 95, 98, NT, ME, 2000, XP)<li>
<li><em>$idle</em> - возвращает продолжительность молчания </li>
<li><em>$ip</em></li> - возвращает ваш ip адрес</li>
<li><em>$version</em> - возвращает версию mirc в контексте скрипта можно использовать следующие идентификаторы:
<ul>
<li><em>$banmask</em> - маска, на которую установлен бан </li>
<li><em>$bnick</em> - имя пользователя, на которого поставлен бан. Определен только в том случае, если маска бана содержит ник пользователя (например Guest!*@*binet.south.net.ru), в остальных случаях вернет значение $null (ноль)</li>
<li><em>$chan</em> - канал на котором происходит событие</li>
<li><em>$nick</em> - пользователь инициализировавший выполнение события</li>
<li><em>$knick</em> - пользователь выкинутый с канала</li>
<li><em>$me</em> - возвращает ваш ник</li>
<li><em>$newnick</em> - новый ник (используется в событии NICK)</li>
<li><em>$opnick</em> - пользователь которому был присвоен оп</li></ul></li>
<li><em>$0</em> - возвращает количество переданных в скрипт параметров</li>
<li><em>$1</em> - возвращает первый переданный в скрипт параметр (можно использовать от $1 до $9) отличие $1 от $$1 в том, что если $$1 вернет пустое значение, то строка, в которой встретился этот идентификатор не будет выполнена</li>
<li><em>$1</em>- - возвращает строку параметров разделенных пробелами начиная с первого (можно использовать от $1- до $9-)</li>
<li><em>$2-5</em> - возвращает параметры со второго по пятый При написании собственных идентификаторов для передачи параметров используются идентификаторы $0, $1, $1-, $$1 и т.п.</li>
<li>$?="сообщение\" - выдает на экран диалог ввода и возвращает введенную строку </li>
<li>$?!=\"сообщение\" - выдает на экран диалог с кнопками Yes/No (Да/Нет). Если нажата кнопка Yes возвращает $true, иначе $false</li></li></ul>
<h2>УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ</h2>
<ul>
<li><h3>Условия:</h3>
Конструкция if-then-else, позволяет сравнивать значения переменных или выражений.
Формат: <pre lang="mirc">if (условие1) { действие1 }
elseif (условие2) { действие2 }
else { действие0 }
, при этом действие будут выполнено, если условие истинно. Операторы сравнения:
- == - равно (без учета регистра)
- === - равно (с учетом регистра)
- != - не равно
- < - меньше
- > - больше
- <= - меньше или равно
- >= - больше или равно
- isin - подстрока находится в строке (z isin Zmey | истина)
- isincs - подстрока находится в строке (с учетом регистра) (z isin Zm ey | ложь)
- iswm - маска соответствует заданному образцу (*!*@zmeya.net iswm [email protected] | истина)
- isnum - число находится в диапазоне (параметр диапазон -- опциональный) (7 isnum 5-9 | истина)
- isletter - буква есть в строке
- isalnum - текст содержит только буквы и цифры
- isalpha - текст содержит только буквы
- ison - ник на канале
- isop - ник оператор на канале
- isvoice - ник имеет право голоса на канале
- isreg - ник обычный пользователь на канале
- ischan - ник находится на одном канале с вами
- isreg - ник - нормальный ник на канале
Идентификатор $ifmatch возвращает первый параметр сравнения. Например, если условие выглядит так: if (Zmey ison #help) , то $ifmatch вернет Zmey
Идентификатор $null используется в сравнениях, для определения содержит переменная значение или нет.
Операторы сравнения можно комбинировать, используя символы:
&& - логическое и
|| - логическое или
Префикс ! (отрицание)
Отрицание логических выражений может быть построено следующим образом:
Zmey !ison #help - Zmey не находится на канале хелп
w !isin zmey - w не находится в строке zmey
Так же ! может быть использован для определения содержит ли переменная значение. Приведенные условия идентичны:
if (%x == $null) echo переменная x не содержит значения
if (!%x) echo переменная x не содержит значения
Циклы:
В mIRC применяется только один вид циклов - while. Его формат:
while (условие) {действие}
Например:
/list {
var %i = 1
while (%i <= 10) {
echo 2 %i
inc %i
}
}
Команды безусловного перехода:
-безусловный переход к метке/goto метка
- останавливает выполнение скрипта и передает управление вызывающей процедуре.В качестве опционального параметра может использоваться возвращаемое идентификатором значение./return [значение]
- останавливает выполнение скрипта и прекращает последующую обработку./halt
Пример:/number { if ($1 == 1) goto one elseif ($1 == 2) goto two else { echo Unknown number! halt } :one echo The number ONE return 1 :two echo The number TWO return 2 }
Комментарии
Для комментария в скрипте используйте в начале строки символ - ;;вот такой вот комментарий
Создание собственных комманд и идентификаторов
На странице Aliases размещаются пользовательские команды и идентификаторы. В качестве операторных скобок используются символы { }. Команды отделяются друг от друга символом перевода строки либо символом |.
Пример идентификатора, возвращающего информацию о клиенте:
clientinfo return mIRC $version (Windows $os $+ )
Пример команды, выходящей с сервера с заданным сообщением и закрывающей mIRC:/quitex quit $1- | exit
Локальные переменные создаются командой var. Инициализировать локальные переменные можно прямо в этой команде. Можно задать сразу несколько локальных переменных, разделяя их запятыми.
Так же в теле создаваемого идентификатора может быть использован идентификатор $prop для создания собственных свойств (properties) идентификатора. Например:
add {
var %x = $1 + $2
if ($prop == neg) return $calc(-1 * %x)
return %x
}
$add (1,1) вернёт 2$add (1,1).neg вернёт -2
В разделе aliases можно задавать переопределения для функциональных клавиш. Например:
F3 /msg $active чуть что, сразу змей
sF4 /query $1
Префиксы s и c используются дл я задания клавиш Shift и Control соответственно.
Лично я бы не рекомендовал перекрывать системные сочетания клавиш, такие как: Ctrl+F4, F1.
Пример. Данный идентификатор возвращает n-ное слово (2-ой параметр) строки (параметры, начиная с третьего), где разделителями слов является символ переданный в первом параметре. Идентификатор считает, что между символами не может быть более чем одного разделителя.
extractword {
var %x, %len, %ch = $1, %cnt = $2, %str = $3-
%len = $count(%str, %ch) + 1
if (%cnt > %len) || (%cnt <= 0) return
elseif (%cnt < %len) {
%x = $pos(%str, %ch, %cnt)
%str = $left(%str, %x)
}
if (%cnt > 1) {
%x = $pos(%str, %ch, $calc(%cnt - 1))
return $right(%str, $calc(- %x))
}
else return %str
}
$extractword($chr(32), 2, Мир! Труд! Май!) вернёт Труд!
СОБЫТИЯ
В разделе Remote описываются действия происходящие в ответ на некоторые события в мирке, например, при входе кого-либо на канал. Вот далеко не полный перечень возможных событий:- ACTION - сообщения от третьего лица (/me).
- TEXT - текстовые сообщения пользователей (не свои)
- BAN - установка бан (+b )
- DEOP - снятие опа (-о) с кого-либо
- DEVOICE - снятие войса (-v)
- INPUT - нажатие клавиши Enter, после ввода текста сообщения
- INVITE - приглашение на канал
- JOIN - заход кого-либо на канал
- KICK - кик кого-либо с канала
- MODE - изменение модов канала
- NICK - смену ника
- NOTIFY - пользователь из нотифи-листа заходит на IRC
- NOTICE - получение нотиса
- OP - получение опа (+о)
- OPEN - открытие окон
- TOPIC - смена топика
- UNBAN - снятие бана (-b)
- UNOTIFY - пользователь из нотифи-листа покидает IRC
- USERMODE - изменение собственных пользовательских модов
- VOICE - получение войса (+v)
on [<префикс>]<уровень>:<событие>:[<фильтр>:][<место>:]<команды>
,где <уровень> - уровень пользователя для которого срабатывает событие. Соответствие пользователь-уровень задается на вкладке Users (синтаксис: уровень: маска). В качестве уровня может использоваться число, именованный уровень или строка.<префикс> - задает ограничение на уровни. Существуют следующие префиксы:
- + - скрипт сработает только для пользователей, уровень которых не превышает заданный
- * - скрипт сработает для всех пользователей
- ! - скрипт сработает для всех, кроме себя
- & - скрипт не сработает, если предыдущий скрипт был остановлен командой /halt или /haltdef
- @ - скрипт сработает только если использующий скрипт имеет оп на канале на котором он сработал
<фильтр> - фильтр на событие. Скрипт сработает только если событие содержит в параметрах строку удовлетворяющую фильтру. Возможны следующие варианты:
- * - любой текст
- & - любое слово
- text - текст, состоящий из слова text
- text* - текст, начинающийся со слова text
- *text - текст, заканчивающийся словом text
- *text* - текст, содержащий в себе слово text
<место> - место срабатывания скрипта.
Пропускаются только события возникшие в определенном месте. Возможны следующие варианты:
- ? - любое событие в привате
- # - любое событие на канале
- #zoo - любое событие на канале #zoo
- #s outhnet,#zoo - любое событие на каналах #southnet и #zoo
- * - любое событие на канале или привате
Примеры:
on *:TEXT:Zмей:#: /msg $chan чуть что - сразу змей
Если кто-либо напишет на любом канале слово Zмей или zмей, то скрипт выдаст на канал сообщение "чуть что - сразу змей".
on *:TEXT:*трахнуть*:#southnet: {
/msg $chan смотри как бы самого не трахнуло.
}
Если кто-либо напишет на канале #southnet фразу содержащую слово "трахнуть", то скрипт выдаст на канал сообщение "
смотри как бы самого не трахнуло"
on *:ACTION:$(*slaps $me around a bit with a large trout*):#: /describe $chan скорчился от боли
Если кто-то выполняет на любом канале экшн на ваш текущий ник, то скрипт выдаст в канал экшн
/me скорчился от боли
on *:NICK: {
if ($nick == $me) && ($newnick == %myname) /ns identify %mypassword
if ($nick == $me) && ($newnick == _ $+ %myname $+ -) /nick %myname
}
Если ваш ник меняется на ник, записанный в переменной %myname, то он идентифицируется, если же ваш ник меняется на ник с "лапками" (такое происходит при сплите) то он меняется обратно на ник без лапок и, соответственно, идентифицируется.
on *:DEOP:%mychanlist: {
if ($me == $opnick) && ($me != $nick) {
if (Serv !isin $nick)
/chanserv deop $chan $nick
/chanserv op $chan $me
}
}
Происходит при деопе на одном из каналов записанных в переменную %mychanlist. Если деопнули вас, причем вы деопнулись не сами, то вам возвращается оп, а обидчик деопается (для этого используется чансерв).
Всплывающие меню
mIRC позволяет создавать свои всплывающие меню для всех видов окон: окна статуса, окна списка ников, окна канала, окна привата и для меню Commands главного меню.Формат описания всплывающего меню:
[<глубина>]<наименование>[:< команды>]
, где <глубина> - глубина вложенности элемента меню (одна или несколько точек).<наименование> - наименование меню или разделитель обозначается символом "-".
<команды> - реакция на событие, состоящая из произвольного числа вызовов команд.
Для указания типа меню необходимо выбрать в меню View окно, в котором это меню будет появляться (Status, Channel, Query/chat, Nickname list, Menubar)
Пример (меню для окна каналов):
Вернулся:/AWAY | /NICK %myname
Отошел
.Не далеко
..Занят: AWAY Ну очень занят!!! | NICK %myname $+ [busy]
..Отошел: AWAY Где-то тут... | NICK %myname $+ [away]
.Далеко
..Есть: AWAY Поем и приду!!! | NICK %myname $+ [eat]
..Ушел: AWAY Нет меня по определению | NICK %myname $+ [out]
.Отошел (куда): AWAY $?=\"Сообщение:\" | NICK %myname $+ $$?=\"Дополнительная часть ника:\"
Ушел
.Спать: QUIT спокойной ночи | EXIT
.На работу: QUIT ушел на работу | EXIT
.Учиться: QUIT ушел учиться | EXIT
-
Rejoin:/hop