А вы знали, что в телеграм есть спам? Я вот два с половиной года тому назад не знал, и использовал его для рабочих, личных чатиков на несколько десятков человек, а также для чтения новостных каналов. А потом вдруг что-то случилось, и я начал вступать в различные группы на тысячи и десятки тысяч пользователей. Открыл для себя новый дивный мир – полный спама, мошенников, и просто тупой рекламы.
Как-то так получилось, что я вписался модерировать один банковский чатик, но быстро понял, что вручную делать это достаточно затратно по времени. Поэтому отправился искать антиспам бота, полагая что за столько времени-то его наверняка сделали. Нашёл кучу мощных решений для управления группой: Group Help, Rose, Combot, Iris, ChatKeeper, и несколько ботов поменьше...
Но вместо функции антиспама у них предлагается капча и набор различных фильтров, типа удаления по ключевым словам (которые сам задаёшь), удаление всех сообщений с картинками, ссылками, голосовухами. И в итоге выбираешь: либо полностью запретить пользователям писать про крипту и использовать ссылки, либо также вручную постоянно удалять спам и каждый день добавлять всё новые и новые ключевые слова. Потому что спамер не совсем дурак, и немного изменив текст, успешно обходит защиту.
больше пробелов б-гу пробелов
С капчей ситуация не лучше - спамеры её легко проходят. Какую-то на автомате, где-то специально обученный человек решает задачки, а потом уже софт рассылает туда, куда пустили. А вот у пользователей постоянно проблемы: кто-то не увидел, кто-то не успел, у кого-то 2 плюс 2 получается 8, или интернет настолько медленный, что капча не успела загрузиться за две минуты. Объяснений наслушался уйму.
Так пришла идея сделать своё решение, с блэкджеком и без капчи. А начать решил со сбора данных. Зарегистрировал несколько дополнительных аккаунтов, вступил с них в максимально возможное количество групп, и начал анализировать сообщения спамеров, а также их поведение. И поначалу казалось, что всё очевидно. Даже без анализа текста: просто по скорости входа в группы и скорости отправке сообщений в них. Но по пользователю нельзя посмотреть в каких группах он состоит, если не состоишь с ним в этих же группах, поэтому такой способ работал не для всех спамеров.
При анализе текста всё оказалось куда сложнее. Текст можно достаточно сильно исковеркать, но многие люди при этом по-прежнему смогут его прочитать. Кроме различных l33t техник, с заменой букв цифрами, символами и буквами из других языков, которые визуально похожи, в текст добавлялись дополнительные разделители между буквами, невидимые символы, emoji (и кастомные emoji), в словах дублировались символы или наоборот удалялись. И в качестве финала - всё это в виде картинки.
И когда мне началось казаться, что бот неплохо справляется со своей задачей - его начали добавлять в другие чаты. И вдруг начало выясняться, что с виду нормальные люди используют те же приёмы, что и спамеры. У кого-то сломалась кнопка с буквой «О» на клавиатуре (например, с русскоязычной раскладкой клавиатуры), поэтому во всех своих сообщениях на русском языке он использует латинскую «O». Кому-то нравится использовать больше emoji в тексте, чем букв. Некоторым очень сильно нужно продать лишние вещи, поэтому они сразу заходят во все барахолки, и разом во все эти группы они отправляют свои объявления.
Чтобы попробовать решить эту проблему, я начал собирать историю действий пользователей в публичных группах. По дате входа или первого сообщения, начал примерно считать дату регистрации аккаунта. Все собираемые сообщения прогонял через детектор спама и в итоге составил рейтинг пользователя. К текущему моменту обработал данные о 12 млрд сообщениях от 300 млн пользователей в примерно 4 млн групп. И по-прежнему остаётся бесконечный горизонт для сбора и анализа данных. Но ввиду лимитов телеграм и проблем с регистрацией новых аккаунтов - процесс идёт не так быстро, как хотелось бы.
Но уже с такими набором данных получилось натренировать автоматику на вполне адекватную работу по зачистке спамеров, без необходимости запрещать все слова, кроме тех, что добавили в белый список, или имитировать бурную деятельность заполняя чат бесконечным полотном из капч для всех входящих. Но без ложных срабатываний пока обойтись не удаётся. И пока что заметил, что больше всего бот не любит HR, которые не указывают вилку зарплат в вакансиях, а также рассказывают про "дружную команду".
Кроме того, остаётся нерешённой проблема со шлюхоботами, которые из отличительных признаков имеют только фотографию. И, в целом, иногда находятся не совсем тупые спамеры, а те, которые проявляют немного фантазии, поэтому требуется корректировать детекты. Пока не очень понятно как долго борьба с ветряными мельницами будет доставлять мне больше удовольствия, чем проблем. Но изначально планировал сделать бота для одного чата, а сейчас он уже установлен в 3000 групп, и успел заблокировать 1.1млн спамерских аккаунтов, полный список которых можно выгрузить через api.lols.bot
Одно время был популярен спам реакциями, и с тех пор у бота остался функционал превентивной блокировки (когда блокируется пользователь, не состоящий в группе). Но база разрослась, и достаточно часто стал сталкиваться с такой проблемой, что после добавления бота в группу с 50 участниками, бот блокирует 300 участников, в группе по прежнему остаётся 50 участников, но у админа начинается паника и он удаляет бота "пока он всех не заблокировал". Поэтому этот функционал буквально недавно отключил.
Также админы в целом боятся добавлять левых ботов, переживая из-за того, что боты могут подраться, или заблокировать всех участников, или даже украсть группу. И если с блокировкой всех участников переживания оправданы (разок была задача кикнуть 50к пользователей из чата на 200к - заняло буквально 15 минут), то подраться боты не могут (если у обоих есть админские права), и более того, они не видят сообщения друг друга, даже поругаться не смогут. А уж про захват группы так и вовсе фантастика - бот не может снять права у тех, кому он их не выдавал, и не может выдать другому больше прав, чем выдали ему самому.
Недавно телеграм начал отображать количество пользователей бота, и мне показалось что это может хоть как-то решить проблему с недоверием к неизвестному боту, но буквально позавчера эта цифра пропала, и не очень понятно к чему это, и надолго ли. Также не уверен, что эту проблему смогла бы решить публикация исходного кода, но в любом случае пока что таких планов нет, а для интеграции в своего бота можно использовать API. Конечно, получится не полноценный аналог, но в некоторых чатах уже вполне неплохо получается, особенно в паре с уже имеющимся защитным функционалом бота (многие экспериментируют с нейронными сетями, и иногда получается неплохо).
Боту выбрал легко читаемое и запоминаемое имя: @lolsbotcatcherbot
В комментариях хотелось бы услышать про ваши предпочтения по антиспаму для групп в телеге. Например Protectron мне показался неплохой альтернативой, но лишь в вариации со включенной опцией удаления всех ссылок, что для некоторых чатов вполне приемлемо.
Простите за многабукаф. Если зайдёт, то больше про бота расскажу в следующей серии, а этот топик хотелось закрыть вопросом: «почему у большинства спамеров премиум подписка?»