import re
import locale


import util

def strtr(s, repl):
    pattern = '|'.join(map(re.escape, sorted(repl, key=len, reverse=True)))
    return re.sub(pattern, lambda m: repl[m.group()], s)

class check:
    def __init__(self, conn, message, settings):
        self.conn = conn
        self.message = message
        self.settings = settings
        
        self.prefixes = [
            #Из одной буквы
            '[уyuooаa]_?(?=(е|e|ye|х|x|h))',
            '[вvwfфb]_?(?=(х|п|б|м|г|ж|x|p|m|g|j))',
            '[вvwfфb]_?[ъь]_?(?=(е|ё|e|ye|yo))'
            '[кk]_?(?=[х])',
            '[сcs]_?(?=[хxhпp])',
            '[сcs]_?[ъь]_?(?=(е|e|ё|ye|yo))',
            '[оo]_?(?=[хxh])',
            #Из двух букв
            '[вvbw]_?[ыyiи]_?',
            '[вvwb]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j))',
            '[вvwb]_?[зzсcs]_?[ъь]_?(?=(е|e|ё|ye|yo))',
            '[зzсcs]_?[оoаa]_?',
            '[иiuyвvbw]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[нnh]_?[аaоo]_?',
            '[нnh]_?(е|e|ye|и|i|y|u)_?',
            '[оoаa]_?[бbтtm]_?(?=(х|п|б|м|г|ж|x|p|m|g))',
            '[оoаa]_?[бbтtm]_?[ъь]_?(?=(е|e|ё|ye|yo))',
            '[сcs]_?[оoаa]_?',
            '[сcs]_?[уyu]_?',
            '[пnpдdg]_?[оoаa]_?(?:[бb]?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))|[бb]?[ьъ](?=(е|e|ё|ye|yo))|[зzs]?[аa]?)',
            #Из трёх букв
            '[бb6]_?[еe]_?[зzсcs]_?',
            '[вvbw]_?[нnh]_?[еeё]_?',
            '[вvbw]_?[оа]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[вvbw]_?[оа]_?[зzсcs]_?[ьъ]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[вvbw]_?[сcs]_?[еeё]_?',
            '[иiuy]_?[зzсcs]_?[оo0аa@]_?',
            '[кk]_?[оo0аa@]_?[еeё]_?',
            '[мm]_?[еeё]_?[жjg]_?',
            '[нnh]_?[аa@оo0]_?[дgdтmt]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[нnh]_?[аa@оo0]_?[дgdтmt]_?[ьъ]_?(?=(е|e|ё|ye|yo))',
            '[нnh]_?[аa@]_?[иiuy]_?',
            '[нnh]_?[иiuy]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[нnh]_?[иiuy]_?[зzсcs]_?[ьъ]_?(?=(е|e|ё|ye|yo))',
            '[оo]_?[бbтmt]_?[оo]_?',
            '[пpn]_?[оo]_?[дdgтmt]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[пpn]_?[оo0]_?[дdgтmt]_?[ьъ]_?(?=(е|e|ё|ye|yo))',
            '[пnp]_?[рpr]_?[аa]_?',
            '[пnp]_?[рpr]_?[еeё]_?',
            '[пnp]_?[рpr]_?[иiuy]_?',
            '[пnp]_?[рpr]_?[оo]_?',
            '[рpr]_?[аa]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[рpr]_?[аa]_?[зzсcs]_?[ьъ]_?(?=(е|e|ё|ye|yo))',
            '[рpr]_?[оo]_?[зzсcs]_?',
            '[дdg]_?[иuiy]_?[сcs]_?',
            
            '[зz]_?[лl]_?[оo]_?',
            #Из четырёх букв
            '[вvbw]_?[оo]_?[зzs]_?[оo]_?',
            '[нnh]_?[аa]_?[дdg]_?[оoаa]_?',
            '[нnh]_?[еeё]_?[дdg]_?[оo]_?',
            '[пnp]_?[еeё]_?[рpr]_?[еeё]_?',
            '[пpn]_?[оoаa]_?[дdg]_?[оoаa]_?',
            '[пnp]_?[рpr]_?[еeё]_?[дdg]_?',
            '[рpr]_?[аa]_?[зzсcs]_?[оoаa]_?',
            '[оoаa]_?[дdg]_?[нnh]_?[оoаa]_?',
            '[кk]_?[oо]_?[нnh]_?[оoаa]_?',
            '[мm]_?[уyu]_?[дdg]_?[оoаa]_?'
            '[oо]_?[сcs]_?[тtm]_?[оoаa]_?',
            '[дdg]_?[уyu]_?[рpr]_?[оoаa]_?',
            '[хxh]_?[уyu]_?[дdg]_?[оoаa]_?',
            
            '[мm]_?[уuy]_?[дd]_?[оoaа]_?',
            #Из пяти символов
            '[мm]_?[нnh]_?[оo]_?[гg]_?[оoаa]_?',
            '[мm]_?[оo]_?[рpr]_?[дdg]_?[оoаa]_?',
            '[мm]_?[оo]_?[зz]_?[гg]_?[оoаa]_?',
            '[дdg]_?[оoаa]_?[лl]_?[бb]_?[оoаa]_?',
            '[оo]_?[сcs]_?[тtm]_?[рpr]_?[оoаa]_?'
            ]
        
        self.badwords = [
            '(?<=\PL)%RE_PRETEXT%?[-]?[hхx]_?[уyu]_?[ийiеeёяюjuоo](?<!_hue(?=_)|_hue(?=so_)|_хуе(?=дин)|_hyu(?=ndai_))', #Хуй
            '(?<=\PL)[хxh]_?[уyu]_?[лl1]_?[иuiyеeь\']_?',#хули
            '(?<=\PL)[пp]_?[оo]_?[хxh]_',
            '(?<=\PL)[нn]_?[аa]_?[хxh]_',
            '(?<=\PL)[пp]_?[нnh]_?[хxh]_',
            
            '(?<=\PL)%RE_PRETEXT%?[-]?[пpрn]_?[иuyiы]_?[зzсcs]_?[дdgж]_?(?:[_]?[:vowel:])', #Пизда
            
            '(?<=\PL)%RE_PRETEXT%?[-]?[бbмm]_?[лl]_?(я|а|a|ya|е|e|э|еа|ea|eа|еa|r)_?(?:_|_?[тдtd])(?<!_б_лет)', #Бля
            
            '(?<=\PL)%RE_PRETEXT%?[-]?(е|e|ё|yo|ye|э)_?(?<!н[eе][её]_|т_е_)[бb6п]_?(?=[уyиuiаa]_|[ыиiоoaаеeёуy][_]?[тtсscлlвvнnрrpкц](?<!_ebo[kt](?=[_])|_буд[уе])(?!ьше|ял_|ятно|еп)|[лl](?:([оoаaыиuyуiяr]|ya))|[нnh][_]?[уyuи]|[кk][_]?[аa]|[сc][_]?[тt]|[тt]_?[аaеeиuiy])', #Ебать
            
            '(?<=\PL)%RE_PRETEXT%?[-]?(?<!с_|т_)[eеёэ]_?[бb6пp](?=_)', #ёб
            
            '(?<=\PL)[пpn]_?[иuyуieе]_?[дdg]_?[eеaаoо]_?[rpр](?=_?[:vowel:]|_)',#Пидор
            '(?<=\PL)[пpn]_?[иuyуieе]_?[дdg]_?[rpр](?=_)',#Пидор
            '(?<=\PL)[пpn]_?[иuyуieе]_?[тt]_?[aаoо]_?[rpр](?=_?[:vowel:]|_)',#Пидор
            '(?<=\PL)[пpn]_?[еe]_?[дdg]_?[иuiy]_?[кk](?=_?[:vowel:]|_)',#Педик
            
            '(?<=\PL)[мm]_?[уyuи]_?[дdg]_?[аaеe](?<!_myda(?=s_))',#Мудак
            
            '(?<=\PL)[zж]_?h?_?[оo]_?[pпn]_?[:vowel:]',#Жопа
            
            '(?<=\PL)[мmn]_?[аa]_?[нnh]_?[дdg]_?[:vowel:](?<!манда(?=рин)|manda(?=rin))',#Манда
        
            '(?<=\PL)%RE_PRETEXT%?[-]?[гg]_?[оoаa@]_?[вvwb]_?[нnh]_?[:vowel:]',#Говно
            
            '(?<=\PL)f_?u_?[cс]_?k(?=_)',#Fuck
            
            '(?<=\PL)%RE_PRETEXT%?[-]?л_?[оo]_?[хxh](?=_)',#Лох
            
            '(?<=\PL)[^р]?_?[scс]_?[уyuю]_?[kк]_?[:vowel:]',#Сука
            '(?<=\PL)[^р]?_?[scс]_?[уyuю]_?(ch|ч)_?[кk]_?[:vowel:]',
            
            '(?<=\PL)[зz]_?[аa]_?[лl]_?[уyu]_?[пpр]_?[:vowel:]',#Залупа
            '(?<=\PL)[зz]_?[аa]_?[лl]_?[уyuи]_?[пpр]_?[кk]_?[:vowel:]',#залупка
            
            '(?<=\PL)%RE_PRETEXT%?[хxh]_?[еe]_?[рpr](?:_?[нnh]_?[:vowel:]|[:vowel:][:consonant:][ь]?|_)(?<!хер(?=[оа]сим[:vowel:]))',#Хер
            
            '(?<=\PL)(ч|ch)_?[лl]_?[ееё]_?[нnh](?=[:vowel:]_|[:vowel:][:consonant:]_|_)',#член
            '(?<=\PL)%RE_PRETEXT%?[вvbw]_?[аaоo]_?[гgr]_?[иuiy]_?[нnh]_?(?:[:vowel:])',#вагина
            '(?<=\PL)(ч|ch)_?[мm]_?(?:[:vowel:])(?=_)',#чмо
            '(?<=\PL)(ш|sh|sch)_?[лl]_?[юуuy]_?[хxh]_?(?:[:vowel:]_?)',#шлюха
            '(?<=\PL)(ш|sh|sch)_?[лl]_?[юуuy]_?(ш|sh|sch)_?',#шлюшка
            '(?<=\PL)(?<!с)[пnp]_?(?!ice)[иyi]_?[сcs]_?(?!ать|ал|ала|али|ало)(?:([ь]_?[:consonant:]_?[:vowel:])|([:vowel:]))',#Пися/писька
            '(?<=\PL)(п|p|n)_?(з|z|s)_?(д|d)_?(ц|ts|s|tc)(?=_)',#пздц
            
            '(?<=\PL)[кkc]_?[уuy]_?[рrp]_?[вbw6]_?(?=[:vowel:]_)',#курва
            '(?<=\PL)[дd]_?[еe]_?[рrp]_?[ьb\']?_?[мm]_?(?=[:vowel:])',#дерьмо
            '(?<=\PL)[аоao]_?[нn]_?[аa]_?[лl]_?(?=[:vowel:]([:consonant:]_|_)|_)',#анал
            ]
        
        self.trans = {
            '_' : '\x20',                                 #Пробел
            '\pL' : '[^\x20\d]',                         #Буква
            '\PL' : '[\x20\d]',                          #Не буква    
            '[:vowel:]' : '[аеиоуыэюяёaeioyur]',         #Гласные
            '[:consonant:]' : '[^аеиоуыэюяёaeioyu\x20\d]' #Согласные
            }
    
        self.re_badwords = re.sub(r'%RE_PRETEXT%', '(?:' + '|'.join(self.prefixes) + ')', '|'.join(self.badwords))
        
        self.re_badwords = strtr(self.re_badwords, self.trans)
        
    def checkUrl(self):
        self.ifUrl = re.search(r'http(s)?:\/\/(www\.)?[A-Za-z]{3,}\.[A-Za-z]{,6}\/[A-Za-z]{3,}', self.message.content)
        if not self.result == None and not self.ifUrl == None and self.result.start() > self.ifUrl.start() and self.result.start() <= self.ifUrl.end():
            return True
        return False
    
    #https://regex101.com/r/lKnFhB/1
       
    def run(self):        
        self.string = self.message.content
        
        self.string = ' '.join(re.findall(r'[\S][^A-ZА-ЯЁ]{1,}|[\S]', self.string))
        
        self.string = ' ' + self.string.lower() + ' '
        
        self.trans = {
            '4' : 'ч',
            '3' : 'з',
            '0' : 'о',
            '6' : 'б',
            '@' : 'а',
            '$' : 'с',
            '1' : 'и',
            '∃':'е','∄':'е','∅':'о','∈':'е','∉':'е','∊':'е','∋':'э','∌':'э','∍':'э','∏':'п','∑':'е',
            'Ⓐ':'a','Ⓑ':'b','Ⓒ':'c','Ⓓ':'d','Ⓔ':'e','Ⓕ':'f','Ⓖ':'g','Ⓗ':'h','Ⓘ':'i','Ⓙ':'j','Ⓚ':'k','Ⓛ':'l','Ⓜ':'m','Ⓝ':'n','Ⓞ':'o','Ⓟ':'p','Ⓠ':'q','Ⓡ':'r','Ⓢ':'s','Ⓣ':'t','Ⓤ':'u','Ⓥ':'v','Ⓦ':'w','Ⓧ':'x','Ⓨ':'y','Ⓩ':'z',
            'ⓐ':'a','ⓑ':'b','ⓒ':'c','ⓓ':'d','ⓔ':'e','ⓕ':'f','ⓖ':'g','ⓗ':'h','ⓘ':'i','ⓙ':'j','ⓚ':'k','ⓛ':'l','ⓜ':'m','ⓝ':'n','ⓞ':'o','ⓟ':'p','ⓠ':'q','ⓡ':'r','ⓢ':'s','ⓣ':'t','ⓤ':'u','ⓥ':'v','ⓦ':'w','ⓧ':'x','ⓨ':'y','ⓩ':'z',
            '₣' : 'f',
            '¢' : 'c',
            '฿' : 'b',
            '©' : 'c',
            '®' : 'р',
            '!' : 'и',
            'Ꭿ':'a','凡':'a','Ꮨ':'a','∀':'a','₳':'a','Ǻ':'a','ǻ':'a','α':'a','ά':'a','Ά':'a','ẫ':'a','Ắ':'a','ắ':'a','Ằ':'a','ằ':'a','ẳ':'a','Ẵ':'a','ẵ':'a','Ä':'a','ª':'a','ä':'a','Å':'a','À':'a','Á':'a','Â':'a','å':'a','ã':'a','â':'a','à':'a','á':'a','Ã':'a','ᗩ':'a','ᵰ':'a',
            'ℬ' : 'б','Ᏸ' : 'б','β' : 'б','฿' : 'б','ß' : 'б','Ђ' : 'б','ᗷ' : 'б','ᗸ' : 'б','ᗹ' : 'б','ᗽ' : 'б','ᗾ' : 'б','ᗿ' : 'б','Ɓ' : 'б','ƀ' : 'б','ხ' : 'б','方' : 'б','␢' : 'б','Ꮄ' : 'б',
            '☾' : 'c','ℭ' : 'c','ℂ' : 'c','Ç' : 'c','¢' : 'c','ç' : 'c','Č' : 'c','ċ' : 'c','Ċ' : 'c','ĉ' : 'c','ς' : 'c','Ĉ' : 'c','ć' : 'c','Ć' : 'c','č' : 'c','Ḉ' : 'c','ḉ' : 'c','⊂' : 'c','Ꮸ' : 'c','₡' : 'c','¢' : 'c',
            'ᗫ' : 'д','Ɗ' : 'д','Ď' : 'д','ď' : 'д','Đ' : 'д','đ' : 'д','ð' : 'д','∂' : 'д','₫' : 'д','ȡ' : 'д',
            'ℯ' : 'е','ໂ' : 'е','६' : 'е','£' : 'е','Ē' : 'е','℮' : 'е','ē' : 'е','Ė' : 'е','ė' : 'е','Ę' : 'е','ě' : 'е','Ě' : 'е','ę' : 'е','Έ' : 'е','ê' : 'е','ξ' : 'е','Ê' : 'е','È' : 'е','€' : 'е','É' : 'е','∑' : 'е','Ế' : 'е','Ề' : 'е','Ể' : 'е','Ễ' : 'е','é' : 'е','è' : 'е','ع' : 'е','Є' : 'е','є' : 'е','έ' : 'е','ε' : 'е',
            'ℱ' : 'ф','₣' : 'ф','ƒ' : 'ф','∮' : 'ф','Ḟ' : 'ф','ḟ' : 'ф','ჶ' : 'ф','ᶂ' : 'ф','φ' : 'ф',
            'Ꮹ' : 'г','Ꮆ' : 'г','ℊ' : 'г','Ǥ' : 'г','ǥ' : 'г','Ĝ' : 'г','ĝ' : 'г','Ğ' : 'г','ğ' : 'г','Ġ' : 'г','ġ' : 'г','Ģ' : 'г','ģ' : 'г','פ' : 'г','ᶃ' : 'г','₲' : 'г',
            'ℍ' : 'х','ℋ' : 'х','ℎ' : 'х','ℌ' : 'х','ℏ' : 'х','ዙ' : 'х','Ꮵ' : 'х','Ĥ' : 'х','Ħ' : 'х','ħ' : 'х','Ή' : 'х','♅' : 'х','廾' : 'х','Ћ' : 'х','ђ' : 'х','Ḩ' : 'х','Һ' : 'х','ḩ' : 'х','♄' : 'х',
            'ℐ' : 'и','ℑ' : 'и','ί' : 'и','ι' : 'и','Ï' : 'и','Ί' : 'и','Î' : 'и','ì' : 'и','Ì' : 'и','í' : 'и','Í' : 'и','î' : 'и','ϊ' : 'и','ΐ' : 'и','Ĩ' : 'и','ĩ' : 'и','Ī' : 'и','ī' : 'и','Ĭ' : 'и','ĭ' : 'и','İ' : 'и','į' : 'и','Į' : 'и','Ꭵ' : 'и',
            'ჟ' : 'ж','Ĵ' : 'ж','ĵ' : 'ж','ᶖ' : 'ж','ɉ' : 'ж',
            '₭' : 'к','Ꮶ' : 'к','Ќ' : 'к','k' : 'к','ќ' : 'к','ķ' : 'к','Ķ' : 'к','Ҝ' : 'к','ҝ' : 'к','ﻸ' : 'к','ᶄ' : 'к',
            'ℒ' : 'л','ℓ' : 'л','Ŀ' : 'л','ŀ' : 'л','£' : 'л','Ĺ' : 'л','ĺ' : 'л','Ļ' : 'л','ļ' : 'л','λ' : 'л','₤' : 'л','Ł' : 'л','ł' : 'л','ľ' : 'л','Ľ' : 'л','Ḽ' : 'л','ḽ' : 'л','ȴ' : 'л','Ꮭ' : 'л','￡' : 'л','Ꮑ' : 'л',
            'ℳ' : 'м','ʍ' : 'м','ᶆ' : 'м','Ḿ' : 'м','ḿ' : 'м','♍' : 'м','ᗰ' : 'м','ᙢ' : 'м','爪' : 'м','♏' : 'м','₥' : 'м',
            'ℕ' : 'н','η' : 'н','ñ' : 'н','ח' : 'н','Ñ' : 'н','ή' : 'н','ŋ' : 'н','Ŋ' : 'н','Ń' : 'н','ń' : 'н','Ņ' : 'н','ņ' : 'н','Ň' : 'н','ň' : 'н','ŉ' : 'н','ȵ' : 'н','ℵ' : 'н','₦' : 'н',
            'ℴ' : 'о','ტ' : 'о','٥' : 'о','Ό' : 'о','ó' : 'о','ό' : 'о','σ' : 'о','ǿ' : 'о','Ǿ' : 'о','Θ' : 'о','ò' : 'о','Ó' : 'о','Ò' : 'о','Ô' : 'о','ô' : 'о','Ö' : 'о','ö' : 'о','Õ' : 'о','õ' : 'о','ờ' : 'о','ớ' : 'о','ọ' : 'о','Ọ' : 'о','ợ' : 'о','Ợ' : 'о','ø' : 'о','Ø' : 'о','Ό' : 'о','Ở' : 'о','Ờ' : 'о','Ớ' : 'о','Ổ' : 'о','ổ' : 'о','Ợ' : 'о','Ō' : 'о','ō' : 'о',
            'ℙ' : 'п','℘' : 'п','þ' : 'п','Þ' : 'п','ρ' : 'п','Ꭾ' : 'п','Ꮅ' : 'п','尸' : 'п','Ҏ' : 'п','ҏ' : 'п','ᶈ' : 'п','₱' : 'п','☧' : 'п','ᖘ' : 'п','ק' : 'п','ァ' : 'п',
            'ℚ' : 'к','q' : 'к','Q' : 'к','ᶐ' : 'к','Ǭ' : 'к','ǭ' : 'к','ჹ' : 'к',
            'ℝ' : 'р','ℜ' : 'р','ℛ' : 'р','℟' : 'р','ჩ' : 'р','ᖇ' : 'р','ř' : 'р','Ř' : 'р','ŗ' : 'р','Ŗ' : 'р','ŕ' : 'р','Ŕ' : 'р','ᶉ' : 'р','Ꮢ' : 'р','尺' : 'р',
            'Ꮥ' : 'с','Ṧ' : 'с','ṧ' : 'с','ȿ' : 'с','ى' : 'с','§' : 'с','Ś' : 'с','ś' : 'с','š' : 'с','Š' : 'с','ş' : 'с','Ş' : 'с','ŝ' : 'с','Ŝ' : 'с','₰' : 'с','∫' : 'с','$' : 'с','ֆ' : 'с',
            '₸' : 'т','†' : 'т','T' : 'т','t' : 'т','τ' : 'т','ΐ' : 'т','Ţ' : 'т','ţ' : 'т','Ť' : 'т','ť' : 'т','ŧ' : 'т','Ŧ' : 'т','ィ' : 'т','干' : 'т','Ṫ' : 'т','ṫ' : 'т','ナ' : 'т','Ꮏ' : 'т','Ꮖ' : 'т','テ' : 'т','₮' : 'т',
            '∪' : 'у','ᙀ' : 'у','Ũ' : 'у','⋒' : 'у','Ủ' : 'у','Ừ' : 'у','Ử' : 'у','Ữ' : 'у','Ự' : 'у','ύ' : 'у','ϋ' : 'у','Ù' : 'у','ú' : 'у','Ú' : 'у','ΰ' : 'у','ù' : 'у','Û' : 'у','û' : 'у','Ü' : 'у','ử' : 'у','ữ' : 'у','ự' : 'у','Џ' : 'у','ü' : 'у','ừ' : 'у','Ũ' : 'у','ũ' : 'у','Ū' : 'у','ū' : 'у','Ŭ' : 'у','ŭ' : 'у','ų' : 'у','Ų' : 'у','ű' : 'у','Ű' : 'у','ů' : 'у','Ů' : 'у',
            '✔' : 'в','✓' : 'в','∨' : 'в','√' : 'в','Ꮙ' : 'в','Ṽ' : 'в','ṽ' : 'в','ᶌ' : 'в','\/' : 'в','℣' : 'в','ʋ' : 'в','₩' : 'в','ẃ' : 'в','Ẃ' : 'в','ẁ' : 'в','Ẁ' : 'в','ẅ' : 'в','ώ' : 'в','ω' : 'в','ŵ' : 'в','Ŵ' : 'в','Ꮤ' : 'в','Ꮃ' : 'в','ฬ' : 'в','ᗯ' : 'в','ᙡ' : 'в','Ẅ' : 'в','ѡ' : 'в','ಎ' : 'в','ಭ' : 'в','Ꮚ' : 'в','Ꮗ' : 'в','ผ' : 'в','ฝ' : 'в','พ' : 'в','ฟ' : 'в',
            'χ' : 'х','×' : 'х','✗' : 'х','✘' : 'х','᙭' : 'х','ჯ' : 'х','Ẍ' : 'х','ẍ' : 'х','ᶍ' : 'х','⏆' : 'х',
            'ɣ' : 'у','Ꭹ' : 'у','Ꮍ' : 'у','Ẏ' : 'у','ẏ' : 'у','ϒ' : 'у','ɤ' : 'у','￥' : 'у','り' : 'у',
            'ℤ' : 'з','ℨ' : 'з','ჳ' : 'з','乙' : 'з','Ẑ' : 'з','ẑ' : 'з','ɀ' : 'з','Ꮓ' : 'з'
        }
        
        self.string = strtr(self.string, self.trans)
        
        self.string = re.sub(r'[\.\,\[\]\(\)\{\}\\\/\?\<\>\"\'\|\=\+\-\*\&\^\%\#\№\:\`\’]', ' ', self.string)
        
        self.string = re.sub(r'([\s\S])(?=\1)', '', self.string)
        
        self.string = re.sub(r'ё', 'е', self.string)
        
        #Поиск собственно матов
        self.result = re.search(self.re_badwords, self.string)
        if not self.result == None:
            if not self.checkUrl():
                util.logger(str(self.result), True, True)
                return True
            return False
        else:
            return False
        
        
        
    
import re
import locale


import util

def strtr(s, repl):
    pattern = '|'.join(map(re.escape, sorted(repl, key=len, reverse=True)))
    return re.sub(pattern, lambda m: repl[m.group()], s)

class check:
    def __init__(self, conn, message, settings):
        self.conn = conn
        self.message = message
        self.settings = settings
        
        self.prefixes = [
            #Из одной буквы
            '[уyuooаa]_?(?=(е|e|ye|х|x|h))',
            '[вvwfфb]_?(?=(х|п|б|м|г|ж|x|p|m|g|j))',
            '[вvwfфb]_?[ъь]_?(?=(е|ё|e|ye|yo))'
            '[кk]_?(?=[х])',
            '[сcs]_?(?=[хxhпp])',
            '[сcs]_?[ъь]_?(?=(е|e|ё|ye|yo))',
            '[оo]_?(?=[хxh])',
            #Из двух букв
            '[вvbw]_?[ыyiи]_?',
            '[вvwb]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j))',
            '[вvwb]_?[зzсcs]_?[ъь]_?(?=(е|e|ё|ye|yo))',
            '[зzсcs]_?[оoаa]_?',
            '[иiuyвvbw]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[нnh]_?[аaоo]_?',
            '[нnh]_?(е|e|ye|и|i|y|u)_?',
            '[оoаa]_?[бbтtm]_?(?=(х|п|б|м|г|ж|x|p|m|g))',
            '[оoаa]_?[бbтtm]_?[ъь]_?(?=(е|e|ё|ye|yo))',
            '[сcs]_?[оoаa]_?',
            '[сcs]_?[уyu]_?',
            '[пnpдdg]_?[оoаa]_?(?:[бb]?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))|[бb]?[ьъ](?=(е|e|ё|ye|yo))|[зzs]?[аa]?)',
            #Из трёх букв
            '[бb6]_?[еe]_?[зzсcs]_?',
            '[вvbw]_?[нnh]_?[еeё]_?',
            '[вvbw]_?[оа]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[вvbw]_?[оа]_?[зzсcs]_?[ьъ]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[вvbw]_?[сcs]_?[еeё]_?',
            '[иiuy]_?[зzсcs]_?[оo0аa@]_?',
            '[кk]_?[оo0аa@]_?[еeё]_?',
            '[мm]_?[еeё]_?[жjg]_?',
            '[нnh]_?[аa@оo0]_?[дgdтmt]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[нnh]_?[аa@оo0]_?[дgdтmt]_?[ьъ]_?(?=(е|e|ё|ye|yo))',
            '[нnh]_?[аa@]_?[иiuy]_?',
            '[нnh]_?[иiuy]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[нnh]_?[иiuy]_?[зzсcs]_?[ьъ]_?(?=(е|e|ё|ye|yo))',
            '[оo]_?[бbтmt]_?[оo]_?',
            '[пpn]_?[оo]_?[дdgтmt]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[пpn]_?[оo0]_?[дdgтmt]_?[ьъ]_?(?=(е|e|ё|ye|yo))',
            '[пnp]_?[рpr]_?[аa]_?',
            '[пnp]_?[рpr]_?[еeё]_?',
            '[пnp]_?[рpr]_?[иiuy]_?',
            '[пnp]_?[рpr]_?[оo]_?',
            '[рpr]_?[аa]_?[зzсcs]_?(?=(х|п|б|м|г|ж|x|p|m|g|j|е|ё|e|ye|yo))',
            '[рpr]_?[аa]_?[зzсcs]_?[ьъ]_?(?=(е|e|ё|ye|yo))',
            '[рpr]_?[оo]_?[зzсcs]_?',
            '[дdg]_?[иuiy]_?[сcs]_?',
            
            '[зz]_?[лl]_?[оo]_?',
            #Из четырёх букв
            '[вvbw]_?[оo]_?[зzs]_?[оo]_?',
            '[нnh]_?[аa]_?[дdg]_?[оoаa]_?',
            '[нnh]_?[еeё]_?[дdg]_?[оo]_?',
            '[пnp]_?[еeё]_?[рpr]_?[еeё]_?',
            '[пpn]_?[оoаa]_?[дdg]_?[оoаa]_?',
            '[пnp]_?[рpr]_?[еeё]_?[дdg]_?',
            '[рpr]_?[аa]_?[зzсcs]_?[оoаa]_?',
            '[оoаa]_?[дdg]_?[нnh]_?[оoаa]_?',
            '[кk]_?[oо]_?[нnh]_?[оoаa]_?',
            '[мm]_?[уyu]_?[дdg]_?[оoаa]_?'
            '[oо]_?[сcs]_?[тtm]_?[оoаa]_?',
            '[дdg]_?[уyu]_?[рpr]_?[оoаa]_?',
            '[хxh]_?[уyu]_?[дdg]_?[оoаa]_?',
            
            '[мm]_?[уuy]_?[дd]_?[оoaа]_?',
            #Из пяти символов
            '[мm]_?[нnh]_?[оo]_?[гg]_?[оoаa]_?',
            '[мm]_?[оo]_?[рpr]_?[дdg]_?[оoаa]_?',
            '[мm]_?[оo]_?[зz]_?[гg]_?[оoаa]_?',
            '[дdg]_?[оoаa]_?[лl]_?[бb]_?[оoаa]_?',
            '[оo]_?[сcs]_?[тtm]_?[рpr]_?[оoаa]_?'
            ]
        
        self.badwords = [
            '(?<=\PL)%RE_PRETEXT%?[-]?[hхx]_?[уyu]_?[ийiеeёяюjuоo](?<!_hue(?=_)|_hue(?=so_)|_хуе(?=дин)|_hyu(?=ndai_))', #Хуй
            '(?<=\PL)[хxh]_?[уyu]_?[лl1]_?[иuiyеeь\']_?',#хули
            '(?<=\PL)[пp]_?[оo]_?[хxh]_',
            '(?<=\PL)[нn]_?[аa]_?[хxh]_',
            '(?<=\PL)[пp]_?[нnh]_?[хxh]_',
            
            '(?<=\PL)%RE_PRETEXT%?[-]?[пpрn]_?[иuyiы]_?[зzсcs]_?[дdgж]_?(?:[_]?[:vowel:])', #Пизда
            
            '(?<=\PL)%RE_PRETEXT%?[-]?[бbмm]_?[лl]_?(я|а|a|ya|е|e|э|еа|ea|eа|еa|r)_?(?:_|_?[тдtd])(?<!_б_лет)', #Бля
            
            '(?<=\PL)%RE_PRETEXT%?[-]?(е|e|ё|yo|ye|э)_?(?<!н[eе][её]_|т_е_)[бb6п]_?(?=[уyиuiаa]_|[ыиiоoaаеeёуy][_]?[тtсscлlвvнnрrpкц](?<!_ebo[kt](?=[_])|_буд[уе])(?!ьше|ял_|ятно|еп)|[лl](?:([оoаaыиuyуiяr]|ya))|[нnh][_]?[уyuи]|[кk][_]?[аa]|[сc][_]?[тt]|[тt]_?[аaеeиuiy])', #Ебать
            
            '(?<=\PL)%RE_PRETEXT%?[-]?(?<!с_|т_)[eеёэ]_?[бb6пp](?=_)', #ёб
            
            '(?<=\PL)[пpn]_?[иuyуieе]_?[дdg]_?[eеaаoо]_?[rpр](?=_?[:vowel:]|_)',#Пидор
            '(?<=\PL)[пpn]_?[иuyуieе]_?[дdg]_?[rpр](?=_)',#Пидор
            '(?<=\PL)[пpn]_?[иuyуieе]_?[тt]_?[aаoо]_?[rpр](?=_?[:vowel:]|_)',#Пидор
            '(?<=\PL)[пpn]_?[еe]_?[дdg]_?[иuiy]_?[кk](?=_?[:vowel:]|_)',#Педик
            
            '(?<=\PL)[мm]_?[уyuи]_?[дdg]_?[аaеe](?<!_myda(?=s_))',#Мудак
            
            '(?<=\PL)[zж]_?h?_?[оo]_?[pпn]_?[:vowel:]',#Жопа
            
            '(?<=\PL)[мmn]_?[аa]_?[нnh]_?[дdg]_?[:vowel:](?<!манда(?=рин)|manda(?=rin))',#Манда
        
            '(?<=\PL)%RE_PRETEXT%?[-]?[гg]_?[оoаa@]_?[вvwb]_?[нnh]_?[:vowel:]',#Говно
            
            '(?<=\PL)f_?u_?[cс]_?k(?=_)',#Fuck
            
            '(?<=\PL)%RE_PRETEXT%?[-]?л_?[оo]_?[хxh](?=_)',#Лох
            
            '(?<=\PL)[^р]?_?[scс]_?[уyuю]_?[kк]_?[:vowel:]',#Сука
            '(?<=\PL)[^р]?_?[scс]_?[уyuю]_?(ch|ч)_?[кk]_?[:vowel:]',
            
            '(?<=\PL)[зz]_?[аa]_?[лl]_?[уyu]_?[пpр]_?[:vowel:]',#Залупа
            '(?<=\PL)[зz]_?[аa]_?[лl]_?[уyuи]_?[пpр]_?[кk]_?[:vowel:]',#залупка
            
            '(?<=\PL)%RE_PRETEXT%?[хxh]_?[еe]_?[рpr](?:_?[нnh]_?[:vowel:]|[:vowel:][:consonant:][ь]?|_)(?<!хер(?=[оа]сим[:vowel:]))',#Хер
            
            '(?<=\PL)(ч|ch)_?[лl]_?[ееё]_?[нnh](?=[:vowel:]_|[:vowel:][:consonant:]_|_)',#член
            '(?<=\PL)%RE_PRETEXT%?[вvbw]_?[аaоo]_?[гgr]_?[иuiy]_?[нnh]_?(?:[:vowel:])',#вагина
            '(?<=\PL)(ч|ch)_?[мm]_?(?:[:vowel:])(?=_)',#чмо
            '(?<=\PL)(ш|sh|sch)_?[лl]_?[юуuy]_?[хxh]_?(?:[:vowel:]_?)',#шлюха
            '(?<=\PL)(ш|sh|sch)_?[лl]_?[юуuy]_?(ш|sh|sch)_?',#шлюшка
            '(?<=\PL)(?<!с)[пnp]_?(?!ice)[иyi]_?[сcs]_?(?!ать|ал|ала|али|ало)(?:([ь]_?[:consonant:]_?[:vowel:])|([:vowel:]))',#Пися/писька
            '(?<=\PL)(п|p|n)_?(з|z|s)_?(д|d)_?(ц|ts|s|tc)(?=_)',#пздц
            
            '(?<=\PL)[кkc]_?[уuy]_?[рrp]_?[вbw6]_?(?=[:vowel:]_)',#курва
            '(?<=\PL)[дd]_?[еe]_?[рrp]_?[ьb\']?_?[мm]_?(?=[:vowel:])',#дерьмо
            '(?<=\PL)[аоao]_?[нn]_?[аa]_?[лl]_?(?=[:vowel:]([:consonant:]_|_)|_)',#анал
            ]
        
        self.trans = {
            '_' : '\x20',                                 #Пробел
            '\pL' : '[^\x20\d]',                         #Буква
            '\PL' : '[\x20\d]',                          #Не буква    
            '[:vowel:]' : '[аеиоуыэюяёaeioyur]',         #Гласные
            '[:consonant:]' : '[^аеиоуыэюяёaeioyu\x20\d]' #Согласные
            }
    
        self.re_badwords = re.sub(r'%RE_PRETEXT%', '(?:' + '|'.join(self.prefixes) + ')', '|'.join(self.badwords))
        
        self.re_badwords = strtr(self.re_badwords, self.trans)
        
    def checkUrl(self):
        self.ifUrl = re.search(r'http(s)?:\/\/(www\.)?[A-Za-z]{3,}\.[A-Za-z]{,6}\/[A-Za-z]{3,}', self.message.content)
        if not self.result == None and not self.ifUrl == None and self.result.start() > self.ifUrl.start() and self.result.start() <= self.ifUrl.end():
            return True
        return False
    
    #https://regex101.com/r/lKnFhB/1
       
    def run(self):        
        self.string = self.message.content
        
        self.string = ' '.join(re.findall(r'[\S][^A-ZА-ЯЁ]{1,}|[\S]', self.string))
        
        self.string = ' ' + self.string.lower() + ' '
        
        self.trans = {
            '4' : 'ч',
            '3' : 'з',
            '0' : 'о',
            '6' : 'б',
            '@' : 'а',
            '$' : 'с',
            '1' : 'и',
            '∃':'е','∄':'е','∅':'о','∈':'е','∉':'е','∊':'е','∋':'э','∌':'э','∍':'э','∏':'п','∑':'е',
            'Ⓐ':'a','Ⓑ':'b','Ⓒ':'c','Ⓓ':'d','Ⓔ':'e','Ⓕ':'f','Ⓖ':'g','Ⓗ':'h','Ⓘ':'i','Ⓙ':'j','Ⓚ':'k','Ⓛ':'l','Ⓜ':'m','Ⓝ':'n','Ⓞ':'o','Ⓟ':'p','Ⓠ':'q','Ⓡ':'r','Ⓢ':'s','Ⓣ':'t','Ⓤ':'u','Ⓥ':'v','Ⓦ':'w','Ⓧ':'x','Ⓨ':'y','Ⓩ':'z',
            'ⓐ':'a','ⓑ':'b','ⓒ':'c','ⓓ':'d','ⓔ':'e','ⓕ':'f','ⓖ':'g','ⓗ':'h','ⓘ':'i','ⓙ':'j','ⓚ':'k','ⓛ':'l','ⓜ':'m','ⓝ':'n','ⓞ':'o','ⓟ':'p','ⓠ':'q','ⓡ':'r','ⓢ':'s','ⓣ':'t','ⓤ':'u','ⓥ':'v','ⓦ':'w','ⓧ':'x','ⓨ':'y','ⓩ':'z',
            '₣' : 'f',
            '¢' : 'c',
            '฿' : 'b',
            '©' : 'c',
            '®' : 'р',
            '!' : 'и',
            'Ꭿ':'a','凡':'a','Ꮨ':'a','∀':'a','₳':'a','Ǻ':'a','ǻ':'a','α':'a','ά':'a','Ά':'a','ẫ':'a','Ắ':'a','ắ':'a','Ằ':'a','ằ':'a','ẳ':'a','Ẵ':'a','ẵ':'a','Ä':'a','ª':'a','ä':'a','Å':'a','À':'a','Á':'a','Â':'a','å':'a','ã':'a','â':'a','à':'a','á':'a','Ã':'a','ᗩ':'a','ᵰ':'a',
            'ℬ' : 'б','Ᏸ' : 'б','β' : 'б','฿' : 'б','ß' : 'б','Ђ' : 'б','ᗷ' : 'б','ᗸ' : 'б','ᗹ' : 'б','ᗽ' : 'б','ᗾ' : 'б','ᗿ' : 'б','Ɓ' : 'б','ƀ' : 'б','ხ' : 'б','方' : 'б','␢' : 'б','Ꮄ' : 'б',
            '☾' : 'c','ℭ' : 'c','ℂ' : 'c','Ç' : 'c','¢' : 'c','ç' : 'c','Č' : 'c','ċ' : 'c','Ċ' : 'c','ĉ' : 'c','ς' : 'c','Ĉ' : 'c','ć' : 'c','Ć' : 'c','č' : 'c','Ḉ' : 'c','ḉ' : 'c','⊂' : 'c','Ꮸ' : 'c','₡' : 'c','¢' : 'c',
            'ᗫ' : 'д','Ɗ' : 'д','Ď' : 'д','ď' : 'д','Đ' : 'д','đ' : 'д','ð' : 'д','∂' : 'д','₫' : 'д','ȡ' : 'д',
            'ℯ' : 'е','ໂ' : 'е','६' : 'е','£' : 'е','Ē' : 'е','℮' : 'е','ē' : 'е','Ė' : 'е','ė' : 'е','Ę' : 'е','ě' : 'е','Ě' : 'е','ę' : 'е','Έ' : 'е','ê' : 'е','ξ' : 'е','Ê' : 'е','È' : 'е','€' : 'е','É' : 'е','∑' : 'е','Ế' : 'е','Ề' : 'е','Ể' : 'е','Ễ' : 'е','é' : 'е','è' : 'е','ع' : 'е','Є' : 'е','є' : 'е','έ' : 'е','ε' : 'е',
            'ℱ' : 'ф','₣' : 'ф','ƒ' : 'ф','∮' : 'ф','Ḟ' : 'ф','ḟ' : 'ф','ჶ' : 'ф','ᶂ' : 'ф','φ' : 'ф',
            'Ꮹ' : 'г','Ꮆ' : 'г','ℊ' : 'г','Ǥ' : 'г','ǥ' : 'г','Ĝ' : 'г','ĝ' : 'г','Ğ' : 'г','ğ' : 'г','Ġ' : 'г','ġ' : 'г','Ģ' : 'г','ģ' : 'г','פ' : 'г','ᶃ' : 'г','₲' : 'г',
            'ℍ' : 'х','ℋ' : 'х','ℎ' : 'х','ℌ' : 'х','ℏ' : 'х','ዙ' : 'х','Ꮵ' : 'х','Ĥ' : 'х','Ħ' : 'х','ħ' : 'х','Ή' : 'х','♅' : 'х','廾' : 'х','Ћ' : 'х','ђ' : 'х','Ḩ' : 'х','Һ' : 'х','ḩ' : 'х','♄' : 'х',
            'ℐ' : 'и','ℑ' : 'и','ί' : 'и','ι' : 'и','Ï' : 'и','Ί' : 'и','Î' : 'и','ì' : 'и','Ì' : 'и','í' : 'и','Í' : 'и','î' : 'и','ϊ' : 'и','ΐ' : 'и','Ĩ' : 'и','ĩ' : 'и','Ī' : 'и','ī' : 'и','Ĭ' : 'и','ĭ' : 'и','İ' : 'и','į' : 'и','Į' : 'и','Ꭵ' : 'и',
            'ჟ' : 'ж','Ĵ' : 'ж','ĵ' : 'ж','ᶖ' : 'ж','ɉ' : 'ж',
            '₭' : 'к','Ꮶ' : 'к','Ќ' : 'к','k' : 'к','ќ' : 'к','ķ' : 'к','Ķ' : 'к','Ҝ' : 'к','ҝ' : 'к','ﻸ' : 'к','ᶄ' : 'к',
            'ℒ' : 'л','ℓ' : 'л','Ŀ' : 'л','ŀ' : 'л','£' : 'л','Ĺ' : 'л','ĺ' : 'л','Ļ' : 'л','ļ' : 'л','λ' : 'л','₤' : 'л','Ł' : 'л','ł' : 'л','ľ' : 'л','Ľ' : 'л','Ḽ' : 'л','ḽ' : 'л','ȴ' : 'л','Ꮭ' : 'л','￡' : 'л','Ꮑ' : 'л',
            'ℳ' : 'м','ʍ' : 'м','ᶆ' : 'м','Ḿ' : 'м','ḿ' : 'м','♍' : 'м','ᗰ' : 'м','ᙢ' : 'м','爪' : 'м','♏' : 'м','₥' : 'м',
            'ℕ' : 'н','η' : 'н','ñ' : 'н','ח' : 'н','Ñ' : 'н','ή' : 'н','ŋ' : 'н','Ŋ' : 'н','Ń' : 'н','ń' : 'н','Ņ' : 'н','ņ' : 'н','Ň' : 'н','ň' : 'н','ŉ' : 'н','ȵ' : 'н','ℵ' : 'н','₦' : 'н',
            'ℴ' : 'о','ტ' : 'о','٥' : 'о','Ό' : 'о','ó' : 'о','ό' : 'о','σ' : 'о','ǿ' : 'о','Ǿ' : 'о','Θ' : 'о','ò' : 'о','Ó' : 'о','Ò' : 'о','Ô' : 'о','ô' : 'о','Ö' : 'о','ö' : 'о','Õ' : 'о','õ' : 'о','ờ' : 'о','ớ' : 'о','ọ' : 'о','Ọ' : 'о','ợ' : 'о','Ợ' : 'о','ø' : 'о','Ø' : 'о','Ό' : 'о','Ở' : 'о','Ờ' : 'о','Ớ' : 'о','Ổ' : 'о','ổ' : 'о','Ợ' : 'о','Ō' : 'о','ō' : 'о',
            'ℙ' : 'п','℘' : 'п','þ' : 'п','Þ' : 'п','ρ' : 'п','Ꭾ' : 'п','Ꮅ' : 'п','尸' : 'п','Ҏ' : 'п','ҏ' : 'п','ᶈ' : 'п','₱' : 'п','☧' : 'п','ᖘ' : 'п','ק' : 'п','ァ' : 'п',
            'ℚ' : 'к','q' : 'к','Q' : 'к','ᶐ' : 'к','Ǭ' : 'к','ǭ' : 'к','ჹ' : 'к',
            'ℝ' : 'р','ℜ' : 'р','ℛ' : 'р','℟' : 'р','ჩ' : 'р','ᖇ' : 'р','ř' : 'р','Ř' : 'р','ŗ' : 'р','Ŗ' : 'р','ŕ' : 'р','Ŕ' : 'р','ᶉ' : 'р','Ꮢ' : 'р','尺' : 'р',
            'Ꮥ' : 'с','Ṧ' : 'с','ṧ' : 'с','ȿ' : 'с','ى' : 'с','§' : 'с','Ś' : 'с','ś' : 'с','š' : 'с','Š' : 'с','ş' : 'с','Ş' : 'с','ŝ' : 'с','Ŝ' : 'с','₰' : 'с','∫' : 'с','$' : 'с','ֆ' : 'с',
            '₸' : 'т','†' : 'т','T' : 'т','t' : 'т','τ' : 'т','ΐ' : 'т','Ţ' : 'т','ţ' : 'т','Ť' : 'т','ť' : 'т','ŧ' : 'т','Ŧ' : 'т','ィ' : 'т','干' : 'т','Ṫ' : 'т','ṫ' : 'т','ナ' : 'т','Ꮏ' : 'т','Ꮖ' : 'т','テ' : 'т','₮' : 'т',
            '∪' : 'у','ᙀ' : 'у','Ũ' : 'у','⋒' : 'у','Ủ' : 'у','Ừ' : 'у','Ử' : 'у','Ữ' : 'у','Ự' : 'у','ύ' : 'у','ϋ' : 'у','Ù' : 'у','ú' : 'у','Ú' : 'у','ΰ' : 'у','ù' : 'у','Û' : 'у','û' : 'у','Ü' : 'у','ử' : 'у','ữ' : 'у','ự' : 'у','Џ' : 'у','ü' : 'у','ừ' : 'у','Ũ' : 'у','ũ' : 'у','Ū' : 'у','ū' : 'у','Ŭ' : 'у','ŭ' : 'у','ų' : 'у','Ų' : 'у','ű' : 'у','Ű' : 'у','ů' : 'у','Ů' : 'у',
            '✔' : 'в','✓' : 'в','∨' : 'в','√' : 'в','Ꮙ' : 'в','Ṽ' : 'в','ṽ' : 'в','ᶌ' : 'в','\/' : 'в','℣' : 'в','ʋ' : 'в','₩' : 'в','ẃ' : 'в','Ẃ' : 'в','ẁ' : 'в','Ẁ' : 'в','ẅ' : 'в','ώ' : 'в','ω' : 'в','ŵ' : 'в','Ŵ' : 'в','Ꮤ' : 'в','Ꮃ' : 'в','ฬ' : 'в','ᗯ' : 'в','ᙡ' : 'в','Ẅ' : 'в','ѡ' : 'в','ಎ' : 'в','ಭ' : 'в','Ꮚ' : 'в','Ꮗ' : 'в','ผ' : 'в','ฝ' : 'в','พ' : 'в','ฟ' : 'в',
            'χ' : 'х','×' : 'х','✗' : 'х','✘' : 'х','᙭' : 'х','ჯ' : 'х','Ẍ' : 'х','ẍ' : 'х','ᶍ' : 'х','⏆' : 'х',
            'ɣ' : 'у','Ꭹ' : 'у','Ꮍ' : 'у','Ẏ' : 'у','ẏ' : 'у','ϒ' : 'у','ɤ' : 'у','￥' : 'у','り' : 'у',
            'ℤ' : 'з','ℨ' : 'з','ჳ' : 'з','乙' : 'з','Ẑ' : 'з','ẑ' : 'з','ɀ' : 'з','Ꮓ' : 'з'
        }
        
        self.string = strtr(self.string, self.trans)
        
        self.string = re.sub(r'[\.\,\[\]\(\)\{\}\\\/\?\<\>\"\'\|\=\+\-\*\&\^\%\#\№\:\`\’]', ' ', self.string)
        
        self.string = re.sub(r'([\s\S])(?=\1)', '', self.string)
        
        self.string = re.sub(r'ё', 'е', self.string)
        
        #Поиск собственно матов
        self.result = re.search(self.re_badwords, self.string)
        if not self.result == None:
            if not self.checkUrl():
                util.logger(str(self.result), True, True)
                return True
            return False
        else:
            return False
        
        
        
    
#Из одной буквы #Из двух букв #Из трёх букв #Из четырёх букв #Из пяти символов #Хуй #хули #Пизда #Бля #Ебать #ёб #Пидор #Пидор #Пидор #Педик #Мудак #Жопа #Манда #Говно #Fuck #Лох #Сука #Залупа #залупка #Хер #член #вагина #чмо #шлюха #шлюшка #Пися/писька #пздц #курва #дерьмо #анал #Пробел #Буква #Не буква #Гласные #Согласные #https://regex101.com/r/lKnFhB/1 #\№\:\`\’]', ' ', self.string) #Поиск собственно матов