Как сделать фильтр мата для телеграмм-бота на Python?
помогите пожалуйста сделать фильтр мата для моего телеграмм-бота.
суть в том, чтобы сделать так, чтобы:
если пользователь введёт в чат с телеграмм-ботом мат, который присутствует в списке (список в свою очередь находится в файле «config.py»), то телеграм бот удалит это сообщение.
TOKEN = "12345" MAT = ['мат', 'матерок', 'ещё мат', 'мааат']
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import config import logging from aiogram import Bot, Dispatcher, executor, types logging.basicConfig(level=logging.INFO) bot = Bot(token=config.TOKEN) dp = Dispatcher(bot) @dp.message_handler() #async def echo(message: types.Message): # await message.answer(message.text) async def filter_messeges(message: types.Message): # if "мат" in message.text: if config.MAT in message.text: await message.delete() if __name__ == "__main__": executor.start_polling(dp, skip_updates=True)
Как сделать бота для зациклиных сообщений в телеграмм чате?
Здравствуйте! Помогите пожалуйста! Мне нужно зациклить отправку сообщений в чат телеграмм раз в.
Функция для телеграмм бота на python
Здравствуйте, делаю телеграм бота на python, библиотека telebot. Сейчас вкратце объясню его суть.
Как сделать кулдаун на использование команды телеграмм бота?
Мне нужно сделать так называемую перезарядку на использование команды телеграмм бота. Так как я.
Функции Телеграмм бота на python
Помогите пожалуйста, на одном из этапов требуется выполнить либо одну либо другую функцию. с первой.
any(word in message.text for word in config.MAT)
AlekseyPl, спасибо, но можете пожалуйста вставить это в код.
Я просто не знаю в какое место кода это вставлять.
iSmoke,
Дак я его так и учу.
Это же практика.
Добавлено через 3 часа 1 минуту
не работает(
Создание телеграмм бота на python с использованием telegrambotapi
import telebot from telebot import types import COVID19Py covid19 = COVID19Py.COVID19() bot =.
Как заставить телеграмм бота отправлять некоторое количество моих аккаунтов на чужой, для просмотров и т.д
Подскажите, решил сделать бота, он должен мои аккаунты, скажем 10 штук заставить зайти на аккаунт к.
Как сделать приём\отказ заявки регистрации в боте телеграмм на Python ?
Есть один вопрос как можно сделать регистрацию пользователей в боте тип пользователь заходит.
Кнопки для телеграмм бота
Здравствуйте, помогите мне сделать кнопки для телеграмм бота под клавиатурой using System; using.
Веб хуки для Телеграмм бота
Здравствуйте все. Написал телеграмм бота, по long polling все работает, но решил подключить webhook.
Создание кнопок для телеграмм бота
Добрый день. Помогите пожалуйста. Пишу бота, хочу добавить 2 кнопки на ответ, сделала по примеру.
Математическая модель для телеграмм — бота регистратуры
Народ, всем привет! Столкнулся с огромной (для меня) проблемой — написание двух математических.
Фильтр нецензурной лексики за 5 минут
Для одного из моих проектов мне понадобилось сделать фильтр мата. Сегодня мы попытаемся сделать его за несколько минут. Ну что же, приступим.
Анализирование
Сперва я должен бы как-то разбивать текст на части, чтобы потом сравнивать его с нецензурной лексикой. Решение нашлось очень просто. Я составил список запрещенных слов и стал проходится циклом по введенному тексту, разбивая его на куски размером с каждое запрещенное слово.
#Фраза, которую будем проверять. phrase = input("Введите фразу для проверки: ") #Искомое слово. Пока что только одно. words = ["банан"] #Фрагменты, которые получатся после разбиения слова. fragments = [] #Проходимся по всем словам. for word in words: #Разбиваем слово на части, и проходимся по ним. for part in range(len(phrase)): #Вот сам наш фрагмент. fragment = phrase[part: part+len(word)] #Сохраняем его в наш список. fragments.append(fragment) #Выводим получившиеся фрагменты. print(fragments)
Запускаем наш файл и вводим фразу.
Введите фразу для проверки: Привет, я банан. ['Приве', 'ривет', 'ивет,', 'вет, ', 'ет, я', 'т, я ', ', я б', ' я ба', 'я бан', ' бана', 'банан', 'анан.', 'нан.', 'ан.', 'н.', '.']
Вот что у нас получилось. Смотрим на все фрагменты и видим среди них искомое слово «банан». Теперь нам осталось сравнить эти фрагменты с искомыми словами.
Сравнение
Для того, чтобы сравнивать фрагменты с искомыми словами, я решил просто использовать цикл.
#Проходимся по всем словам. for word in words: #Проходимся по всем фрагментам. for fragment in fragments: #Сравниваем фрагмент и искомое слово if word == fragment: #Если они равны, выводим надпись о их нахождении. print("Найдено", word)
Введите фразу для проверки: Привет, я банан. ['Приве', 'ривет', 'ивет,', 'вет, ', 'ет, я', 'т, я ', ', я б', ' я ба', 'я бан', ' бана', 'банан', 'анан.', 'нан.', 'ан.', 'н.', '.'] Найдено банан
Все, простейший фильтр нецензурной лексики готов!
Доработки
Простейший фильтр был готов, но я решил его чуточку дополнить.
Так как русский человек очень изобретателен, то он может поменять некоторые буквы на другой язык. Например, «бaнaн». Здесь место обычной «а», я поставил английскую. И теперь наш фильтр не будет распознавать это слово.
Введите фразу для проверки: Привет, я бaнaн. ['Приве', 'ривет', 'ивет,', 'вет, ', 'ет, я', 'т, я ', ', я б', ' я бa', 'я бaн', ' бaнa', 'бaнaн', 'aнaн.', 'нaн.', 'aн.', 'н.', '.']
Фильтр не вывел ничего, а значит не нашел слово. Поэтому мы должны создать дополнительный фильтр, который будет переводить буквы английского алфавита и похожие символы в русский текст.
В интернете я нашел вот такой список, который чуточку доработал.
Перед фильтрацией мы должны перевести весь текст в нижний регистр и убрать все пробелы, так как кто-нибудь может ввести искомые слова вот так: «БАНАН» или «б а н а н».
phrase = phrase.lower().replace(" ", "")
Теперь мы должны как-то сравнить этот список с нашим текстом. Для этого я создал вот такую функцию.
#Проходимся по нашему словарю. for key, value in d.items(): #Проходимся по каждой букве в значении словаря. То есть по вот этим спискам ['а', 'a', '@']. for letter in value: #Проходимся по каждой букве в нашей фразе. for phr in phrase: #Если буква совпадает с буквой в нашем списке. if letter == phr: #Заменяем эту букву на ключ словаря. phrase = phrase.replace(phr, key)
Что у нас получилось теперь.
Введите фразу для проверки: Привет, я б@н@н. ['Приве', 'ривет', 'ивет,', 'вет, ', 'ет, я', 'т, я ', ', я б', ' я ба', 'я бан', ' бана', 'банан', 'анан.', 'нан.', 'ан.', 'н.', '.'] Найдено банан
То, что у нас не находилось раньше теперь легко распознаётся.
Расстояние Левенштейна
Я понял, что если хоть чуточку изменить слово, то его уже невозможно найти.
Введите фразу для проверки: Я люблю бонан. ['Я люб', ' любл', 'люблю', 'юблю ', 'блю б', 'лю бо', 'ю бон', ' бона', 'бонан', 'онан.', 'нан.', 'ан.', 'н.', '.']
Наши опасения подтвердились, но решения этой проблемы есть расстояние Левенштейна.
В интернете я нашел функцию этого алгоритма для python. Вот как она выглядит.
def distance(a, b): "Calculates the Levenshtein distance between a and b." n, m = len(a), len(b) if n > m: # Make sure n
Теперь мы должны переписать функцию сравнения.
#Проходимся по всем словам. for word in words: #Проходимся по всем фрагментам. for fragment in fragments: #Если отличие этого фрагмента меньше или равно 25% этого слова, то считаем, что они равны. if distance(fragment, word)
Что у нас получилось теперь.
Введите фразу для проверки: Я люблю бонан. ['Я люб', ' любл', 'люблю', 'юблю ', 'блю б', 'лю бо', 'ю бон', ' бона', 'бонан', 'онан.', 'нан.', 'ан.', 'н.', '.'] Найдено банан
Небольшие проблемы
Наверное вы уже догадались, что если в списке для фильтрации будет больше одного слова, то он будет некорректно работать. Поэтому я переписал это всё в один цикл.
#Проходимся по всем словам. for word in words: #Разбиваем слово на части, и проходимся по ним. for part in range(len(phrase)): #Вот сам наш фрагмент. fragment = phrase[part: part+len(word)] #Если отличие этого фрагмента меньше или равно 25% этого слова, то считаем, что они равны. if distance(fragment, word)
Все, наш фильтр полностью готов.
Код фильтра
import string words = ["банан", "помидор"] print("Фильтруемые слова:", words) #Фраза, которую будем проверять. phrase = input("Введите фразу для проверки: ").lower().replace(" ", "") def distance(a, b): "Calculates the Levenshtein distance between a and b." n, m = len(a), len(b) if n > m: # Make sure n for key, value in d.items(): #Проходимся по каждой букве в значении словаря. То есть по вот этим спискам ['а', 'a', '@']. for letter in value: #Проходимся по каждой букве в нашей фразе. for phr in phrase: #Если буква совпадает с буквой в нашем списке. if letter == phr: #Заменяем эту букву на ключ словаря. phrase = phrase.replace(phr, key) #Проходимся по всем словам. for word in words: #Разбиваем слово на части, и проходимся по ним. for part in range(len(phrase)): #Вот сам наш фрагмент. fragment = phrase[part: part+len(word)] #Если отличие этого фрагмента меньше или равно 25% этого слова, то считаем, что они равны. if distance(fragment, word)
Как сделать фильтр мата для телеграмм-бота на Python?
помогите пожалуйста сделать фильтр мата для моего телеграмм-бота.
суть в том, чтобы сделать так, чтобы:
если пользователь введёт в чат с телеграмм-ботом мат, который присутствует в списке (список в свою очередь находится в файле "config.py"), то телеграм бот удалит это сообщение.
TOKEN = "12345" MAT = ['мат', 'матерок', 'ещё мат', 'мааат']
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import config import logging from aiogram import Bot, Dispatcher, executor, types logging.basicConfig(level=logging.INFO) bot = Bot(token=config.TOKEN) dp = Dispatcher(bot) @dp.message_handler() #async def echo(message: types.Message): # await message.answer(message.text) async def filter_messeges(message: types.Message): # if "мат" in message.text: if config.MAT in message.text: await message.delete() if __name__ == "__main__": executor.start_polling(dp, skip_updates=True)
Как сделать бота для зациклиных сообщений в телеграмм чате?
Здравствуйте! Помогите пожалуйста! Мне нужно зациклить отправку сообщений в чат телеграмм раз в.
Функция для телеграмм бота на python
Здравствуйте, делаю телеграм бота на python, библиотека telebot. Сейчас вкратце объясню его суть.
Как сделать кулдаун на использование команды телеграмм бота?
Мне нужно сделать так называемую перезарядку на использование команды телеграмм бота. Так как я.
Функции Телеграмм бота на python
Помогите пожалуйста, на одном из этапов требуется выполнить либо одну либо другую функцию. с первой.
any(word in message.text for word in config.MAT)
AlekseyPl, спасибо, но можете пожалуйста вставить это в код.
Я просто не знаю в какое место кода это вставлять.
iSmoke,
Дак я его так и учу.
Это же практика.
Добавлено через 3 часа 1 минуту
не работает(
Создание телеграмм бота на python с использованием telegrambotapi
import telebot from telebot import types import COVID19Py covid19 = COVID19Py.COVID19() bot =.
Как заставить телеграмм бота отправлять некоторое количество моих аккаунтов на чужой, для просмотров и т.д
Подскажите, решил сделать бота, он должен мои аккаунты, скажем 10 штук заставить зайти на аккаунт к.
Как сделать приём\отказ заявки регистрации в боте телеграмм на Python ?
Есть один вопрос как можно сделать регистрацию пользователей в боте тип пользователь заходит.
Кнопки для телеграмм бота
Здравствуйте, помогите мне сделать кнопки для телеграмм бота под клавиатурой using System; using.
Веб хуки для Телеграмм бота
Здравствуйте все. Написал телеграмм бота, по long polling все работает, но решил подключить webhook.
Создание кнопок для телеграмм бота
Добрый день. Помогите пожалуйста. Пишу бота, хочу добавить 2 кнопки на ответ, сделала по примеру.
Математическая модель для телеграмм - бота регистратуры
Народ, всем привет! Столкнулся с огромной (для меня) проблемой - написание двух математических.