del
Новичок
Репутация: 1
Gender: 
Posts: 37
|
 |
« Reply #15 on: 29 August 2007, 20:54 » |
|
Alexey, неее, такого пока не придумали, вроде )) P.S. Скажу не по теме, но выйди в аську или проверь мыло )))
|
|
|
Logged
|
|
|
|
man
Новичок
Репутация: 2
Gender: 
Posts: 21
|
 |
« Reply #16 on: 30 August 2007, 16:55 » |
|
почему у вас не работает, чесно говоря незнаю, не раз мною проверено, кидает и банит, возможно будет некоректно работать в не той кодировке, ANSI - правильная кодировка.
а зачем нужен этот алгоритм, мат есть - есть бан (: или если чего не понял, прошу описать подробнее
|
|
|
Logged
|
|
|
|
del
Новичок
Репутация: 1
Gender: 
Posts: 37
|
 |
« Reply #17 on: 31 August 2007, 11:34 » |
|
Не знаю, что такое, но сколько не матерятся, скрипт не банит и не кикает (
|
|
|
Logged
|
|
|
|
Youpiter
Пользователь

Репутация: 4
Gender: 
Posts: 57
|
 |
« Reply #18 on: 5 September 2007, 17:13 » |
|
Del, действительно странно, сам только что проверил. Скрипт стопроцентно рабочий. Прекрасно банит. 1.Проверьте правильно ли указан канал, на котором он должен работать? 2.Может в ходе экспериментов у вас возникали критические ошибки и событие автомотически отключилось
|
|
|
Logged
|
|
|
|
Infinity
Новичок
Репутация: 2
Gender: 
Posts: 11
Александр
|
 |
« Reply #19 on: 23 September 2007, 01:53 » |
|
Приветик. Писал в события скрипт - не работает. А Куда именно его вписать?
|
|
|
Logged
|
"Всегда вперед и только ввысь!"
|
|
|
man
Новичок
Репутация: 2
Gender: 
Posts: 21
|
 |
« Reply #20 on: 23 September 2007, 06:51 » |
|
можно выполнить его в тестере, изменив местоположение базы и название канала
|
|
|
Logged
|
|
|
|
ddn
Новичок
Репутация: 0
Posts: 1
|
 |
« Reply #21 on: 12 October 2007, 03:53 » |
|
можно выполнить его в тестере, изменив местоположение базы и название канала
При таком случае, после перезапуска квирка скрипт перестает работать(
|
|
|
Logged
|
|
|
|
Hadros
Новичок
Репутация: 7
Gender: 
Posts: 32
|
 |
« Reply #22 on: 20 October 2007, 20:46 » |
|
функция проверки строки на присутствие матерного слова (возвращает "ничто", если строка нормальная и найденную маску мата если такая найдена: alias(BadWords::check) { %str=" "$str.lowcase($str.stripcolors($0))" " foreach(%bwExtWord,%BadWordsExt) %str=$str.replace(%str,"",%bwExtWord) %str=~tr/ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ/ёйцукенгшщзхъфывапролджэячсмитьбю/ %str=~tr/\,\.\!\#\%\^\&\*\(\)\-\=\\\_\+\|\`\~\[\]\{\}\;\'\:\"\,\.\/\<\>\?‚„…‰‹‘’“”•–—˜™›¤¦«¬°±µ·»/ / %str4=%str %str4=~tr/1234567890\@\$\x0F/ / %str4=" "$str.replace(%str4,""," ")" " %str=~tr/\@\$ЉЂЃѓ†‡€ЊЌЋЏђљњќџЎўЈҐ§Ё©Є®ЇІіґё№єјЅѕї¶/аслбггttенkhuhлнkuууjгsесеriiiгеnеjssiп/ %str=~tr/69403/бячоз/ %str2=%str %str2=~tr/69403yabсeghkmnoprtuxёй/бячозуавcеднкмпоргтихеи/ %str3=%str %str3=$str.replace(%str3,"я","ya") %str3=$str.replace(%str3,"ч","ch") %str3=$str.replace(%str3,"ш","sh") #%str3=$str.replace(%str3,"л","/\\") %str3=$str.replace(%str3,"л","ji") %str3=$str.replace(%str3,"л","jl") %str3=~tr/abcdefghijklmnopqrstuvwxyz/абцдефгхииклмнопqрстуввxyз/ foreach(%bw,%BadWords) if ($str.match(%bw,%str2,e)) { %result=%bw;return %result; } foreach(%bw,%BadWords) if ($str.match(%bw,%str3,e)) { %result=%bw;return %result; } foreach(%bw,%BadWords) if ($str.match(%bw,%str4,e)) { %result=%bw;return %result; } } перед использованием надо загрузить из какого-нибудь файла список матерных слов. Например так: %FileBWDict=$file.localdir()"BadWords.txt"; # Файл-словарь антимата alias(BadWords::LoadDict) { if (!$file.exists(%FileBWDict)) file.write -l %FileBWDict " ывапывапывап$lf" %BadWords=$file.readlines(%FileBWDict) echo "$k(9)$b()Загружен словарь антимата %BadWords[]# записей$o()" } в словаре должны быть маски для проверяемой строки с указанием знаков ? и * там где нужно. Каждая маска в новой строке. Так-же надо загрузить список исключений: %FileBWExt=$file.localdir()"BWExt.txt"; # Файл-словарь исключений антимата alias(BadWords::LoadExceptions) { if (!$file.exists(%FileBWExt)) file.write -l %FileBWExt "привет$lf" %BadWordsExt=$file.readlines(%FileBWExt) echo "$k(9)$b()Загружен словарь исключений антимата %BadWordsExt[]# записей$o()" }
Чтобы проверить как это работает: event(OnChannelMessage,тест на мат) { %t=$BadWords::check($3) if (%t!=$nothing) { echo $k(9) $0 сматерился. Совпало %t } }
дальше качество вашего антимата будет зависеть только от того, как вы составите списки плохих и хороших слов
|
|
|
Logged
|
Eru shitteiru ka shinigami wa ringo shika tabenai
|
|
|
alexzulu
|
 |
« Reply #23 on: 14 November 2007, 20:12 » |
|
event(OnChannelMessage,censor) { %a = $file.read($file.localdir/config/scripts/word) %Words[] = $str.split(&,%a) %b = $file.read($file.localdir/config/scripts/reasons) %reasons[] = $str.split(&,%b) %i = 0 foreach(%x,%reasons) { %i++ } %i = $rand(%i) if($isMeOp == "1") { %msg[] = $str.split(" ",$3-) foreach(%z,%msg) { foreach(%y,%Words) { if(%z == %y) { kick $0 %reasons[%i] return } } } } }
вот простейше тупейший вариант. берёт слова для проверки из word и из reasons причину кика случайную. работает нормально. но без предупреждений и подобного. сразу в кик. 
|
|
|
Logged
|
Network: freenode. Channels: #kvirc and #kvirc-ru
|
|
|
Bird_Feniks
Новичок
Репутация: 0
Gender: 
Posts: 6
|
 |
« Reply #24 on: 7 March 2008, 19:44 » |
|
функция проверки строки на присутствие матерного слова (возвращает "ничто", если строка нормальная и найденную маску мата если такая найдена: alias(BadWords::check) { %str=" "$str.lowcase($str.stripcolors($0))" " foreach(%bwExtWord,%BadWordsExt) %str=$str.replace(%str,"",%bwExtWord) %str=~tr/ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ/ёйцукенгшщзхъфывапролджэячсмитьбю/ %str=~tr/\,\.\!\#\%\^\&\*\(\)\-\=\\\_\+\|\`\~\[\]\{\}\;\'\:\"\,\.\/\<\>\?‚„…‰‹‘’“”•–—˜™›¤¦«¬°±µ·»/ / %str4=%str %str4=~tr/1234567890\@\$\x0F/ / %str4=" "$str.replace(%str4,""," ")" " %str=~tr/\@\$ЉЂЃѓ†‡€ЊЌЋЏђљњќџЎўЈҐ§Ё©Є®ЇІіґё№єјЅѕї¶/аслбггttенkhuhлнkuууjгsесеriiiгеnеjssiп/ %str=~tr/69403/бячоз/ %str2=%str %str2=~tr/69403yabсeghkmnoprtuxёй/бячозуавcеднкмпоргтихеи/ %str3=%str %str3=$str.replace(%str3,"я","ya") %str3=$str.replace(%str3,"ч","ch") %str3=$str.replace(%str3,"ш","sh") #%str3=$str.replace(%str3,"л","/\\") %str3=$str.replace(%str3,"л","ji") %str3=$str.replace(%str3,"л","jl") %str3=~tr/abcdefghijklmnopqrstuvwxyz/абцдефгхииклмнопqрстуввxyз/ foreach(%bw,%BadWords) if ($str.match(%bw,%str2,e)) { %result=%bw;return %result; } foreach(%bw,%BadWords) if ($str.match(%bw,%str3,e)) { %result=%bw;return %result; } foreach(%bw,%BadWords) if ($str.match(%bw,%str4,e)) { %result=%bw;return %result; } } При компиляции этого кода выдается ошибка: Предупреждение: Строка с константой не закрыта [16:58:48] [KVS] в контексте скрипта "badwords_check.kvs", Строка 9, около символа 83 [16:58:48] [KVS] Листинг кода: [16:58:48] [KVS] 7 ... [16:58:48] [KVS] 8 %str=~tr/ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ/ёйцукенгшщзхъфывапролджэячсмитьбю/ [16:58:48] [KVS] 9 %str=~tr/\,\.\!\#\%\^\&\*\(\)\-\=\\\_\+\|\`\~\[\]\{\}\;\'\:\"\,\.\/\<\>\?'":%<''""--?T>
|
|
|
Logged
|
Приглашаем всех на наши IRC каналы #DelphiIntRu в сети DalNet и #Delphi.Int.Ru в сети RusNet.
|
|
|
Bird_Feniks
Новичок
Репутация: 0
Gender: 
Posts: 6
|
 |
« Reply #25 on: 11 March 2008, 19:23 » |
|
На основе материалов данной темы я сделал Бота как Дополнение для КВирка с функцией Антимата. В дальнейшем планируется увеличение функционала Бота. Но есть загвоздка. В функции (алиасе) проверки слов почему-то не всегда срабатывает на слова из словаря.  Некоторые слова пропускает. Буду рад любой помощи. Может кто-нибудь подскажет причину и ее решение ?
|
|
« Last Edit: 11 March 2008, 19:43 by Bird_Feniks »
|
Logged
|
Приглашаем всех на наши IRC каналы #DelphiIntRu в сети DalNet и #Delphi.Int.Ru в сети RusNet.
|
|
|
Hadros
Новичок
Репутация: 7
Gender: 
Posts: 32
|
 |
« Reply #26 on: 11 March 2008, 22:53 » |
|
создавайте файл badwords_check.kvs в кодировке UTF-8
|
|
« Last Edit: 11 March 2008, 23:05 by Hadros »
|
Logged
|
Eru shitteiru ka shinigami wa ringo shika tabenai
|
|
|
Bird_Feniks
Новичок
Репутация: 0
Gender: 
Posts: 6
|
 |
« Reply #27 on: 12 March 2008, 11:56 » |
|
создавайте файл badwords_check.kvs в кодировке UTF-8
Ваш скрипт с форума мне удалось перенести в Тестер скриптов в квирке через буфер обмена. Потом я его експортировал из квирка в файл badwords_check.kvs, так что думаю он и так в кодировке UTF-8. Еще я заметил, что текстовые файлы со словами тоже должны быть в этой кодировке. Я вычислил, что срабатывают слова, которые в файле словаря записаны со знаком "*" с обеих сторон, например, маска *тест* сработает на любые слова, где встречается "тест" - тест, тестовый, тестовая... А это уже не правильно. Я так предпалагаю, что он у вас стоит на вооружении и прекрастно работает ?
|
|
|
Logged
|
Приглашаем всех на наши IRC каналы #DelphiIntRu в сети DalNet и #Delphi.Int.Ru в сети RusNet.
|
|
|
Hadros
Новичок
Репутация: 7
Gender: 
Posts: 32
|
 |
« Reply #28 on: 12 March 2008, 20:45 » |
|
в словаре должны быть маски для проверяемой строки с указанием знаков ? и * там где нужно то есть если вам надо отлавливать только слово "тест", то в словаре надо писать * тест *, то есть с пробелами вначале и в конце в словаре исключений не маски, а комбинации букв, которые будут вырезаться из строки перед проверкой. символы * и ? там не нужны foreach(%bwExtWord,%BadWordsExt) %str=$str.replace(%str,"",%bwExtWord)
у меня, кстати, словари в кодировке win-1251
|
|
« Last Edit: 12 March 2008, 20:49 by Hadros »
|
Logged
|
Eru shitteiru ka shinigami wa ringo shika tabenai
|
|
|
Bird_Feniks
Новичок
Репутация: 0
Gender: 
Posts: 6
|
 |
« Reply #29 on: 13 March 2008, 11:58 » |
|
то есть если вам надо отлавливать только слово "тест", то в словаре надо писать * тест *, то есть с пробелами вначале и в конце А вот этого я не знал и даже не догадывался. Еще удивлялся, зачем в самом начале пробелы добавляете слева и справа. Правильно ли я понял: если я хочу поймать одно слово целиком, например "тест", то в словаре надо писать * тест *, а если какие либо совпадения, например любые слова начинающиеся на "тест", "тестовый", "тестовая", тогда маска в словаре должна быть "* тест*", т.е. в начале пробел есть, а в конце его нет ? И тоже самое касается знака одного символа - "?" ? в словаре исключений не маски, а комбинации букв, которые будут вырезаться из строки перед проверкой. символы * и ? там не нужны Ага, а здесь значит можно просто указать сами слова исключения без каких-либо знаков, например "себя", "себе" ? у меня, кстати, словари в кодировке win-1251 А вот у меня ни с одной из стандартных он не захотел работать, только в UTF-8 нормально загрузил в массив, а в остальных сплошные вопросы были "?". Квирк у меня 3.2.6.20080226.
|
|
|
Logged
|
Приглашаем всех на наши IRC каналы #DelphiIntRu в сети DalNet и #Delphi.Int.Ru в сети RusNet.
|
|
|
|