Спам в Telegram: тихий ужас админов и кошельков
Каждый владелец Telegram-чата знает это чувство: проснуться утром, открыть группу, а там 500 сообщений от ботов с рекламой казино. Классические антиспам-фильтры на ключевых словах уже не работают - спамеры стали хитрее. Нужен AI.
Но вот загвоздка: русскоязычные AI вроде GigaChat 3 дико дороги. Очень дороги. Настолько, что содержать антиспам-бота для активного чата может стоить больше, чем сам спам наносит ущерба.
А что если я скажу, что есть способ дешевле в 1000 раз? И быстрее. И проще.
Знакомьтесь: Gemini 3 Flash от Google. Младший брат Gemini Pro, который стоит копейки, но отлично справляется с классификацией текста. На 02.04.2026 это самая новая и оптимизированная версия для задач, где не нужны глубокие рассуждения - только быстрая и точная оценка.
Важно: все цифры и версии моделей актуальны на 02.04.2026. Если читаете это позже - проверьте обновления.
Почему GigaChat 3 разоряет, а Gemini Flash - нет
Давайте посмотрим на холодные цифры. Не на маркетинговые обещания, а на то, что вы реально платите за каждый запрос.
| Модель | Стоимость за 1K токенов (вход) | Лимиты запросов | Скорость ответа |
|---|---|---|---|
| Gemini 3 Flash (актуально на 02.04.2026) | $0.0001 | 15 запросов в секунду на ключ | ~200 мс |
| GigaChat 3 (актуально на 02.04.2026) | $0.1 | 5 запросов в минуту на ключ | ~2-5 секунд |
Видите разницу? 1000 раз по стоимости. И в 60 раз по лимитам (если перевести в одинаковые единицы). GigaChat 3 просто не предназначен для массовой обработки сообщений в реальном времени - он для чатов и диалогов. А антиспам должен работать мгновенно и дешево.
Но как насчет качества? Gemini Flash справится с русским языком? Справится. В 2026 году поддержка языков у Google на высоте. И для задачи классификации "спам/не спам" не нужна глубокая эрудиция - нужно понять контекст и намерение.
Кстати, если вы хотите глубже разобраться в архитектуре GigaChat 3, у нас есть детальный разбор. Там вы узнаете, почему он такой дорогой и медленный.
Расчеты: сколько вы сэкономите на 1000 сообщений
Предположим, у вас чат с 10 000 сообщений в день. Средняя длина сообщения - 50 токенов (это около 40 слов на русском).
- GigaChat 3: 10 000 * 50 = 500 000 токенов. Стоимость: 500 * $0.1 = $50 в день. Это $1500 в месяц. За антиспам!
- Gemini Flash: те же 500 000 токенов обойдутся в 500 * $0.0001 = $0.05 в день. $1.5 в месяц.
Экономия: $1500 против $1.5. Это в 1000 раз. Даже если мои цифры отличаются от ваших реалий, порядок величины тот же.
А теперь перейдем к практике. Как собрать бота, который будет использовать эту экономию.
1 Готовим окружение и ключи
Первое: вам нужен Python 3.10 или выше. Установите библиотеки:
pip install python-telegram-bot google-generativeai python-dotenv
Второе: получите API ключ для Gemini. Идите в Google AI Studio (это не партнерская ссылка, а официальный ресурс). Создайте ключ. Он бесплатный, но с лимитами, которых хватит для начала.
Третье: создайте Telegram-бота через BotFather. Запишите токен.
Если вы новичок в создании ботов, рекомендую курс "Создание Telegram-бота" от Skillbox - там все разжевано от начала до конца.
2 Пишем скелет бота
Создайте файл bot.py. Импорты и базовая структура:
import os
import logging
from dotenv import load_dotenv
from telegram import Update
from telegram.ext import Application, MessageHandler, filters, ContextTypes
import google.generativeai as genai
load_dotenv()
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel('gemini-3-flash')
logging.basicConfig(level=logging.INFO)
Мы используем python-telegram-bot версии 20.x (актуально на 02.04.2026). Обратите внимание: модель указана как gemini-3-flash. Это последняя версия на момент написания.
Если у вас возникают проблемы с доступом к API Google, возможно, вам поможет Gemini CLI Proxy - ваш личный шлюз для обхода ограничений.
3 Создаем промпт для антиспама
Вот где магия. Нам нужно научить Gemini отличать спам от нормальных сообщений. Используем few-shot промпт - дадим несколько примеров.
Промпт должен быть на русском, но с учетом, что Gemini обучена на множестве языков.
ANTISPAM_PROMPT = """
Ты - антиспам-фильтр для Telegram-чата. Твоя задача - анализировать сообщения и определять, являются ли они спамом.
Спам - это:
1. Реклама казино, криптовалют, финансовых пирамид.
2. Предложения "заработать быстро" с ссылками.
3. Массовые рассылки с призывом перейти по ссылке.
4. Сообщения с большим количеством эмодзи и заглавных букв.
5. Попытки выманить личные данные.
Не спам - это:
1. Обычные сообщения участников чата.
2. Вопросы, обсуждения, шутки.
3. Ссылки на известные и безопасные ресурсы (YouTube, GitHub, новости).
4. Картинки, голосовые, стикеры (если без спам-текста).
Примеры:
Сообщение: "ЗАРАБАТЫВАЙТЕ ОТ 1000$ В ДЕНЬ БЕЗ ВЛОЖЕНИЙ! ПЕРЕХОДИ ПО ССЫЛКЕ >>>"
Ответ: СПАМ
Сообщение: "Привет, ребята. Кто-нибудь знает хороший туторий по Python?"
Ответ: НЕ СПАМ
Сообщение: "Смотрите, какой прикольный кот: https://youtube.com/shorts/abc123"
Ответ: НЕ СПАМ
Сообщение: "СТАВКИ НА СПОРТ! ВСЕГДА ВЫИГРЫВАЙ! НАША КОМАНДА ПРОФЕССИОНАЛОВ!"
Ответ: СПАМ
А теперь проанализируй следующее сообщение и ответь только "СПАМ" или "НЕ СПАМ".
Сообщение: "{message_text}"
Ответ:
"""
Этот промпт дает контекст и примеры. Gemini Flash отлично справляется с такой задачей. Вам может потребоваться добавить больше примеров под ваш конкретный чат.
4 Функция проверки сообщения
Теперь напишем функцию, которая будет отправлять текст в Gemini и получать ответ.
async def check_spam(text: str) -> bool:
"""Проверяет, является ли сообщение спамом."""
try:
prompt = ANTISPAM_PROMPT.format(message_text=text)
response = model.generate_content(prompt)
result = response.text.strip().upper()
logging.info(f"Сообщение: {text[:50]}... Результат: {result}")
return "СПАМ" in result
except Exception as e:
logging.error(f"Ошибка при проверке спама: {e}")
return False # В случае ошибки лучше пропустить, чем заблокировать невиновного
Обратите внимание: мы используем асинхронность? Нет, потому что вызов Gemini API синхронный. Но мы можем запустить его в отдельном потоке, чтобы не блокировать бота. Или использовать асинхронную библиотеку для Gemini, если такая есть. На 02.04.2026, возможно, есть асинхронная поддержка. Для упрощения, я буду использовать синхронный вызов в пуле потоков.
Но в python-telegram-bot обработчики сообщений асинхронные. Поэтому нам нужно запустить синхронный вызов в отдельном потоке. Используем asyncio.to_thread.
import asyncio
async def check_spam_async(text: str) -> bool:
"""Асинхронная проверка спама."""
loop = asyncio.get_event_loop()
return await loop.run_in_executor(None, check_spam, text)
Но в функции check_spam уже есть асинхронность? Нет, она синхронная. Поэтому так.
Однако, для производительности лучше использовать асинхронные клиенты. Но для простоты гайда, оставим так.
5 Обработчик сообщений в Telegram
Теперь напишем обработчик, который будет вызываться на каждое новое сообщение в чате.
async def message_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
# Игнорируем сообщения от самого бота
if update.message.from_user.id == context.bot.id:
return
message_text = update.message.text
if not message_text:
return # Игнорируем медиа без текста
is_spam = await check_spam_async(message_text)
if is_spam:
# Удаляем сообщение и банним пользователя
try:
await update.message.delete()
await context.bot.ban_chat_member(
chat_id=update.message.chat_id,
user_id=update.message.from_user.id
)
logging.info(f"Забанен пользователь {update.message.from_user.username} за спам.")
except Exception as e:
logging.error(f"Не удалось удалить сообщение или забанить: {e}")
def main():
application = Application.builder().token(TELEGRAM_TOKEN).build()
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, message_handler))
application.run_polling()
if __name__ == "__main__":
main()
Это базовая логика. В реальности, вы можете захотеть отправлять предупреждения, использовать мягкие меры (например, только удаление), или логировать в канал.
Совет: не баните сразу навсегда. Давайте шанс. Например, сначала предупреждение, затем мут на день, потом бан. Это снизит количество ложных срабатываний.
Нюансы, которые взорвут ваш бот, если не учесть
Теперь о том, что обычно умалчивают в гайдах.
1. Однопоточность API Gemini
Gemini Flash имеет лимит 15 запросов в секунду на ключ. Это много, но если ваш чат очень активный, можно упереться. Решение: использовать несколько API ключей и балансировать нагрузку. Или кэшировать результаты для похожих сообщений.
2. Ложные срабатывания
AI не идеален. Он может принять за спам безобидное сообщение с ссылкой на ваш же продукт. Всегда добавляйте возможность апелляции. Например, создайте команду /appeal для разбана.
3. Длина сообщений
Gemini Flash имеет лимит на количество токенов (вероятно, 1 миллион для контекста). Но одно сообщение в Telegram редко превышает 4096 символов. Все равно обрезайте длинные сообщения до разумного предела, например, 500 токенов.
4. Стоимость все равно есть
Да, она в 1000 раз меньше, но если у вас супер-активный чат с миллионом сообщений в день, вы все равно заплатите десятки долларов. Следите за использованием.
Если вы хотите построить более сложного гибридного бота, который использует разные модели для разных задач, посмотрите этот гайд.
Что в итоге?
Вы получаете антиспам-бота, который:
- Стоит копейки (до 1000 раз дешевле GigaChat 3).
- Работает быстро (сотни миллисекунд).
- Легко настраивается через промпт.
- Масштабируется за счет множества ключей.
И все это на актуальной модели Gemini 3 Flash от Google, которая на 02.04.2026 является лучшим выбором для задач классификации текста.
Код из этого гайда - лишь основа. Добавьте логирование, панель управления, белый список, обработку медиа - и у вас будет профессиональный антиспам-бот.
А если вы хотите не только бороться со спамом, но и продвигать свой чат, рекомендую курс "Создание Telegram-бота и продвижение в мессенджерах" - там научат и тому, и другому.
И последний совет: не полагайтесь слепо на AI. Спамеры адаптируются. Ваш промпт должен эволюционировать вместе с ними. Раз в неделю просматривайте логи и добавляйте новые примеры спама. Так вы останетесь на шаг впереди.
Удачи в борьбе со спамом! И помните: каждый рубль, сэкономленный на API, - это рубль, который можно вложить в развитие чата.