Merge pull request #15 from kotolex/master

FIX: check for emoji
This commit is contained in:
Rykov7
2024-12-21 13:29:50 +03:00
committed by GitHub
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
+13 -1
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())