Python Forum
Python-based telegram spam bot-telegram-bot
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python-based telegram spam bot-telegram-bot
#1
Hello, everyone. I'm completely new to Python (I've been writing code for literally 3 days). My task is to write an Antispam Telegram bot based on python-telegram-bot. At the moment, I have a problem with the fact that forwarded messages from the group are not deleted (I need to make sure that all forwarded messages from groups, bots, chats are deleted) (forwarded from). Also, the buttons attached to the telegram with links are also not deleted. Help please.


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/, http/, 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()
Reply
#2
The code has optimized and removed some jambs, but the situation with removing links to bots, reposts from groups and channels has not been resolved. I'm attaching a new code.

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://, http://, www.)
    r"t\.me/\S+|"  # Ссылки Telegram
    r"@[A-Za-z0-9_]+|"  # Упоминания через @username
    r"[\w\.-]+\.ru\b|[\w\.-]+\.com\b|[\w\.-]+\.net\b|[\w\.-]+\.org\b"  # Доменные имена
    r"\b(?:[a-zA-Z0-9-]+\[dot\][a-zA-Z]+)\b"  # Защищенные домены типа glaz[dot]com
)

# 🔹 Регулярка для запрета ссылок на ботов (t.me/ИмяБота)
BOT_LINK_PATTERN = re.compile(r"t\.me\/[a-zA-Z0-9_]+bot", re.IGNORECASE)

# 🔹 Регулярное выражение для фильтрации эмоджи (более 5 подряд)
EMOJI_PATTERN = re.compile(r"([\U0001F300-\U0001F6FF\U0001F900-\U0001F9FF\U0001FA70-\U0001FAFF]{5,})")

# 🔹 Новый фильтр: чередование кириллицы и латиницы
MIXED_CYR_LAT_PATTERN = re.compile(r"(?=.*[а-яА-Я])(?=.*[a-zA-Z])")

# 🔹 Новый фильтр: много спецсимволов подряд
SPECIAL_CHAR_PATTERN = re.compile(r"[^a-zA-Zа-яА-Я0-9\s]{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 = [pattern for pattern in SPAM_PATTERNS if re.search(pattern, message, re.IGNORECASE)]
    
    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 ["channel", "supergroup", "group"]:
            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()
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to make my Telegram bot stop working at 16:15 and not work on Fridays? hus73 2 1,378 Aug-10-2024, 12:06 PM
Last Post: hus73
  Multiplayer call to Telegram bot AlexSn2020 4 3,905 May-13-2024, 10:02 PM
Last Post: deanhystad
  read file txt on my pc to telegram bot api Tupa 0 2,663 Jul-06-2023, 01:52 AM
Last Post: Tupa
  queue for async function python telegram.ext noctious 0 3,418 Jun-11-2023, 02:58 PM
Last Post: noctious
Information How to take url in telegram bot user input and put it as an argument in a function? askfriends 0 2,366 Dec-25-2022, 03:00 PM
Last Post: askfriends
  Problem with importing python-telegram library into the project gandonio 1 3,321 Nov-01-2022, 02:19 AM
Last Post: deanhystad
  Telegram bot python help! wolfdevs 0 1,208 Sep-07-2022, 11:34 AM
Last Post: wolfdevs
  telegram + telethon download message and foto and republish faustf 0 3,220 Oct-12-2021, 05:09 PM
Last Post: faustf
  How to make a telegram bot respond to the specific word in a sentence? Metodolog 2 7,819 Dec-22-2020, 07:30 AM
Last Post: martabassof
  Telegram Users Scrapper - Exclude UserPrivacyRestricted graphite2015 0 3,158 Oct-23-2020, 05:43 AM
Last Post: graphite2015

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020