№107

3 ноября 2026

агенты · инструменты · данные

Антиспам для телеграм-группы: фильтр текста плюс вход через Google

Бот для телеграм-группы примерно за 0,6 секунды удаляет явный спам и рекламу в первом сообщении новичка.

2 мин чтения · $0,042 за 1M токенов · пара часов

Где подвох
Готового сервиса нет: сервер, базу PostgreSQL и приложение для входа через Google в Google Cloud вы настраиваете сами. Старых участников группы через Google не проверяют, их держит только текстовый фильтр.

Как повторить

  1. Склонируйте репозиторий github.com/Asmadey/Telegram-Google-Auth-Jev-verify-bot. Бот написан на Python (aiogram, FastAPI, PostgreSQL).
  2. Создайте бота через @BotFather, получите BOT_TOKEN. Добавьте бота в группу администратором с правами «удалять сообщения» и «блокировать участников». Узнайте CHAT_ID группы (отрицательное число для супергруппы, например через @getidsbot) - без него бот не стартует.
  3. Получите ключ на OpenRouter и впишите его в OPENROUTER_API_KEY. Через OpenRouter доступна модель typesafe/jev-1.13: прямая регистрация в TypeSafe закрыта для новых аккаунтов с 22 сентября 2026.
  4. Создайте OAuth-клиент (данные приложения для входа через Google) в Google Cloud. В репозитории он сделан через проект Firebase, но Firebase SDK в коде не используется. Впишите GOOGLE_CLIENT_ID и GOOGLE_CLIENT_SECRET, адрес обратного вызова: <PUBLIC_BASE_URL>/auth/google/callback.
  5. Сгенерируйте SECRET_KEY - случайную строку, которой бот подписывает сессии: python3 -c "import secrets; print(secrets.token_urlsafe(48))". Без неё старт тоже упадёт с ошибкой.
  6. Поднимите PostgreSQL: локально через docker compose up -d, на Railway через плагин Postgres. Задеплойте сервис на Railway, автодеплой подхватится из GitHub.
  7. Запустите бота. Таблицы создаются сами из migrations/*.sql при первом старте.
docker compose up -d
pip install -r requirements.txt
python main.py

Переменные окружения и адрес обратного вызова могут не сойтись с первого раза, заложите время на отладку.

Как проверить результат

С тестового аккаунта без прав администратора напишите в группу нейтральное сообщение. Бот должен прислать персональную ссылку с таймером на 60 секунд. После входа через Google сообщение останется, следующие пройдут без проверки. Со второго тестового аккаунта отправьте явную рекламу со ссылкой: сообщение исчезнет, автора забанят без возможности пройти вход. Решение модели, вероятность и категорию по каждому сообщению видно в таблице screened_messages.

Как это устроено

Jev не пишет текст. Модель-классификатор возвращает вероятность блокировки и категорию: spam, advertising, scam или normal. Поэтому она отвечает быстро и стоит дёшево, выходные токены бесплатны.

Вход через Google ловит ботов, которые в первом сообщении пишут что-то безобидное вроде «привет». Ссылка привязана к from.id, то есть к конкретному пользователю Telegram, и один Google-аккаунт подтверждает только одного участника. Чтобы завести много ботов, придётся проходить много настоящих Google-входов.

Ссылки

Источник: свой проект на GitHub (Asmadey), поверх идеи Глеба, @gleb_pro_ai.

Больше подобного

Разбираю по находке в день и складываю сюда. Свежее и то, что до сайта не доехало, выходит в канале «Евдокимов как обычно».