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

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

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



BADWORDS with EXCEPTIONS

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

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="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

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="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]

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="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]

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="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]

9

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

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

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