Удаление матов в который есть знаки (ТЕ?СТ)

Рейтинг: -3Ответов: 1Опубликовано: 13.03.2023

Нужно, чтоб бот блокал маты, в который есть символы. Код:

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())

ban_words = ['тест']

def simplify_word(word):
    last_letter = ''
    result = ''
    for letter in word:
        if letter != last_letter:
            last_letter = letter
            result += letter
    
    return result

@bot.event
async def on_message(message):
    if message.author.bot:
        return

    msg_words = [simplify_word(word).lower() for word in message.content.lower().split()]
    # для каждого слова првоеряем, содержится ли оно в запрещенном списке
    for word in msg_words:
        if word in ban_words:
            try:
                await message.delete()
            except:
                print('Ошибка при удалении сообщения')
            await message.channel.send(f'{message.author.mention} **написал запрещенное слово:** *{word}*')
            return
        

bot.run('утютютют а вот так ни нада дядя')

Проще говоря чтобы он удалял символ и проверял слово. Например: те!ст. Нужно убрать знак ! и проверить слово. У меня сейчас работает проверка на маты если они с заглавной буквы. Например ТтТеСТ. Сдесь он все переводит в нижний регистр (simplify_word(word).lower() for word in message.content.lower().split()) потом убирает похожие буквы (тттест - тест) и проверяет есть ли такое слово.

Ответы

▲ 1

Как вариант, снабдить регуляркой:

import re

message_filtered = re.sub(r'\W+', '', message_not_filtered)

Регулярка нацелена на то, чтобы удалить из message_not_filtered все символы, не являющиеся буквами и цифрами.