Найти - Пользователи
Полная версия: Спам бот телеграм на базе python-telegram-bot
Начало » Центр помощи » Спам бот телеграм на базе python-telegram-bot
1
archer24
Здравствуйте всем. Я совсем новичок в 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/, 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()
archer24
Код оптимизировал и убрал некоторые косяки, но ситуация с удалением ссылок на ботов, репостов с групп и каналов, так и не смог решить. Прикрепляю новый код.


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,})“)

# 🔹 Новый фильтр: чередование кириллицы и латиницы
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()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB