Форум сайта python.su
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png) 
			 
							 0
  0   
								
								Здравствуйте всем. Я совсем новичок в Python (буквально 3й день пишу код). У меня задача написать Антиспам бота Телеграм на базе python-telegram-bot. На данный момент у меня проблема с тем, что пересланные сообщения из группы не удаляются (мне нужно сделать так, чтобы все пересланные сообщения из групп, ботов, чатов, были удалены) (переслано от). Также кнопки прикрепленные в телеграм с ссылками, также не удаляются. Помогите пожалуйста.
import logging
import re
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, CallbackContext
# ✅ Логирование
logging.basicConfig(format=“%(asctime)s - %(levelname)s - %(message)s”, level=logging.INFO)
logger = logging.getLogger(__name__)
# 🔹 Регулярное выражение для всех ссылок (HTTP, HTTPS, Telegram)
URL_PATTERN = re.compile(
    r“(https? /|www\.)\S+|”  # Обычные ссылки (https
/|www\.)\S+|”  # Обычные ссылки (https /, http
/, http /, www.)
/, www.)
    r“t\.me/\S+|”  # Ссылки Telegram
    r"@+|“  # Упоминания через @username
    r”+\.ru\b|+\.com\b|+\.net\b|+\.org\b“  # Доменные имена
    r”\b(?:+\+)\b"  # Защищенные домены типа glazcom……
)
# 🔹 Регулярка для запрета ссылок на ботов (t.me/ИмяБота)
BOT_LINK_PATTERN = re.compile(r"t\.me\/+bot“, re.IGNORECASE)
# 🔹 Регулярное выражение для фильтрации эмоджи (более 5 подряд)
EMOJI_PATTERN = re.compile(r”({5,})“)
# 🔹 СПАМ-ФРАЗЫ (регулярные выражения)
SPAM_PATTERNS = [
    r”нужны \d+ человека“, r”Срочно ищем людей на подработку“, r”срочно нужны люди на подработку“, r”Заработок \d+-\d+ рублей в день“, r”вoзьмy \d+ чeлoвекa в паpтнeры по бизнecy“,
    r”нужны \d+ человек“, r”СРОЧНО , нужны люди на вечернюю подработку“, r”Срочно ищем людей на подработку“, r”Оплата — \d+ рублей за смену“,
    r”\+ в лс“, r”Открыт набор людей, хороший доход“, r”за подробностями пишите в лс“, r”cмoжeт пoмoчь oдинoкoй дeвyшкe c пepeeздoм“,
    r”пиши в лс“, r”приглашаем на работу, подработку“,
    r”пишите в лс“,    
    r”пиши в личку“,  
    r”удалёнку с хорошим доходом“,  
    r”официальном тг казино“,  
    r”выиграл \d+к в казино“,
    r”Paбoтa для студeнтов и мaм в дeкpeте“,
    r”Гибкий гpaфик, дocтoйнaя oплатa“,
    r”ПОДРАБОТКА НА ПАРУ ЧАСОВ В ДЕНЬ“,
    r”ОТ \d+к в ДЕНЬ“,
    r”\d+$ в неделю“,
    r”\d+ \d+ - \d+ \d+ рублей, прямо с телефона“,
    r”\d+$ в день“,
    r”КАСАЕТСЯ ВСЕХ В ГРУППЕ"
]
# 🔹 Функция проверки сообщения
def check_message(message):
    # Проверяем на спам-фразы
    spam_match = 
    
    if spam_match:
        print(f“❌ СПАМ: {message} (Найдено: {spam_match})”)  # Печатаем на консоль
        return f“❌ СПАМ: {message} (Найдено: {spam_match})”
    
    # Проверяем на массовые эмоджи
    if EMOJI_PATTERN.search(message):
        print(f“❌ СПАМ (эмоджи): {message}”)
        return f“❌ СПАМ (эмоджи): {message}”
    # Проверяем на ссылки
    elif URL_PATTERN.search(message):
        print(f“❌ СПАМ (ссылка): {message}”)  # Печатаем на консоль
        return f“❌ СПАМ (ссылка): {message}”
    else:
        print(f“✅ Чисто: {message}”)  # Печатаем на консоль
        return f“✅ Чисто: {message}”
#————ТЕСТОВЫЕ СООБЩЕНИЯ для проверки———————————————–
# 🔹 Тестовые сообщения
test_messages = [
    “Нужны 5 человека на работу”,   # Должно быть спамом
    “Выиграл 200к в казино!”,       # Должно быть спамом
    “Заработок в сети, пиши в лс!”, # Должно быть спамом
    “Наш сайт www.scam.biz – проверенный!”, # Должно быть спамом (ссылка)
    “Привет, как дела?”,            # Должно быть чистым
    “t.me/official_group”,           # Должно быть спамом (ссылка)
    "Перейдите на сайт: https://example.com“  # Должно быть спамом (ссылка)
    ”это касается всех в группе“
]
# 🔹 Проверяем тестовые сообщения
print(”🔹 Проверка тестовых сообщений:\n“)
for msg in test_messages:
    print(check_message(msg))  # Проверка каждого сообщения
#————ТЕСТОВЫЕ СООБЩЕНИЯ для проверки———————————————–
#————ТЕСТОВЫЙ КОД 1 для проверки—————————————————
#————ТЕСТОВЫЙ КОД 1 для проверки—————————————————
# 🚀 Функция проверки на спам
def is_spam(message_text):
    text = message_text.lower()
    
    # Проверяем по ключевым словам (через регулярные выражения)
    if any(re.search(pattern, text) for pattern in SPAM_PATTERNS):
        return True
    # Проверяем наличие любых ссылок (HTTP, HTTPS, Telegram)
    if URL_PATTERN.search(text):
        return True
    # Проверяем наличие любых ссылок (HTTP, HTTPS, Telegram, боты)
    if URL_PATTERN.search(text) or BOT_LINK_PATTERN.search(text):
        return True
    if EMOJI_PATTERN.search(text):
        return True
    return False
# 🛠 Обработчик сообщений: удаляет спам
async def handle_message(update: Update, context: CallbackContext):
    message = update.message
    if not message:
        return
    # Проверяем на спам
    if message.text:
        result = check_message(message.text)  # Проверяем сообщение на спам
        if ”❌ СПАМ“ in result:  # Если нашли спам, удаляем
            await message.delete()  # ✅ Добавлен await
            logger.info(f”❌ Удалено спам-сообщение от {message.from_user.username}“)
    
    # Удаляем пересланные сообщения от ботов
    if message.forward_from and message.forward_from.is_bot:
        await message.delete()  # ✅ Добавлен await
        logger.info(f”❌ Удалено пересланное сообщение от бота ({message.from_user.username})“)
     # Удаляем сообщения от имени групп/каналов
    if message.sender_chat:
        await message.delete()
        logger.info(f”❌ Удалено сообщение от имени группы/канала ({message.sender_chat.title})“)
        return
#————ТЕСТОВЫЙ КОД 1 —————————————————————————————-
# Удаляем пересланные сообщения от пользователей, ботов, каналов, привязанных чатов
    if message.forward_from or message.forward_from_chat or message.is_automatic_forward:
        await message.delete()
        logger.info(f”❌ Удалено пересланные сообщения от пользователей, ботов, каналов, привязанных чатов ({message.from_user.username})")
        return
    # Удаляем пересланные сообщения из других групп или каналов
    if message.forward_from_chat and message.forward_from_chat.type in :
        await message.delete()  # ✅ Добавлен await
        logger.info(f“❌ Удалено пересланное сообщение из чужого чата ({message.from_user.username})”)
#————ТЕСТОВЫЙ КОД 1 —————————————————————————————-
# 🔹 Ответ на команду /start
async def start(update: Update, context: CallbackContext):
    await update.message.reply_text(“Привет! Я антиспам-бот. Я удаляю спам, ссылки и пересланные сообщения от ботов. 🚀”)
# 🔥 Основная функция (Запуск бота)
def main():
    TOKEN = “!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!”  # Вставьте свой токен
    application = Application.builder().token(TOKEN).build()
    application.add_handler(CommandHandler(“start”, start))
    application.add_handler(MessageHandler(filters.TEXT, handle_message))
    application.add_handler(MessageHandler(filters.FORWARDED, handle_message))
    application.run_polling()
if __name__ == ‘__main__’:
    main()
Отредактировано archer24 (Фев. 7, 2025 12:19:40)
Офлайн
 
							 0
  0   
								
								Код оптимизировал и убрал некоторые косяки, но ситуация с удалением ссылок на ботов, репостов с групп и каналов, так и не смог решить. Прикрепляю новый код.
import logging
import re
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, CallbackContext
# ✅ Логирование
logging.basicConfig(format=“%(asctime)s - %(levelname)s - %(message)s”, level=logging.INFO)
logger = logging.getLogger(__name__)
# 🔹 Регулярное выражение для всех ссылок (HTTP, HTTPS, Telegram)
URL_PATTERN = re.compile(
    r“(https? /|www\.)\S+|”  # Обычные ссылки (https
/|www\.)\S+|”  # Обычные ссылки (https /, http
/, http /, www.)
/, www.)
    r“t\.me/\S+|”  # Ссылки Telegram
    r"@+|“  # Упоминания через @username
    r”+\.ru\b|+\.com\b|+\.net\b|+\.org\b“  # Доменные имена
    r”\b(?:+\+)\b"  # Защищенные домены типа glazcom
)
# 🔹 Регулярка для запрета ссылок на ботов (t.me/ИмяБота)
BOT_LINK_PATTERN = re.compile(r"t\.me\/+bot“, re.IGNORECASE)
# 🔹 Регулярное выражение для фильтрации эмоджи (более 5 подряд)
EMOJI_PATTERN = re.compile(r”({5,})“)
# 🔹 Новый фильтр: чередование кириллицы и латиницы
MIXED_CYR_LAT_PATTERN = re.compile(r”(?=.*)(?=.*)“)
# 🔹 Новый фильтр: много спецсимволов подряд
SPECIAL_CHAR_PATTERN = re.compile(r”{5,}“)
# 🔹 СПАМ-ФРАЗЫ (регулярные выражения)
SPAM_PATTERNS = [
    r”нужны \d+ человека“, r”Срочно ищем людей на подработку“, r”срочно нужны люди на подработку“, r”Заработок \d+-\d+ рублей в день“, r”вoзьмy \d+ чeлoвекa в паpтнeры по бизнecy“,
    r”нужны \d+ человек“, r”СРОЧНО , нужны люди на вечернюю подработку“, r”Срочно ищем людей на подработку“, r”Оплата — \d+ рублей за смену“, r”Нужно пару человек на“,
    r”\+ в лс“, r”Открыт набор людей, хороший доход“, r”за подробностями пишите в лс“, r”cмoжeт пoмoчь oдинoкoй дeвyшкe c пepeeздoм“, r”Нужны разнорабочие для выполнения“,
    r”пиши в лс“, r”приглашаем на работу, подработку“, r”пиши + в лс“, r”пиши и начни зарабатывать“, r”Водитель С ЛИЧНЫМ АВТО“, r”Нужны водители для рейсов“, r”\d+ человека на непостоянную занятость“,
    r”пишите в лс“, r”нужен человек на удаленный заработок“, r”Требуются несколько человек на вакансию“, r”Пишите “+” в личку“, r”Пиши “+” в личку“, r”пишите + в личку“, 
    r”Пишите в личку для всех деталей“, r”Пиши плюс в ЛС“, r” от \d+ баксов в день“, r”Пᴏʍᴏᴦу ᴩᴇɯиᴛь ʙᴄᴇ ɸинᴀнᴄᴏʙыᴇ“, r”Пиши мне “+”“, r”Подробности в личных смс“, r”Пишите “+” в личку“,
    r”пиши в личку“, r”а не горбатиться на кредит или ипотеку тогда жду в лс“, r”подробности пишите в лс“, r”Ищешь работу с хорошим доходом“, r”Оплата — от \d+ до \d+ рублей в час“,
    r”удалёнку с хорошим доходом“, r”за пару прοстых действий“, r”по всем вопросам пишите в личку“, r”Пиши “+” мне в личку“, r”Пишите в личку для всех деталей“,
    r”официальном тг казино“,  r”Telegram казино“, r”Доходность от \d+$ неделя“, r”Закроем финансовые проблемы любой сложности“,
    r”выиграл \d+к в казино“,
    r”Paбoтa для студeнтов и мaм в дeкpeте“,
    r”Гибкий гpaфик, дocтoйнaя oплатa“,
    r”ПОДРАБОТКА НА ПАРУ ЧАСОВ В ДЕНЬ“,
    r”ОТ \d+к в ДЕНЬ“,
    r”\d+$ в неделю“,
    r”\d+ \d+ - \d+ \d+ рублей, прямо с телефона“,
    r”\d+$ в день“,
    r”КАСАЕТСЯ ВСЕХ В ГРУППЕ"
]
# 🔹 Функция проверки сообщения
def check_message(message):
    # Проверяем на спам-фразы
    spam_match = 
    
    if spam_match:
        print(f“❌ СПАМ: {message} (Найдено: {spam_match})”)  # Печатаем на консоль
        return f“❌ СПАМ: {message} (Найдено: {spam_match})”
    
    # Проверяем на массовые эмоджи
    if EMOJI_PATTERN.search(message):
        print(f“❌ СПАМ (эмоджи): {message}”)
        return f“❌ СПАМ (эмоджи): {message}”
# Проверка на чередование кириллицы и латиницы
    if MIXED_CYR_LAT_PATTERN.search(message):
        print(f“❌ СПАМ (чередование кириллицы и латиницы): {message}”)
        return f“❌ СПАМ (чередование кириллицы и латиницы): {message}”
#Проверка на то, что много спецсимволов подряд
    if SPECIAL_CHAR_PATTERN.search(message):
        print(f“❌ СПАМ (много спецсимволов подряд): {message}”)
        return f“❌ СПАМ (много спецсимволов подряд): {message}”
    # Проверяем на ссылки
    elif URL_PATTERN.search(message):
        print(f“❌ СПАМ (ссылка): {message}”)  # Печатаем на консоль
        return f“❌ СПАМ (ссылка): {message}”
    else:
        print(f“✅ Чисто: {message}”)  # Печатаем на консоль
        return f“✅ Чисто: {message}”
#————ТЕСТОВЫЕ СООБЩЕНИЯ для проверки———————————————–
# 🔹 Тестовые сообщения
test_messages = [
    “Нужны 5 человека на работу”,   # Должно быть спамом
    “Выиграл 200к в казино!”,       # Должно быть спамом
    “Заработок в сети, пиши в лс!”, # Должно быть спамом
    “Наш сайт www.scam.biz – проверенный!”, # Должно быть спамом (ссылка)
    “Привет, как дела?”,            # Должно быть чистым
]
# 🔹 Проверяем тестовые сообщения
print(“🔹 Проверка тестовых сообщений:\n”)
for msg in test_messages:
    print(check_message(msg))  # Проверка каждого сообщения
#————ТЕСТОВЫЕ СООБЩЕНИЯ для проверки———————————————–
# 🚀 Обработчик сообщений: удаляет спам
async def handle_message(update: Update, context: CallbackContext):
    message = update.message
    if not message:
        return
    # Проверяем на спам
    if message.text:
        result = check_message(message.text)  # Проверяем сообщение на спам
        if “❌ СПАМ” in result:  # Если нашли спам, удаляем
            logger.info(f“❌ Удалено спам-сообщение от {message.from_user.username}”)
            await message.delete()  # ✅ Добавлен await
    # Удаляем сообщения от имени групп/каналов
    if message.sender_chat:
        logger.info(f“❌ Удалено сообщение от имени группы/канала ({message.sender_chat.title})”)
        await message.delete()
        return
    # Проверка на пересланные сообщения
    if hasattr(message, ‘forward_from_chat’) and message.forward_from_chat:
        chat = message.forward_from_chat
        chat_type = getattr(chat, ‘type’, None)  # Безопасно получаем ‘type’
        
        logger.info(f“Пересланное сообщение из чата: {chat_type}, от: {message.from_user.username if message.from_user else ‘Неизвестный пользователь’}”)
        
        if chat_type in :
            logger.info(f“❌ Удалено пересланное сообщение из чужого чата ({message.from_user.username})”)
            await message.delete()
            return
        else:
            logger.info(f“Пересланное сообщение из чата не подходит для удаления ({chat_type})”)
    else:
        logger.info(“Сообщение не является пересланным”)
# 🔹 Ответ на команду /start
async def start(update: Update, context: CallbackContext):
    await update.message.reply_text(“Привет! Я антиспам-бот. Я удаляю спам, ссылки и пересланные сообщения от ботов. 🚀”)
# 🔥 Основная функция (Запуск бота)
def main():
    TOKEN = “!!!!!!!!!!!!!!!!!!!!!!!!!!”  # Вставьте свой токен
    application = Application.builder().token(TOKEN).build()
    application.add_handler(CommandHandler(“start”, start))
    application.add_handler(MessageHandler(filters.TEXT, handle_message))
    application.add_handler(MessageHandler(filters.FORWARDED, handle_message))
    application.run_polling()
if __name__ == ‘__main__’:
    main()
Офлайн
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png)