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

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

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


Вы здесь » EpicNet.Ru - Форум IRC Чата » HELP SCRIPTS - Помощь по mIRC скриптам » How to bind an alias to the ON TEXT event?


How to bind an alias to the ON TEXT event?

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

1

I want to use this command triggered:  !get host  ,  Example:  !get *!*@10.20.30.40  or  !get *!*@Nick.test.host
then Bot will msg the result to the channel:  "The Nickname using that ip/host is: NickHere"

Here is my code:

Код:
alias get {
  ;/get <#chan> <host>
  if (!$chan($1) || !$2) { return }
  var %a = 1, %b
  while ($nick($1,%a)) { 
    %b = $v1
    if ($2 iswm $address(%b,5)) { echo -a The Nickname using that ip/host is: %b }
    inc %a
  }
}

Thanks all for help!!!

2

Вы можете попробовать использовать этот вариант скрипта:

Код:
on *:TEXT:!get*:#: get $1-
alias -l get {
  if (($1 != !get) || (!$2)) { .notice $nick Syntax:12 !get <host> | return }
  var %i 1, %pattern $+(*,$2,*), %nicks
  while ($nick($chan,%i)) { 
    if (%pattern iswm $address($v1,5)) %nicks = %nicks $gettok($v2,1,33)
    inc %i
  }
  if (%nicks != $null) msg $chan The Nickname using that ip/host is:12 $replace(%nicks,$chr(32),$chr(44) $chr(32))
  else msg $chan There are no nicknames on the channel with this host.
}

[indent=0.8,0.5]
Подробный разбор кода

Строка 1

on *:TEXT:!get*:#: get $1-

[mark=maroon]on *:TEXT:!get*:#:[/mark]  - создаём событие "ON TEXT", которое будет срабатывать каждый раз, когда кто то напишет на канале текст. В данном случае мы определяем, что событие сработает только, если пользователь точно напишет на канале команду "!get" и что-то ещё (в одной строке), поэтому эту неизвестность мы обозначаем символом "*" звёздочки.
[mark=maroon]get $1-[/mark]  - пишем команду "get", которая делает запрос к алиасу с соответствующим названием, и передаём неопределённое количество параметров "$1-", которые считаются словами, идущими через пробел, от 1 - до любого количества слов, написанных на канале. Алиас будет вызываться каждый раз при срабатывании события.


Строка 2

alias -l get {

[mark=maroon]alias -l get[/mark]  - создаём алиас с названием "get" и добавляем ключ "-l", чтобы сделать этот алиас локальным для запуска и работы только в этом скрипте, чтобы избежать случайного вызова этого алиаса из других скриптов (даже если название будет совпадать), и также чтобы избежать запуска через поле ввода текста.
[mark=maroon]{[/mark]  - открываем фигурную скобку для создания конструкции тела алиаса, внутри которого будет множество строк с инструкциями, условиями и командами, которые будут выполняться внутри тела алиаса.


Строка 3

if (($1 != !get) || (!$2)) { .notice $nick Syntax:12 !get <host> | return }

[mark=maroon]if (($1 != !get)[/mark]  - проверяем в условии, что если первым переданным параметром в алиас не является слово "!get" (без других символов идущих следом).
[mark=maroon]||[/mark]  - или.
[mark=maroon](!$2))[/mark]  - проверяем в условии, что если второй переданный параметр в алиас отсутствует.
[mark=maroon].notice $nick Syntax:12 !get <host>[/mark]  - отправляем пользователю уведомление с напоминанием о правильном синтаксисе команды.
[mark=maroon]return[/mark]  - делаем пустой возврат, что равнозначно завершению работы этого алиаса.


Строка 4

var %i 1, %pattern $+(*,$2,*), %nicks

[mark=maroon]var %i 1[/mark]  - создаём временную переменную "%i" с числовым значением "1".
[mark=maroon]%pattern $+(*,$2,*)[/mark]  - создаём временную переменную "%pattern" со значением второго переданного в алиас параметра (ip/host), вместе с подстановочными знаками по краям.
[mark=maroon]%nicks[/mark]  - создаём временную переменную "%nicks" без значения, для дальнейшего использования её в цикле с присвоением нового значения.


Строка 5

while ($nick($chan,%i)) {

[mark=maroon]while ($nick($chan,%i))[/mark]  - создаём цикл с условием в круглых скобках, которое проверяет - пока есть ник пользователя, идущий в списке канала под номером, который указан в значении переменной "%i", то цикл будет продолжать свою работу.
[mark=maroon]{[/mark]  - открываем фигурную скобку для создания конструкции тела цикла, внутри которого будет множество строк с инструкциями, условиями и командами, которые будут выполняться внутри тела цикла.


Строка 6

if (%pattern iswm $address($v1,5)) %nicks = %nicks $gettok($v2,1,33)

[mark=maroon]if (%pattern iswm $address($v1,5))[/mark]  - проверяем в условии, что если значение в переменной "%pattern" соответствует или присутствует частично в полном адресе пользователя "$address($v1,5)", перечисляемого последовательно в цикле, то будет выполнена команда, идущая после условия.
[mark=maroon]%nicks = %nicks $gettok($v2,1,33)[/mark]  - производится запись значений в переменную "%nicks" и при каждой итерации цикла добавляется (через пробел) новое значение к уже существующему значению переменной, то есть "Ники Ник". Ник вырезается из маски полного адреса пользователя методом "$gettok($v2,1,33)".


Строка 7

inc %i

[mark=maroon]inc %i[/mark]  - прибавляем единицу к значению в переменной "%i", чтобы увеличить число номера строки списка ников каналов, проверяемое в цикле.


Строка 8

}

[mark=maroon]}[/mark]  - обязательно закрываем фигурную скобку для пары к ранее открытой скобке в строке 5 при создании тела цикла.


Строка 9

if (%nicks != $null) msg $chan The Nickname using that ip/host is:12 $replace(%nicks,$chr(32),$chr(44) $chr(32))

[mark=maroon]if (%nicks != $null)[/mark]  - проверяем в условии, что если значение переменной "%nicks" не равно пустоте "$null".
[mark=maroon]msg $chan The Nickname using that ip/host is:[/mark]  - отправляем на канал сообщение с указанным текстом.
[mark=maroon]$replace(%nicks,$chr(32),$chr(44) $chr(32))[/mark]  - заменяем все пробелы в значении переменной "%nicks" на запятую с пробелом.


Строка 10

else msg $chan There are no nicknames on the channel with this host.

[mark=maroon]else[/mark]  - иначе, если условие выше не равно истине, то выполнить строку кода с командой, идущую далее.
[mark=maroon]msg $chan There are no nicknames on the channel with this host.[/mark]  - отправляем на канал сообщение с указанным текстом.


Строка 11

}

[mark=maroon]}[/mark]  - обязательно закрываем фигурную скобку для пары к ранее открытой скобке в строке 2 при создании тела алиаса.

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

[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="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://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, You are amazing !!!

You have described in detail each line, each command, how each command line works and what it does. Now newbies will not have any questions when using your code.

I tested this code, IT'S WORK PERFECT !!!

Thanks Epic so much, friend.

Отредактировано Robert (31.10.2023 04:30)

4

I have a new idea for this code. Please can you update the new version to check:
(1) repeats triggered (!get*) and (2) protected flood command triggered (if more than 2 nicknames using this command at once, then Bot will ban all ip/host of that nicknamé and kick with the reason (and color red): "### Flood command triggered detect ###" OR ignore ip/host and notice message: "Nick, you have been put on ignored for abuse the bot by command triggered" to that nicknames know on active channel.

Thanks and hope receive new code version from you soon!

5

Я добавил в код новый алиас "check_flood" для проверки флуда, который запускается в 3-ей строке кода.
Теперь, если пользователь делает запрос команды "!get" более одного раза, он получит уведомление о флуде и в дальнейшем будет игнорироваться на срок задержки установленного времени. В коде эта задержка установлена на 30 секунд, но вы можете изменить это в переменной "%delay_time" на нужное вам время в секундах.

По поводу того, чтобы устанавливать "Бан+Кик" на пользователей за частый запрос команды, то это сомнительная идея. Но если очень надо, то вы можете добавить это в алиас самостоятельно - внутри тела условия после 14-ой строки кода. На самом деле будет лучше, если для этого будет использоваться другой скрипт, который будет отслеживать любой флуд.

Итак, вы можете попробовать использовать этот код скрипта:

Код:
on *:TEXT:!get*:#: get $1-
alias -l get {
  if (($1 != !get) || (!$2)) { .notice $nick Syntax:12 !get <host> | return } | check_flood $nick
  var %i 1, %pattern $+(*,$2,*), %nicks
  while ($nick($chan,%i)) { 
    if (%pattern iswm $address($v1,5)) %nicks = %nicks $gettok($v2,1,33)
    inc %i
  }
  if (%nicks != $null) msg $chan The Nickname using that ip/host is:12 $replace(%nicks,$chr(32),$chr(44) $chr(32))
  else msg $chan There are no nicknames on the channel with this host.
}
alias -l check_flood {
  var %nick $1, %host $ial($1).host, %delay_time 30
  if ($hget(stop-flood,%host)) {
    if (!$hget(stop-flood-msg,%host)) {
      .notice %nick Stop flooding! You have recently used this command. Further attempts will be ignored. Wait a while to repeat.
      .hadd -mz stop-flood-msg %host %delay_time
    }
    halt
  }
  .hadd -mz stop-flood %host %delay_time
}
Подпись автора

[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="https://forumstatic.ru/files/000d/c9/8c/34681.jpg"></td><td><a href="https://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 Чата » HELP SCRIPTS - Помощь по mIRC скриптам » How to bind an alias to the ON TEXT event?