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

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

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



BADWORDS with EXCEPTIONS

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

1

Hello.
I'm making changes to this addon that kicks/bans a user if they use any words included in a badwords.txt file.
I would like to add a line so that some words included in a sentence are excepted. These excepted words are included in an exceptions.txt file.

For example:
-If a sentence contains dick (that is a badword) , you are kicked. But the word DICK (not allowed) is also part of DICKENS (allowed). So the word DICKENS is included in the exceptions. But a user could write "YOU_ARE_A_DICKHEAD_GUY", so I inluded *DICK*. Any word that include DICK/DICKS but not vulgar, are included in the exceptions (for example DICKENS, MOBY_DICK, etc...)
-Or if someone spam with "http" or "https", must be kicked/banned, so I add *HTTP* to the badwords, but in the exceptions I add for example *http://www.miositoweb*, or *https://www.mioforum* (I'm not spamming, those links are fake)

Код:
on *:text:*:#CHANNEL:{ 
  if ($nick !isop #) && ($nick !ishop #) && ($nick !isvoice #) { 
    $bad($1-) 
  } 
} 
alias bad { 
  var %o 1 
  while (%o <= $lines(badwords\badwords.txt)) {
  
  ;============ WHAT I ADDED =======

if ($read(badwords\eccezioni.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { halt }

    ;===============================
    
    if ($read(badwords\badwords.txt, %o) iswm $1- ) && (%bad [ $+ [ $nick ] ] == $nick) { 
      ban -u3600 #CHANNEL $address($nick,2) | write $mircdir $+ banemule.txt *Badwords* $date $time $nick ---> $address
      kick #CHANNEL $nick BAN REASON
      unset %bad [ $+ [ $nick ] ] 
    } 
    elseif ($read(badwords\badwords.txt, %o) iswm  $1- ) { 
      kick #CHANNEL $nick WRITING $read(badwords\badwords.txt, %o) NOT ALLOWED. NEXT IS BAN
      set %bad [ $+ [ $nick ] ] $nick 
      .timer 1 300 unset %bad [ $+ [ $nick ] ] 
    } 
    inc %o 
  } 
} 

The addon works, except that it doesn't consider exceptions and also kick/bans words included in exceptions.txt.
Where is my mistake?
Thanks for help

Пост написан 04.06.2025 17:15

2

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

Попробуйте использовать этот код:

Код:
on *:TEXT:*:#channel:{ 
  if ($nick isop $chan) || ($nick ishop $chan) || ($nick isvoice $chan) { return } 
  check_badwords $chan $nick $1-
}

alias -l check_badwords {
  var %i 1 | while (%i <= $lines($bwfile)) {
    var %bw $read($bwfile,nt,%i)
    if (%bw iswm $3-) {
      var %e 1 | while (%e <= $lines($exfile)) {
        if ($read($exfile,nt,%e) iswm $3-) { break }
        if (%e == $lines($exfile)) {
          ban -ku3600 $1 $2 2 Reason ban use of bad word in message
          write -i $blfile %bw $date $time $2 $address($2,2)
        }
        inc %e
      }
    }
    inc %i
  }
}

alias -l bwfile { return badwords\badwords.txt }
alias -l exfile { return badwords\exceptions.txt }
alias -l blfile { return badwords\banlog.txt }

Содержание файла "badwords.txt":
[flist=black]*fuck*
*dick*
*http*
[/flist]

Содержание файла "exceptions.txt":
[flist=black]*dickens*
*moby_dick*
*http://www.miositoweb*
*https://www.mioforum*
[/flist]

[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

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

I have reworked your script so that it can work according to your requirements.

Try using this code:

Contents of the file " badwords.txt ":

Contents of the file " exceptions.txt ":

 
Note : Notice the three aliases at the bottom of the code that return the path to the working files. You can change this to whatever names you need.

Thanks Epic.
Is it possible to add an option?

On first violation , just a kick. kick $1 Reason for kick
On second violation ---->ban -ku3600 $1 $2 2 Reason ban use of bad word in message

Thanks

4

Ок. Я внёс дополнительные изменения, чтобы установка бана происходила только после первого предупреждения с выполнением кика и активацией таймера для ожидания повторного нарушения. Но если время таймера после кика истечёт, то при повторном нарушении пользователь получит очередное предупреждение с выполнением кика и активацией нового таймера.

Попробуйте использовать этот код скрипта:

Код:
on *:TEXT:*:#test:{ 
  if ($nick isop $chan) || ($nick ishop $chan) || ($nick isvoice $chan) { return } 
  check_badwords $chan $nick $1-
}

alias -l check_badwords {
  var %i 1 | while (%i <= $lines($bwfile)) {
    var %bw $read($bwfile,nt,%i)
    if (%bw iswm $3-) {
      var %e 1 | while (%e <= $lines($exfile)) {
        if ($read($exfile,nt,%e) iswm $3-) { break }
        if (%e == $lines($exfile)) {
          if (!$hget($+(kick,$1),$2)) {
            kick $1 $2 Warning: use of bad word in message, next is ban!
            hadd $+(-mu,$ktimer) $+(kick,$1) $2 $true
          }
          else {
            ban $+(-ku,$btimer) $1 $2 2 Reason ban: use of bad word in message.
            write -i $blfile %bw $date $time $2 $address($2,2) | hdel $+(kick,$1) $2
          }
        }
        inc %e
      }
    }
    inc %i
  }
}

alias -l bwfile { return badwords\badwords.txt }
alias -l exfile { return badwords\exceptions.txt }
alias -l blfile { return badwords\banlog.txt }
alias -l ktimer { return 300 }
alias -l btimer { return 3600 }

Примечание: Теперь вы можете настраивать время ожидания таймера в секундах, отдельно для кика и бана с помощью двух алиасов "ktimer" и "btimer".

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

[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

Of course it perfectly work and You always great, helpful and kind. Thanks Epic^^
Just a question: why timer on kick?
Thanks

Отредактировано Chandra (29.07.2025 14:30)

6

1603,387 написал(а):

Just a question: why timer on kick?

Так было сделано изначально в предоставленном вами коде, только я изменил способ хранения данных с переменной на хеш-таблицу.
Наверное это нужно для того, чтобы дать шанс нарушителям исправиться, чтобы они не улетали в бан слишком быстро :-)

В принципе, если вам это не нужно, вы можете увеличить время таймера на любое значение, например "999999" секунд, чтобы он не мог сброситься раньше, чем вы отключите mIRC, и тогда первое предупреждение для нарушителя будет последним, без возможности быстрого сброса таймера с удалением данных о первом нарушении.

Либо можно просто убрать это из кода, заменив 15 строку: [c=#333]hadd $+(-mu,$ktimer) $+(kick,$1) $2 $true[/c] на эту строку: [c=#333]hadd -m $+(kick,$1) $2 $true[/c]

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

[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

Oh oh yes... Now I remind:
Kick 300 is because if they rejoin and say badword within 300 sec, so they'll be banned. If they repeat badword AFTER 300 sec then they'll get just a kick. Is it right?

8

Объяснение:

1. Когда пользователь впервые напишет какое то плохое слово из списка в файле "badwords.txt", то он получит кик с предупреждением о нарушении, при этом, канал и ник пользователя-нарушителя будут сохранены в хеш-таблицу (для каждого ника своя запись) со сроком таймера "300" секунд (можно изменить), по истечении которого данные о пользователе будут удалены.

2. Если этот пользователь в течении "300" секунд повторно напишет плохое слово и данные о нём всё ещё хранятся в хеш-таблице, то на этот раз он получит бан, который также устанавливается с таймером на "3600" секунд (можно изменить) для автоматического удаления из списка канала, по истечению времени, и соответственно данные о предупреждении также удаляются из хеш-таблицы, т.к. пользователь уже получил бан.

[indent=0.8,0.5]
Попробуйте изменить значения для двух таймеров на меньшее количество секунд, например на "30" и "60", чтобы провести тестирование и посмотреть как это работает.

[indent=0.8,0.5]
Если что то пойдёт не так или будет неисправно, дайте мне знать.
https://i.ibb.co/FWqYjt6/ih48ht4rhre.png

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

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

9

Everything perfectly work. I tried changing timer.
Really perfect job sir.
Many thanks^^

10

Another quetion...
When I set a variable like:

[c] var %i 1 | while (%i <= $lines($bwfile)) { [/c]

is the letter (in this case we have  %i) important or may I use any letter?

[c] var %k 1 | while (%k <= $lines($bwfile)) { [/c]

Thanks

11

В качестве названия переменной можно использовать любую букву или любое количество символов. Но для лучшего понимания того, какие данные хранит та или иная переменная, рекомендуется использовать подходящее по смыслу название, соответствующее производимой с этой переменной операцией, действию или значению сохранённых в ней данных.
Подробнее об этом здесь: https://en.wikichip.org/wiki/mirc/variables

В данном случае, для подсчёта количества произведённых циклом итераций используется короткое классическое название переменной в виде буквы [c]i[/c] - от слова "iteration".
Если внутри тела цикла будет находиться ещё один цикл, то для каждого цикла необходимо использовать своё/другое название переменной для подсчёта количества итераций.

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

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

12

Got it, thanks---> Variables are untyped – therefore capable of storing letters, numbers, or strings at any given point.

So I also set as [c]%swear 1[/c] etc... and of course recall it correctly.

So why don't to write [c]%iteration 1[/c] instead of [c]%i 1[/c] ?

What happen if in a script there're more addons with %i ?

Thanks Epic

13

1670,387 написал(а):

So why don't to write "%iteration 1" instead of "%i 1" ?

Это временная переменная, которая используется только для подсчёта количества итераций цикла, поэтому мы точно знаем, что там хранится число.
Вы можете назвать эту переменную как угодно, например: [c]%my_variable_for_counting_the_number_of_loop_iterations[/c] - это будет в полной мере информировать разработчика скрипта о том, для чего используется эта переменная, но согласитесь, что это достаточно длинное и неудобное в использовании название. Поэтому, в данном случае, для цикла мы используем очень короткое, однобуквенное и логически понятное название [c]%i[/c], которое будет удобно использовать для различных операций, условий или внутри идентификаторов, в качестве параметра с числовым значением, например: [c]$read(file.txt,nt,%i)[/c] или [c]$gettok(a b c d e,%i,32)[/c] и т.д.
[indent=0.8,0.5]

1670,387 написал(а):

What happen if in a script there're more addons with %i ?

Что вы имеете ввиду? Приведите какие-нибудь примеры, если этот вопрос ещё актуален, после предыдущего ответа.

[indent=0.8,0.5]
P.S. Кажется, подобные вопросы больше подходят для публикации в категории START NEWBIE 

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

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

14

Ok. I move my question there
Thanks

15

There was a need to improve the code.

Troll users have learned to bypass channel protection by using special characters as separators between letters in a swear/bad word.

For example:
[flist width=250][S|W|E|A|R|I|N|G]
S-W-E-A-R-I-N-G
S_W_E_A_R_I_N_G
_S`W`E`A-R`I`N`G_
...S...W...E...A...R...I...N...G...
[/flist]

[indent=0.8,0.5]
Where to add a check for special chars?

[c]alias -l remove_chars { return $remove($3,_,-,`,^,|,\,[,],$chr(123),$chr(125)) }[/c]

[indent=0.8,0.5]
Thanks

Отредактировано Chandra (05.10.2025 17:39)

16

Каждый алиас должен начинаться только с новой строки кода и за пределами последних закрывающих фигурных скобок "}" других алиасов или обработчиков событий.
Подробнее об этом можно узнать здесь:  https://en.wikichip.org/wiki/mirc/aliases
[indent=0.8,0.5]
Далеко не в каждом случае получится одинаково хорошо встроить в свой код то, что было реализовано для другого кода скрипта. Сначала нужно разобраться, для чего был создан выбранный вами элемент кода, как он работает и что он делает, чтобы понять, как его можно правильно использовать.
[indent=0.8,0.5]
Алиас с названием "remove_chars" используется в другом скрипте в качестве идентификатора [c]$remove_chars()[/c], который принимает внутри круглых скобок 1 аргумент/параметр в виде ника пользователя [c]$remove_chars(Nickname)[/c], который попадая внутрь алиаса будет являться идентификатором $1, но никак не $3, т.к. у нас нет 2-го или 3-го переданного алиасу параметра, есть только 1 - это ник. И далее, идентификатор [c]$remove_chars()[/c] возвращает обратно в строку кода (в которой он был вызван) уже обработанный ник пользователя, из которого были удалены все перечисленные через запятую символы, находящиеся внутри алиаса.
[indent=0.8,0.5]
В большинстве случаев, конфигурация IRCd сервера позволяет использовать только ограниченный набор символов в названии ника пользователя, поэтому применение данного алиаса может быть достаточным, чтобы перечислить в нём все необходимые символы, которые следует вырезать из ника для корректного определения плохого слова.
[indent=0.8,0.5]
Но если вы хотите использовать этот алиас-идентификатор для проверки плохих слов в сообщениях канала, то скорее всего вы потерпите неудачу и столкнётесь с трудностью/невозможностью перечислить все символы, которые нужно будет вырезать из текста для корректной проверки плохих слов, т.к, если ваш IRCd сервер поддерживает UTF-8 кодировку, то пользователи могут использовать свыше 500000+ разнообразных символов в тексте сообщения. Полный набор юникод символов представлен в этой таблице  [c]()[/c]
[indent=0.8,0.5]
Как вы можете убедиться, многие буквы какого либо языка мира, а также некоторые знаки и символы могут напоминать буквы любого другого языка мира, в том числе буквы английского алфавита. Из этого можно сделать вывод, что тролли на вашем канале при составлении текста сообщения могут использовать любые символы юникода, перемешивая их в различных комбинациях, чтобы придумывать бесконечное количество новых слов, которые будут внешне напоминать ругательные/плохие слова, на разных языках мира, например - на русском, английском, итальянском, французском, немецком, испанском, турецком и т.д., которые будет очень трудно распознать/идентифицировать в коде как ругательные/плохие слова.
[indent=0.8,0.5]
Так что это довольно сложная задача... но тем не менее, это можно попробовать решить с помощью использования регулярных выражений, которые позволяют при помощи короткого формата синтаксиса охватывать сразу большой диапазон символов, которые необходимо будет вырезать/заменить в тексте перед его проверкой, для поиска плохих слов.
[indent=0.8,0.5]
Я подумаю (в свободное время) над тем, как это можно будет реализовать наиболее эффективно, по мере скриптовых возможностей mIRC 

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

[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

Trolls in my channel, are not so smart to use all kind of unicode, they're more caps fanatics 
But because they use something like NEOZEALAND addon , they use to send greets or message with colors.

Channel mode already remove colors from message, but what happen:

https://upforme.ru/uploads/000d/c9/8c/387/771795.png

First line is how it appear in other channels, second line is how it appear in my channel, because colors are removed.
It is enough to remove only the basic special characters available on the keyboard, such as: [c].,:;-_~@$#%&!?+=`'*^"<>/|\[]{}()[/c]

No needs to cover all 500.000 characters ;-)

Отредактировано Chandra (06.10.2025 19:12)

18

1698,387 написал(а):

Trolls in my channel, are not so smart to use all kind of unicode ... No needs to cover all 500.000 characters
It is enough to remove only the basic special characters available on the keyboard ...

Ок. Я внёс необходимые изменения в код.

Попробуйте использовать это:

Код:
on *:TEXT:*:#test:{ 
  if ($nick($chan,$nick,~&@%+)) { return }
  check_bad_words $chan $nick $1-
}

alias -l check_bad_words {
  var %chan $1, %nick $2, %addr $ial(%nick).addr, %text $cut_symbols($lower($strip($3-)))
  var %i 1 | while (%i <= $lines($bwfile)) {
    var %bw $read($bwfile,nt,%i)
    if (%bw iswm %text) {
      var %e 1 | while (%e <= $lines($exfile)) {
        if ($read($exfile,nt,%e) iswm %text) { break }
        if (%e == $lines($exfile)) {
          if (!$hget($+(kick,%chan),%nick)) {
            kick %chan %nick Warning: use of bad word in message, next is ban!
            hadd $+(-mu,$ktimer) $+(kick,%chan) %nick $true
          }
          else {
            ban $+(-ku,$btimer) %chan %nick 2 Reason: use of bad word in message
            write $blfile %bw $date $time %nick ---> %addr
            hdel $+(kick,%chan) %nick
          }
        }
        inc %e
      }
    }
    inc %i
  }
}

alias -l cut_symbols { return $remove($1-,.,:,;,_,-,~,=,+,@,$,&,!,?,`,',*,^,",<,>,/,|,\,[,],$chr(35),$chr(37),$chr(40),$chr(41),$chr(44),$chr(123),$chr(125)) }

alias -l bwfile { return badwords\badwords.txt }
alias -l exfile { return badwords\exceptions.txt }
alias -l blfile { return badwords\banlog.txt }
alias -l ktimer { return 300 }
alias -l btimer { return 3600 }

[indent=0.8,0.5]
Примечание: Обратите внимание (см. строку 3), что текст сообщения канала передаётся алиасу "check_bad_words" в качестве 3-го параметра, поэтому внутри алиаса он будет являться идентификатором $3-, и далее (см. строку 7) он сохраняется в переменной [c]%text[/c] - значение которой дополнительно обрабатывается несколько раз с помощью следующих идентификаторов: [c]$cut_symbols($lower($strip($3-)))[/c]
[indent=0.8,0.5]

  • [c]$strip()[/c] - встроенный идентификатор, который удаляет из текста все управляющие коды форматирования. Подробнее здесь.

  • [c]$lower()[/c] - встроенный идентификатор, который изменяет все буквы текста на строчные в нижнем регистре. Подробнее здесь.

  • [c]$cut_symbols()[/c] - собственный локальный алиас-идентификатор, который удаляет из текста все перечисленные через запятую символы (см. строку 31).

Поэтому, в данном случае, нет необходимости устанавливать некоторые защитные режимы канала, которые запрещают/ограничивают использование цветного/жирного/подчёркнутого текста с помощью управляющих кодов форматирования, т.к. вы можете удалять всё это внутри вашего скрипта перед началом проверки.

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

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

19

Channel mode to strip colored/bold/underlined text, is set by ircop, I can't remove it. But illegal use of symbols can't be set (I guess, but I'm not expert). Or maybe is possible using that famous Eggdrop.

Is it possible to that rule about removing symbols also in normal plain text?

I mean to avoid normal text (not swearing or badwords) like: [rect width=500]
B___U___O::::N***G===I***O:::R___N___O ?
[/rect]
In this case is using CAPS text with symbols

Отредактировано Chandra (07.10.2025 19:28)

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»