EpicNet.Ru - Форум IRC Чата

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » EpicNet.Ru - Форум IRC Чата » START NEWBIE - Для начинающих mIRC скриптеров » ON TEXT - Как правильно использовать этот обработчик событий


ON TEXT - Как правильно использовать этот обработчик событий

Сообщений 1 страница 6 из 6

1

Всех приветствую! У меня такой вопрос. Я только начинаю изучать mIRC скрипты и мне пока не совсем понятно как правильно использовать данный обработчик событий в клиенте.

ON TEXT #Channel

Я пробую понять написанное в официальном справочнике, но там все скомкано и не очень понятно.
Наверное это больше подходит для продвинутых скриптеров, но не для таких новичков как я  http://www.kolobok.us/smiles/icq/unknown.gif http://www.kolobok.us/smiles/icq/scratch_one-s_head.gif

Не могли бы вы мне все растолковать об этом более подробно, в деталях, на русском языке - как этим пользоваться ???

Отредактировано ПикачУ (04.08.2021 11:47)

2

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

Синтаксис: [mark=black]on ‹level›:TEXT:‹matchtext›:‹target›:{ commands }[/mark]

У этого обработчика есть три параметра. Заметьте, что каждый параметр разделён знаком двоеточия ":", а после этого идут все записи с командами вашего скрипта.
Чтобы всё работало правильно вы должны придерживаться данного синтаксиса, где всё должно быть указано в такой же последовательности.

Краткое описание параметров:

‹level› - этот параметр определяет уровень доступа происходящего события.
‹matchtext› - этот параметр определяет текстовый шаблон части текста, при наличии которого в сообщении обработчик должен будет срабатывать.
‹target› - этот параметр определяет место или окно события, где оно было инициировано.

Пример1:

Код:
on *:TEXT:!test:#test:{ msg $chan Пользователь $nick написал команду $1 на канале $chan }

Здесь установлены параметры: ‹level› = * (любой уровень доступа), ‹matchtext› = !test (первое слово в тексте), ‹target› = #test (название канала).

Это значит, что если какой-либо пользователь в окне канала "#test" напишет текст, в котором первое слово будет "!test", то данный скрипт сработает и при помощи команды "/msg" отправит на канал ответное сообщение с подставленным текстом. Если же вы не хотите ограничиваться только одним каналом и хотите, чтобы этот скрипт мог срабатывать в любых открытых окнах каналов, то из ‹target› следует исключить название канала test и оставить там только знак решётки #.


Пример2:

Код:
on *:TEXT:*hello*:?:{ msg $nick Привет $nick !!! Я рад тебя видеть друг :) }

Здесь установлены параметры: ‹matchtext› = *hello* (используется маска слова, где до и после может быть что-то ещё), ‹target› = ? (для приватных окон).

Это значит, что если какой-либо пользователь отправит вам свой текст в открытое окно привата, где будет присутствовать слово "hello" в любой последовательности расположения, то скрипт ответит на это при помощи команды "/msg" с подставленным текстом. Например это точно сработает, если пользователь чата напишет вам в приват такое сообщение: "Hello my friend!".



Для более подробной информации вы можете обратиться к официальной документации: https://www.mirc.com/help/html/index.html?on_text.html или https://en.wikichip.org/wiki/mirc/on_events/on_text

Если у вас всё ещё остались вопросы по данной теме, то вы можете задать их ниже под этим постом в качестве нового ответа.
Для вопросов по другим темам соответствующим данному разделу пожалуйста создайте новую тему.

Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="http://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="http://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

3

Epic, Вау, спасибо! Ну теперь хоть что-то стало понятно.  http://www.kolobok.us/smiles/icq/good.gif

Развивая тему у меня появилось несколько новых вопросов.

1. А что, если я захочу, чтобы скрипт отправлял сразу две разные строки с ответами, реагируя на одно и тоже слово? Как мне это лучше сделать?
2. Можно ли сделать так, чтобы один и тот же ответ был отправлен, когда на канале пишут разные слова, на которые должен реагировать скрипт?
3. В другом случае как мне сделать так, чтобы ответ был отправлен через нотис сообщение или в приватное окно пользователя?

Если можно приведите примеры, пожалуйста. Спасибо.  http://epicnet.ru/smiles/epic-mix/smile_kind.gif

4

1185,325 написал(а):

1. А что, если я захочу, чтобы скрипт отправлял сразу две разные строки с ответами, реагируя на одно и тоже слово? Как мне это лучше сделать?

После открывающей фигурной скобки "{" нажмите на клавишу интер (Ввод), чтобы перенести текст на строку ниже и разделите ваши команды на несколько строк, после чего не забудьте установить закрывающую фигурную скобку "}":

Код:
on *:TEXT:*text*:#:{
  msg $chan первая строка
  msg $chan вторая строка
  msg $chan третья строка
}

1185,325 написал(а):

2. Можно ли сделать так, чтобы один и тот же ответ был отправлен, когда на канале пишут разные слова, на которые должен реагировать скрипт?

Для этого потребуется перечисление всех слов, на которые должен срабатывать ваш скрипт. Это можно сделать при помощи команды "if" для создания условий сравнения между двумя значениями:

Код:
on *:TEXT:*:#:{
  if (text1 isin $1-) || (text2 isin $1-) || (text3 isin $1-) || (text4 isin $1-) || (text5 isin $1-) {
    msg $chan Пользователь $nick на канале $chan написал слово: $v1
  }
}

Или можно сделать более сложную конструкцию с применением алиаса, который будет выполнять роль самописного идентификатора. Назовём его к примеру "text", а благодаря использованию команды "/return" для возврата ответа этот алиас превращается в идентификатор $text для поиска нужных слов:

Код:
on *:TEXT:*:#:{
  if ($text($1-)) {
    msg $chan Пользователь $nick на канале $chan написал слово: $v1
  }
}
alias text {
  if (text1 isin $1-) || (text2 isin $1-) || (text3 isin $1-) || (text4 isin $1-) || (text5 isin $1-) {
    return $v1
  }
}

Более подробно про алиасы я расскажу в другой теме, если она будет создана с соответствующим вопросом.


1185,325 написал(а):

3. В другом случае как мне сделать так, чтобы ответ был отправлен через нотис сообщение или в приватное окно пользователя?

Для отправления сообщения в нотис используйте команду "/notice":

Код:
on *:TEXT:*text*:#:{ notice $nick Извещаю вас о том, что в своём сообщении вы использовали слово "text" }

Для приватного сообщения вместо идентификатора канала $chan используйте идентификатор ника пользователя $nick, который инициировал данное событие:

Код:
on *:TEXT:*text*:#:{ msg $nick Извещаю вас о том, что в своём сообщении вы использовали слово "text" }
Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="http://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="http://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]

5

Epic, Здорово! Вы молодец, все так понятно объясняете, большое вам за это спасибо!  http://epicnet.ru/smiles/epic-mix/sun.gif
Теперь у меня вновь появилось желание продолжать изучать mIRC скриптинг. Позже я создам несколько новых тем с другими вопросами, если вы не против.

А сейчас у меня возникли новые вопросы по этой теме:

1. Я так понимаю, что я могу в этом обработчике прописать выполнение любых команд, которые должны будут срабатывать, когда кто нибудь напишет искомое слово?
2. Не могли бы вы перечислить и привести примеры, какие еще идентификаторы могут быть использованы при работе с этим обработчиком событий? Пожалуйста опишите значение этих идентификаторов.
3. Какие еще есть секреты и способы интересного применения этого обработчика в скриптах?

6

1187,325 написал(а):

1. Я так понимаю, что я могу в этом обработчике прописать выполнение любых команд, которые должны будут срабатывать, когда кто нибудь напишет искомое слово?

Совершенно верно. При срабатывании обработчика на соответствующее событие вы можете использовать любые другие существующие команды. Также вы можете создавать свои собственные команды при помощи алиасов. С полным списком встроенных команд вы можете ознакомиться здесь: https://en.wikichip.org/wiki/mirc/commands


1187,325 написал(а):

2. Не могли бы вы перечислить и привести примеры, какие еще идентификаторы могут быть использованы при работе с этим обработчиком событий? Пожалуйста опишите значение этих идентификаторов.

Основные связанные идентификаторы, которые могут быть использованы непосредственно в этом обработчике событий:

$nick - определяет ник инициатора события.
$chan - определяет канал, на котором было инициировано событие.
$target - определяет цель события, для которого оно было инициировано (это может быть окно канала или ваше приватное окно).
$1- - определяет текст сообщения разделённый на токены, где $1 = 1 слово, а знак тире "-" говорит о том, что нужно определить все последующие слова начиная с 1 слова.

Пример:

Код:
on *:TEXT:!test:#:{
  msg $chan Это событие: ON TEXT - инициировал пользователь под ником: $nick - в окне канала: $chan - набрав команду: $1
}

1187,325 написал(а):

3. Какие еще есть секреты и способы интересного применения этого обработчика в скриптах?

Самое интересное, что вы можете сделать - это при помощи установки префикса "^" вы сможете заменять стандартные строки текста на свои собственные, переделанные в соответствии с вашими предпочтениями оформления текста и внешним стилем вашего клиента.

Пример:

Код:
on ^*:TEXT:*:#: echo -t $chan $+(05<12,$nick,05>14) $1- | halt

Таким образом все текстовые сообщения на всех открытых каналах будут заменены вашим собственным при помощи подменного эхо-сообщения.
Главное в конце скрипта не забыть установить команду "halt" для блокировки отображения оригинального сообщения в стандартном формате.

Подпись автора

[html]<style>img {vertical-align:middle;}.hnet{color:#FFFFFF;}.hstar{color:#DE0000;}.htext{font-family:Verdana;font-size:13px;color:#6E1E00;}.heading{font-family:Verdana;font-size:13px;font-weight:bold;background-color:#4897E7;}.stitle{font-family:Verdana;font-size:12px;}.dot{color:#808000;}.desc{color:#ADADAD;}a .curl{font-family:Verdana;font-size:13px;color:#3A92CD;}</style><table><tr><td width="20px" height="20px"><img src="http://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="http://forum.epicnet.ru/viewtopic.php?id=234"><span class="heading"> <span class="hstar">★</span> <span class="hnet">EpicNet.Ru</span> <span class="hstar">★</span> </span><span class="htext"> - IRC Чат © 2008</span></a></td></tr><tr><td></td><td><div class="stitle"><span class="dot">•</span> <span class="desc">Вход через вебгейт:</span> <a href="http://irc.epicnet.ru"><span class="curl">http://irc.epicnet.ru</span></a><br><span class="dot">•</span> <span class="desc">Сервер:</span> irc.epicnet.ru <span class="desc">Порты:</span> 6667, 6668 (ssl)<br><div></td></tr></table>[/html]


Вы здесь » EpicNet.Ru - Форум IRC Чата » START NEWBIE - Для начинающих mIRC скриптеров » ON TEXT - Как правильно использовать этот обработчик событий