FIX: check for emoji

This commit is contained in:
kotolex
2024-12-21 11:55:17 +05:00
parent 83e3dd4a40
commit 6afe8161cd
2 changed files with 17 additions and 4 deletions
+1
View File
@@ -3,3 +3,4 @@ python-dotenv
pyTelegramBotAPI pyTelegramBotAPI
schedule schedule
SQLAlchemy SQLAlchemy
emoji
+15 -3
View File
@@ -3,6 +3,7 @@ from urllib import parse
from urllib.error import URLError from urllib.error import URLError
from urllib.request import urlopen from urllib.request import urlopen
from emoji import is_emoji
from telebot import types from telebot import types
from .constants import ( from .constants import (
@@ -34,11 +35,22 @@ def is_url_reachable(url: str) -> bool:
return False return False
def is_too_much_emojis(text: str) -> bool:
"""
Проверяет, что первые 15 символов текста содержат много (5) эмодзи, или текст длиннее 8 символов и половина - это
эмодзи
"""
if len(text) < 8:
return False
limit = 5 if len(text) > 15 else len(text) // 2
return len([1 for e in text[:15] if is_emoji(e)]) >= limit
def is_spam(message_text: str) -> bool: def is_spam(message_text: str) -> bool:
""" """
Проверяет текст на спам - сначала проверка смешанного алфавита, потом на константный набор спам-слов Проверяет текст на спам - сначала проверка смешанного алфавита, потом на константный набор спам-слов
""" """
if is_mixed(message_text): if is_mixed(message_text) or is_too_much_emojis(message_text):
return True return True
return any(bad_word.word.casefold() in message_text.casefold() for bad_word in session.query(BadWord).all()) return any(bad_word.word.casefold() in message_text.casefold() for bad_word in session.query(BadWord).all())
@@ -136,8 +148,8 @@ def detect_args(message: types.Message):
# Есть цитата, есть аргументы: ищем текст из аргументов. # Есть цитата, есть аргументы: ищем текст из аргументов.
return " ".join(message.text.split()[1:]) return " ".join(message.text.split()[1:])
elif len(message.text.split()) > 1: elif len(message.text.split()) > 1:
# Нет цитаты, есть аргументы: ищем текст из аргументов. # Нет цитаты, есть аргументы: ищем текст из аргументов.
return " ".join(message.text.split()[1:]) return " ".join(message.text.split()[1:])
def fetch_rule(index: int) -> str: def fetch_rule(index: int) -> str: