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

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

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


Вы здесь » EpicNet.Ru - Форум IRC Чата » HELP SCRIPTS - Помощь по mIRC скриптам » Auto scan for BadNicks when MyBot or users join a channel


Auto scan for BadNicks when MyBot or users join a channel

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

1

This code is work normal, but now i want update to new version: can scan and kick ban all nick if found in "nicksflood1.txt"

Current Bot work if file text like this:

nicksflood1.txt
[flist]Fuck
dick
cunt
penis
[/flist]

And now I want to update the text of the file to this, and the bot will scan and ban if it finds:

nicksflood1.txt
[flist]*Fuck*
*dick*
*cunt*
*penis*
[/flist]

Here is my code:

Код:
ON *:JOIN:#: {
  if (!$read(BADNICKSCAN_CHAN.txt,nw,$chan)) { return }
  if ($nick == $me) {
    timer[SCAN_ $+ $chan $+ ] 1 10 nickscan $chan
  }
}
alias nickscan {
  if (!$1) || ($me !ison $1) || ($me !isop $1) { return }
  var %f = nicksflood1.txt
  var %t = $lines(%f)
  if (!%t) { return }
  var %i = 1
  while (%i <= %t) {
    var %n = $read(%f,ntw,%i)
    if (%n) && (%n ison $1) { .ban -ku3600 $1 %n 2 4([AUTO SCAN] [Banned] (reason: Badnick/Nickflood/NickBlacklist are not permitted for this channel) [id: 1] - (for more information regarding your ban please join #HelpKick to ask for removal)) }
    inc %i
  }
}

Thanks and hope everyone help me soon!

2

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

Поэтому мне пришлось создать собственную, новую версию скрипта, с использованием облегчённого способа поиска ников через серверную команду "/who", которая умеет не только последовательно возвращать все ники канала, подряд сверху вниз, но и умеет возвращать только нужные, подходящие под *маску* ники, в которых присутствует плохое слово из файла "badwords.txt". Это значительно снижает нагрузку на mIRC и делает работу скрипта гораздо быстрее. Так что этот скрипт теперь должен выполнять запрашиваемую вами функцию для поиска плохих слов в присутствующих на канале никнеймах с последующей установкой на них "Кика+Бана".

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

Код:
######################################################################
#  Название: Scan Bad Nicks v1.0
#  Автор: Epic (http://epicnet.ru, irc.epicnet.ru:6667 #Code)
#  Описание: Сканирует все присоединяющиеся, а также уже присутствующие на канале ники, когда Бот сам присоединяется к каналу. Если в названии ников будут найдены плохие слова из файла "badwords.txt", то выполняется "Кик+Бан".
#  Файлы: Все файлы, с которыми работает скрипт должны находиться в той же папке, где находится сам скрипт: "scripts\ScanBadNicks\".
######################################################################

on *:JOIN:#:{
  if (!$read($file_chans,ntw,$chan)) { return } | if ($nick == $me) { .timerSCANBADNICKS 1 5 sbn_check $chan }
  else { var %f $file_badwords, %l $lines(%f), %i 1 | while (%i <= %l) { if ($read(%f,nt,%i) iswm $nick) { if ($me isop $chan) ban $+(-ku,$ban_timer) $chan $nick 2 $kick_reason | break } | inc %i } }
}
alias -l sbn_check { if ($me !isop $1) { return } | .hfree -sw sbn | .enable #scanbadnicks | sbn_who $1 }
alias -l sbn_who { .hinc -m sbn num 1 | var %str $read($file_badwords,nt,$hget(sbn,num)) | if (%str) { who $1 $+(n,$chr(37),cn) %str } | else { .disable #scanbadnicks | .hdel -sw sbn num } }

alias -l file_chans { return $scriptdir $+ chans.txt }
alias -l file_badwords { return $scriptdir $+ badwords.txt }
alias -l id_rand { return $+([id:,$rand(A,Z),$rand(A,Z),$rand(1,9999),]) }
alias -l ban_timer { return $rand(1800,3600) }
alias -l kick_add_reason { return - (for more information regarding your ban please join #HelpKick to ask for removal) }
alias -l kick_reason { return 04[AUTO SCAN] [Banned] reason: Bad nicknames are not allowed on this channel $id_rand $kick_add_reason }

#scanbadnicks off
raw 354:*: ban $+(-ku,$ban_timer) $2 $3 2 $kick_reason | haltdef
raw 315:*: sbn_who $2 | haltdef
#scanbadnicks end

Описание настроек:

  • Алиас "file_chans" возвращает путь к файлу "chans.txt", который должен содержать список названий каналов, перечисленных в столбик, в которых может работать скрипт.

  • Алиас "file_badwords" возвращает путь к файлу "badwords.txt", который может содержать список плохих слов с подстановочными знаками *слово*, перечисленные в столбик, которые могут присутствовать частично или полностью в никах пользователей канала. В этом случае на подобные ники будет выполнены "Кик+Бан".

  • Алиас "id_rand" возвращает случайное (рандомное) значение, состоящее из 2-х больших латинских букв и 1-4-х значного числа для создания метки-идентификатора, который пользовать увидит в сообщении при установке на его ник "Кика+Бана", чтобы он смог отправить это операторам канала @ "OPs" для дальнейшего разбирательства.

  • Алиас "ban_timer" возвращает случайное (рандомное) числовое значение в секундах для установки времени таймера, по истечению которого "Бан" должен быть снят. Вы можете изменить это значение на постоянное целое число, которое измеряется в секундах.

  • Алиас "kick_reason" возвращает основное текстовое сообщение для установки причины "Кика" пользователя на канале.

  • Алиас "kick_add_reason" возвращает дополнительное текстовое сообщение, для прикрепления его к основному текстовому сообщению с причиной "Кика".

Примечание: Все файлы, с которыми работает скрипт должны находиться в той же папке, где находится сам скрипт.

[indent=0.8,0.5]
Обязательно оставьте свои отзывы и комментарии по результатам тестирования данного скрипта, и дайте мне знать, если что то будет неисправно или нуждается в улучшении

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

[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

I have just test, but NOT WORK and i see some errors notice. I thinks your code check all CHANNELS on SERVER Check and try it again pls, thanks Epic

My log:

[00:18:52] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:18:52] * #buzZcafe anal
[00:18:54] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:18:54] * #buzZcafe abuse
[00:18:58] * /ban: You are not on a channel, try /join #channel (line 15, Scan Badnick On Join-49.mrc)
[00:18:58] * * bigtitsblack
[00:19:00] * /ban: You are not on a channel, try /join #channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:00] * * bitchX
[00:19:00] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:00] * #femsubmissionsex slavebitchuk
[00:19:00] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:00] * #incest bitchwife
[00:19:04] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:04] * #mothers WickdBastard
[00:19:04] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:04] * #politics Rat_Bastard
[00:19:12] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:12] * #incest BeaBooty
[00:19:18] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:18] * #femhumiliationsex bustycarmen
[00:19:18] * /ban: you are not on a channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:18] * #incest BustyTeenHU
[00:19:22] * /ban: You are not on a channel, try /join #channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:22] * * cunts
[00:19:22] * /ban: You are not on a channel, try /join #channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:22] * * cuntsys
[00:19:22] * /ban: You are not on a channel, try /join #channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:22] * * _HoneyCunt__
[00:19:26] * /ban: You are not on a channel, try /join #channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:26] * * CumPumperRP
[00:19:26] * /ban: You are not on a channel, try /join #channel (line 15, Scan Badnick On Join-49.mrc)
[00:19:26] * * cum`in`me

Отредактировано Robert (29.10.2023 20:25)

4

Да. Похоже, что при разработке кода я не учёл масштабов вашей IRC сети, из-за чего поиск плохих ников становится значительно шире и затрагивает огромное количество пользователей, причём даже тех, которые не находятся на ваших каналах.

Я внёс изменения в код с учётом предоставленного отчёта об ошибке, а также добавил контекстное меню для настройки и управления скриптом.

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

Код:
######################################################################
#  Название: Scan Bad Nicks v1.1
#  Автор: Epic (http://epicnet.ru, irc.epicnet.ru:6667 #Code)
#  Описание: Сканирует все присоединяющиеся, а также уже присутствующие на канале ники, когда Бот сам присоединяется к каналу. Если в названии ников будут найдены плохие слова из файла "badwords.txt", то выполняется "Кик+Бан". 
#  Файлы: Все файлы, с которыми работает скрипт должны находиться в той же папке, где находится сам скрипт: "scripts\ScanBadNicks\".
######################################################################

menu channel {
  Scan Bad Nicks
  .Start scanning: .enable #scanbadnicks | scan_start $chan
  .-
  .Scan join nicks (All)
  ..$iif(%sbn_nicks_join == on,$style(1)) ON: %sbn_nicks_join = on | echo -a Auto scan when nicks joined = 03ON
  ..$iif(%sbn_nicks_join == off,$style(1)) OFF: %sbn_nicks_join = off | echo -a Auto scan when nicks joined = 04OFF
  .Scan join me (Bot)
  ..$iif(%sbn_me_join == on,$style(1)) ON: %sbn_me_join = on | echo -a Auto scan when me joined = 03ON
  ..$iif(%sbn_me_join == off,$style(1)) OFF: %sbn_me_join = off | echo -a Auto scan when me joined = 04OFF
}
----------------------------------------------------------------------
on *:JOIN:#:{
  if (!$read($file_chans,ntw,$chan)) { return }
  if (%sbn_nicks_join == on && $nick != $me) { .enable #scanbadnicks | check_badwords $chan $nick }
  if (%sbn_me_join == on && $nick == $me) { .timerSCANBADNICKS 1 5 scan_start $chan }
}
alias -l scan_start { if ($me !isop $1) { return } | .enable #scanbadnicks | who $1 $+($chr(37),cn) }
alias -l check_badwords { if ($me ison $1 && $me isop $1) { var %f $file_badwords, %l $lines(%f), %i 1 | while (%i <= %l) { if ($+(*,$read(%f,nt,%i),*) iswm $2) ban $+(-ku,$ban_timer) $1 $2 2 $kick_reason | inc %i } } }
----------------------------------------------------------------------
alias -l file_chans { return $scriptdir $+ chans.txt }
alias -l file_badwords { return $scriptdir $+ badwords.txt }
alias -l id_rand { return $+([id:,$chr(32),$rand(A,Z),$rand(A,Z),$rand(1,9999),]) }
alias -l ban_timer { return $rand(1800,3600) }
alias -l kick_add_reason { return (for more information regarding your ban please join #HelpKick to ask for removal) }
alias -l kick_reason { return 04[AUTO SCAN] [Banned] reason: Bad nicknames are not allowed on this channel - $id_rand - $kick_add_reason }
----------------------------------------------------------------------
#scanbadnicks off
raw 354:*: check_badwords $2 $3 | haltdef
raw 315:*: .disable #scanbadnicks | haltdef
#scanbadnicks end

Примечание: Чтобы скрипт начал работать в автоматическом режиме, необходимо в контекстном меню "Scan Bad Nicks" включить хотя бы один из нескольких пунктов авто проверки.

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

[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

Thanks Epic, but NOT WORK. Try again pls

6

Я проверил ещё раз и у меня скрипт работает нормально.

Скриншоты теста:
https://i.ibb.co/dtL1nKz/join-bad-nicks.jpg
https://i.ibb.co/GThCrwZ/menu-scan-bad-nicks.png
https://i.ibb.co/PDSVxRR/ban-kick-bad-nicks.jpg

Попробуйте проверить правильно ли у вас расположены файлы "chans.txt" и "badwords.txt", с которыми взаимодействует скрипт.
Они должны находиться в той же папке, где находится сам файл скрипта.

У меня это находится по пути "scripts\ScanBadNicks\":

https://i.ibb.co/kQz5zNj/script-path-files.jpg

Также проверьте правильно ли у вас заполнены эти файлы:

  • Файл "chans.txt" - содержит список каналов, в которых может работать скрипт.

  • Файл "badwords.txt" - содержит список плохих слов, которые следует искать в никах пользователей.

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

[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]

7

Dear Epic!

I solved my problem is.

1472,2 написал(а):

Они должны находиться в той же папке, где находится сам файл скрипта. У меня это находится по пути "scripts\ScanBadNicks\"

I haven't created a folder with the name "ScanBadNicks" and copy chans.txt and badwords.txt to this folder, so the code doesn't work. I think it work fine when i do that. Thanks alots my friend.

[indent=0.8,0.5]
Important note to Epic:

  • I don't use mIRC, i use AdiIRC, because AdiIRC is free soft and faster, tronger than mIRC many many time.

  • Because i use AdiIRC, and you always wrote your codes for mIRC, so sometimes your code doesn't work for me and some errors occur. Example: [mark=red]if ($nick == $me) {  }[/mark] body of the condition must always be enclosed in curly braces [mark=red]{  }[/mark] if not, code doesn't work.

  • You often use the [mark=red]----------[/mark] symbol to separate variables or aliases for visibility and convenience in searching and editing (if necessary). But if there is NOT ";" on the first line, code nottice error like this: [mark=red]unknow ----------[/mark] so i must have to add ";" so that it would be like this [mark=red];----------[/mark].

  • Current, i use more than 70 code snippets (*.mrc) for AdiIRC, but AdiIRC still work so very fast, no prolem, no error. I recommend you try AdiIRC so you can get a feel and compare.

Отредактировано Robert (06.11.2023 05:59)

8

New ideas!

1. Your code is missing the check ON NICK event for newnick = Badword. Can you add it to make it more perfect?
2. I thinks you should change all event check on nicks join AND check on me join to check "ON OP" event  [mark=blue]on *:OP:#: { ... }[/mark] - what do you thinks about this idea? It's shorter and stronger, faster...?

Thanks so much, friend

Отредактировано Robert (06.11.2023 06:16)

9

1473,352 написал(а):

I haven't created a folder with the name "ScanBadNicks" and copy chans.txt and badwords.txt to this folder, so the code doesn't work.

Очень жаль, что вы невнимательно читаете инструкции, которые были опубликованы вместе с кодом скрипта. Поэтому не будет лишним ещё раз повторить, что каждый скрипт должен находиться в отдельной папке со своим названием (внутри "scripts" папки), вместе со всеми рабочими файлами, с которыми он взаимодействует, и лишь в редких случаях вы можете использовать внешние общие файлы (например базы данных), которые могут быть связаны одновременно с несколькими скриптами. Кроме того при необходимости вы можете создать внутри папки со скриптом дополнительные папки для разделения файлов по категориям, но тогда нужно будет также исправить в скрипте все пути к файлам. Всё это будет способствовать стабильной работе скриптов и общему порядку в корневой папке mIRC, а также вам будет гораздо удобнее, если вы захотите в один клик скопировать или поместить скрипт в ZIP-архив, для передачи и отправки его другим пользователям.


1473,352 написал(а):

I don't use mIRC, i use AdiIRC, so sometimes your code doesn't work for me and some errors occur.

Да. Именно потому, что я пишу скрипты для mIRC, а вы используете их в AdiIRC иногда могут возникать некоторые ошибки и конфликты совместимости из-за разницы используемых клиентских программ, которые были созданы разными разработчиками. Так как авторы AdiIRC пошли по пути использования в коде такого же синтаксиса, который повторяет синтаксис mIRC скриптов - то значит теперь они полностью отвечают за 100%-ную поддержку обратной совместимости и работоспособность используемых скриптов. Поэтому они должны постоянно отслеживать подобные случаи и своевременно исправлять обнаруженные пользователями ошибки при использовании mIRC скриптов в AdiIRC, т. к. эти скрипты должны гарантированно работать без ошибок, если они также не возникают при использовании их в mIRC. То есть этим исправлением должны заниматься не разработчики скриптов, а именно авторы и разработчики данного клиента. Поэтому вам будет лучше обратиться с этим вопросом непосредственно в тех-поддержку AdiIRC.

В противном случае, если я начну писать скрипты с учётом особенностей разных других альтернативных клиентов, таких как AdiIRC, то однажды может случиться так, что все мои скрипты могут стать неисправными при использовании их в mIRC. Так что, если вам очень нравится использовать AdiIRC или какой то другой клиент, то на данный момент я вам могу порекомендовать только единственное верное решение - прежде чем использовать скрипт в AdiIRC, который был написан для mIRC и с помощью mIRC, вам необходимо предварительно протестировать его на работоспособность в том же mIRC (последней версии), и только после этого, убедившись в его исправности, уже самостоятельно вносить в код необходимые вам корректировки для использования скрипта в AdiIRC, чтобы избежать подобных недоразумений и траты времени на их решение.


1473,352 написал(а):

I recommend you try AdiIRC so you can get a feel and compare.

Я уже пробовал использовать AdiIRC и он действительно имеет ряд преимуществ, а также имеет множество дополнительных настроек, которых нет, и наверное никогда не будет в mIRC. Хотя многое из этого я могу создать и добавить самостоятельно. Больше всего меня радует в AdiIRC возможность использования графических смайлов в окнах чата. Но к сожалению, этот клиент всё ещё далёк от совершенства и находится на стадии активной разработки. Ещё не всё сделано, что должно повторять весь функционал mIRC - который, к слову сказать, разрабатывается и улучшается мистером "Khaled"-ом уже более 28-ми лет, что заслуживает уважения и имеет гораздо больший вес для стабильности и работоспособности программы. Кроме того, меня очень сильно огорчает, что в AdiIRC невозможно использовать некоторые dll (такие как DCX), которые были специально созданы для mIRC и с помощью которых я могу создавать собственные скриптовые проекты на основе диалоговых окон с красивым дизайном. По этой причине мне пока НЕ подходит AdiIRC для использования в качестве постоянного клиента и в том числе для разработки собственных скриптов. Но тем не менее, спасибо вам за предложение.

Как только всё, что мне нужно будет реализовано и будет исправно работать в AdiIRC, я обязательно попробую начать использовать его для чата, ну а пока что - "mIRC Forever!" 

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

[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]

10

1474,352 написал(а):

1. Your code is missing the check ON NICK event for newnick = Badword.

В вашем исходном коде отсутствовал этот обработчик событий, поэтому это не было сделано.


1474,352 написал(а):

2. I thinks you should change all event check on nicks join AND check on me join to check "ON OP" event - what do you thinks about this idea? It's shorter and stronger, faster...?

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


Я обновил скрипт с учётом ваших предложений:

  • Добавлен обработчик событий "ON NICK" для проверки пользователей, которые изменили свой ник на новый ник.

  • Добавлен пункт в контекстное меню для включения/отключения проверки изменения пользовательских ников.

  • Добавлен обработчик событий "ON OP" только для проверки, когда Бот получает @ "OP" на канале.

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

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

Код:
;######################################################################
;#  Название: Scan Bad Nicks v1.2
;#  Автор: Epic (http://epicnet.ru, irc.epicnet.ru:6667 #Code)
;#  Описание: Сканирует все присоединяющиеся, а также уже присутствующие на канале ники, когда Бот сам присоединяется к каналу. Если в названии ников будут найдены плохие слова из файла "badwords.txt", то выполняется "Кик+Бан". 
;#  Путь: Все рабочие файлы, с которыми взаимодействует скрипт должны находиться в той же папке, где находится сам скрипт: "scripts\ScanBadNicks\".
;######################################################################

menu channel {
  Scan Bad Nicks
  .Start scanning: scan_start $chan
  .-
  .Scan join nicks (All)
  ..$iif(%sbn_nicks_join == on,$style(1)) ON: %sbn_nicks_join = on | echo -a Auto scan when nicks joined = 03ON
  ..$iif(%sbn_nicks_join == off,$style(1)) OFF: %sbn_nicks_join = off | echo -a Auto scan when nicks joined = 04OFF
  .Scan new nicks (All)
  ..$iif(%sbn_nicks_new == on,$style(1)) ON: %sbn_nicks_new = on | echo -a Auto scan when changing to new nicks = 03ON
  ..$iif(%sbn_nicks_new == off,$style(1)) OFF: %sbn_nicks_new = off | echo -a Auto scan when changing to new nicks = 04OFF
  .Scan join me (Bot)
  ..$iif(%sbn_me_join == on,$style(1)) ON: %sbn_me_join = on | echo -a Auto scan when me joined = 03ON
  ..$iif(%sbn_me_join == off,$style(1)) OFF: %sbn_me_join = off | echo -a Auto scan when me joined = 04OFF
}
;----------------------------------------------------------------------
on *:JOIN:#:{
  if (!$read($file_chans,ntw,$chan)) { return }
  if ($nick == $me) { .ial on | ialfill $chan }
  if ($nick != $me && %sbn_nicks_join == on) { check_badwords $chan $nick }
}
on *:OP:#: if (!$read($file_chans,ntw,$chan)) { return } | if ($opnick == $me && %sbn_me_join == on) { scan_start $chan }
on *:NICK:{ if (%sbn_nicks_new == on) { var %nick $newnick, %i $comchan(%nick,0) | while (%i) { var %chan $comchan(%nick,%i) | if ($read($file_chans,ntw,%chan)) check_badwords %chan %nick | dec %i } } }
alias -l scan_start { if ($me !isop $1) { return } | .enable #scanbadnicks | who $1 $+($chr(37),cn) }
alias -l check_badwords { if ($me ison $1 && $me isop $1) { var %f $file_badwords, %l $lines(%f), %i 1 | while (%i <= %l) { if ($+(*,$read(%f,nt,%i),*) iswm $2) ban $+(-ku,$ban_timer) $1 $2 2 $kick_reason | inc %i } } }
;----------------------------------------------------------------------
alias -l file_chans { return $scriptdir $+ chans.txt }
alias -l file_badwords { return $scriptdir $+ badwords.txt }
alias -l id_rand { return $+([id:,$chr(32),$rand(A,Z),$rand(A,Z),$rand(1,9999),]) }
alias -l ban_timer { return $rand(1800,3600) }
alias -l kick_add_reason { return (for more information regarding your ban please join #HelpKick to ask for removal) }
alias -l kick_reason { return 04[AUTO SCAN] [Banned] reason: Bad nicknames are not allowed on this channel - $id_rand - $kick_add_reason }
;----------------------------------------------------------------------
#scanbadnicks off
raw 354:*: check_badwords $2 $3 | haltdef
raw 315:*: .disable #scanbadnicks | haltdef
#scanbadnicks end
Подпись автора

[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]

11

NOT WORK for me, no see error show. Try it again Epic. Thanks a lot my friend

P.S. I have already to turn all ON (Scan join nicks + Scan new nicks + Scan join me), but both of them NOT WORK.

12

1478,352 написал(а):

NOT WORK for me

У меня всё исправно и достаточно быстро работает, также как и в прошлый раз.
Попробуйте для тестирования использовать mIRC - только чистый клиент, без каких либо других скриптов.
Если этот скрипт по прежнему не будет работать, то тогда лучше обсудить вашу проблему в IRC чате.
Для подключения введите в вашем клиенте команду: /server -m irc.epicnet.ru 6667 -i Robert Robert_ Robert@Robert Robert -j #Code

Я отвечу вам, когда буду в онлайн и как только у меня появится свободное время.
Примечание: Присутствие моего ника в сети не означат, что я в онлайн, т.к. постоянное нахождение моего ника в чате поддерживается ZNC сервисом.

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

[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]

13

Dear my friend Epic!

I have some edited on your code, then it work now for:  1. Check badnick on nicks join.  2. Change badnick kick ban

Check badnick on BOT join channel NOT WORK.

Could you please to have look my edited code and fixed it for me. Thanks a lot friend!

Note: Some time BOT check badnick on join channel, not at all.

Here is your code i have edited:

Код:
;######################################################################
;#  Name: Scan Bad Nicks v1.2  (edit by Robert, mod v1)
;#  Author: Epic (http://epicnet.ru, irc.epicnet.ru:6667 #Code)
;#  Description: Scans all joining, as well as nicknames already present on the channel, when the Bot itself joins the channel. If bad words from the “badwords.txt” file are found in the nickname names, then “Kick+Ban” is performed. 
;#  Path: All working files with which the script interacts must be located in the same folder where the script itself is located: "scripts\ScanBadNicks\". 
;######################################################################

menu * {
  - 
  [29] Scan Bad Nicks 
  .Start scanning: scan_start $chan
  .- 
  .Scan on nicks join (All)
  ..$iif(%sbn_nicks_join == on,$style(1)) ON: %sbn_nicks_join = on | echo -a Auto scan badnick when nicks joined is 03ON
  ..$iif(%sbn_nicks_join == off,$style(1)) OFF: %sbn_nicks_join = off | echo -a Auto scan when nicks joined is now 04OFF
  .-
  .Scan new nicks (All)
  ..$iif(%sbn_nicks_new == on,$style(1)) ON: %sbn_nicks_new = on | echo -a Auto scan when changing to new nicks is 03ON
  ..$iif(%sbn_nicks_new == off,$style(1)) OFF: %sbn_nicks_new = off | echo -a Auto scan when changing to new nicks is now 04OFF
  .-
  .Scan on me join (Bot)
  ..$iif(%sbn_me_join == on,$style(1)) ON: %sbn_me_join = on | echo -a Auto scan when me joined is 03ON
  ..$iif(%sbn_me_join == off,$style(1)) OFF: %sbn_me_join = off | echo -a Auto scan when me joined is now 04OFF
} 
;----------------------------------------------------------------------
#badnickscan on
on *:JOIN:#:{
  if (!$read($file_chans,nw,$chan)) { return }
  if ($nick == $me) { .ial on | ialfill $chan }
  if ($nick != $me) && (%sbn_nicks_join == on) { check_badnick $chan $nick }
}
;----------------------------------------------------------------------
on *:OP:#: {
  if (!$read($file_chans,nw,$chan)) { return }
  if (%sbn_me_join == on) && ($opnick == $me) { scan_start $chan }
}
;----------------------------------------------------------------------
on *:NICK: {
  if (%sbn_nicks_new == on) {
    var %nick $newnick, %i $comchan(%nick,0 )
    while (%i) {
      var %chan $comchan(%nick,%i)
      if ($read($file_chans,nw,%chan)) { check_badnick %chan %nick }
      dec %i
    }
  }
}
#badnickscan end
;----------------------------------------------------------------------
alias -l scan_start {
  if ($me !isop $1) { return }
  .enable #scanbadnicks | who $1 $+($chr(37),cn)
}
alias -l check_badnick {
  if ($me ison $1) && ($me isop $1) {
    var %f $file_badnick, %l $lines(%f), %i 1
    while (%i <= %l) {
      if ($+(*,$read(%f,nt,%i),*) iswm $2) { ban $+(-ku,$ban_timer) $1 $2 2 $kick_reason }
      inc %i
    }
  }
}
;----------------------------------------------------------------------
alias -l file_chans { return $mircdir $+ BADNICKSCAN_CHAN.txt } 
alias -l file_badnick { return $mircdir $+ nicksflood1.txt } 
alias -l ban_timer { return $rand(3600,10800) } 
alias -l kick_add_reason { return (for more information regarding your ban please join #HelpKick to ask for removal) } 
alias -l kick_reason { return 04([Banned ] (reason: BadNick/NickFlood/NickBlacklist are not permitted for this channel) [id: 1] - $kick_add_reason $+ ) }
;----------------------------------------------------------------------
#scanbadnicks off
raw 354:*: { check_badnick $2 $3 | haltdef }
raw 315:*: { .disable #scanbadnicks | haltdef }
#scanbadnicks end

14

Я проверил предоставленный вами код и у меня он работает исправно.

  • Единственное, что вам следует изменить это [mark=red]menu *[/mark] на [mark=blue]menu channel[/mark], т.к. скрипт делает проверку списка пользователей только в окнах канала, и не делает это в любых других окнах mIRC, соответственно меню также должно работать только, когда вы его открываете правой кнопкой мыши в окне канала.

  • Также непонятно, зачем вы добавили эти строки [mark=red]#badnickscan on / #badnickscan end[/mark] для создания группы, если это нигде не управляется в коде. Вероятно это может быть причиной периодической неработоспособности скрипта, когда по какой то причине отключается целый блок с группой кода, меняя режим "on" на "off" [mark=red]#badnickscan off[/mark], что приводит к отключению этой группы кода и блокирует работу необходимых обработчиков событий. Как правильно использовать группы в коде вы можете прочитать об этом здесь: https://en.wikichip.org/wiki/mirc/groups

  Убедительная просьба - если вы вносите какие то корректировки и изменения в код, который когда-то был написан мной, а потом вы публикуете этот код на форуме, то пожалуйста, в дополнение к моему авторству ставьте вашу подпись, что-то вроде этого "(edit by Robert, mod v1)", которая будет сообщать читателям, что этот код был изменён и отредактирован вами, и имеет свой индекс модификации исходного кода. Это нужно для того, чтобы не вводить читателей в заблуждение и чтобы исключить моё 100% авторство после новой редакции кода, в которой я не принимал участие, т.к. после этого могли появиться новые блоки с кодом, созданные в другом стиле, отличающимся от моего, в котором могут присутствовать лишние строки, символы или допущены различные синтаксические ошибки, приводящие к неисправности скрипта, или были внесены некорректные изменения, которые частично меняют функциональность или полностью ломают скрипт. Иными словами, если код был подвержен какому либо вмешательству/изменению, то об этом обязательно должна стоять соответствующая надпись (отметка) в коде, указывающая на автора внесённых изменений и индекс данной модификации. Спасибо.

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

[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]

15

Dear Epic!

1. I have already to change menu * to menu channel

2. Why you added these lines #badnickscan on / #badnickscan end <== Because i can use this command: !badnick <on|off> to turn On or Off group #badnickscan from anywhere.

3. I don't know why the code check on ME JOIN scan badnick is NOT WORK. (P/s: On Op event, On Nick event, Scan start and On Nick join WORK PERFECT)

Can you rewrite the code to check on ME JOIN and scan badnick on the channel? Thanks in advance

16

1482,352 написал(а):

Because i can use this command: !badnick <on|off> to turn On or Off group #badnickscan from anywhere.

Хммм..., но я не увидел в предоставленном вами коде необходимого обработчика событий "ON TEXT" для создания подобной команды.


1482,352 написал(а):

Can you rewrite the code to check on ME JOIN and scan badnick on the channel?

Я не знаю, что ещё нужно переписать в коде, чтобы это заработало у вас, т.к. у меня весь функционал скрипта работает исправно - следовательно я уже создал для вас полностью рабочий и исправный скрипт. Вероятно причина вашей проблемы кроется в особенностях AdiIRC, тогда как я создаю и тестирую все скрипты только в mIRC. Поэтому в дальнейшем вам придётся самостоятельно решать подобные проблемы по адаптации скриптов для вашего IRC клиента. Также вы можете обратиться в тех-поддержку AdiIRC по вопросу неработоспособности некоторых mIRC скриптов, которые по факту являются исправными, но они некорректно работают в AdiIRC. Или же вы можете просто попробовать использовать mIRC для вашего Бота.

Попробуйте изменить 35-ю строку в вашем коде:

Код:
if (%sbn_me_join == on) && ($opnick == $me) { scan_start $chan }

На эту строку:

Код:
if (%sbn_me_join == on) && ($opnick == $me) { .ial on | ialfill $chan | .timerSBN 1 5 scan_start $chan }
Подпись автора

[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]

17

Line 35 is ON OP event? This event is work, no need rewrite.

I want to rewrite for check ON JOIN event: check on Bot join channel room and scan badnick and Kick+Ban if found.

Thanks in advance.

18

Вы же ранее предлагали использовать обработчик события "ON OP" для запуска проверки всех ников канала, как только Бот получит статус @ "OP"  ??? ... 

Ок. Попробуйте изменить в вашем коде эту часть так:

Код:
on *:JOIN:#:{
  if (!$read($file_chans,nw,$chan)) { return }
  if ($nick == $me) && (%sbn_me_join == on) { .ial on | ialfill $chan | .timerSBN $+ $chan 1 5 scan_start $chan }
  if ($nick != $me) && (%sbn_nicks_join == on) { check_badnick $chan $nick }
}
;----------------------------------------------------------------------
on *:OP:#:{
  if (!$read($file_chans,nw,$chan)) { return }
  if ($opnick == $me) { echo -a Here the Bot must do something when it receives @OP on the channel $chan ... }
}

Это должно работать, но теперь это никак не будет связано с событием "ON OP", т.к. проверка будет запускаться при срабатывании события "ON JOIN".
Вы можете самостоятельно отрегулировать в таймере "timerSBN" подходящее вам время задержки в секундах. Сейчас оно настроено на 5 секунд.
Также, если после этого вам больше не требуется использовать обработчик события "ON OP", то просто удалите его из вашего кода, вместе с телом события.

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

[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 Чата » HELP SCRIPTS - Помощь по mIRC скриптам » Auto scan for BadNicks when MyBot or users join a channel