Антиспам бот для чатів та коментарів у Telegram
Не хотілося б починати матеріал зі слів: «я зробив чергового антиспам бота, яких вже повно», тому що це не черговий бот, а кілька роботів в одному.
Взявши найкраще, у кращих вдалося реалізувати бота, який ефективно і оперативно вичищає спам з телеграм чатів і коментарів до постів, не вимагаючи звати адміністратора або заповнювати чорні списки фраз.
Бот називається Delation. І рівень його використання повністю залежить від того - чи ви довіряєте своїй аудиторії і наскільки довіряєте.
Як тільки ви додаєте бота в чат, він починає перевіряти кожне відправлене повідомлення (у тому числі коментар):
- На наявність відправника у базі спамерів CAS (база бота Combot)
- На наявність відправника в базі спамерів Lols (відповідно база робота Lols Anti Spam)
- На наявність спам повідомлення у власній базі робота
- На предмет спаму після перевірки повідомлення власною ML моделлю.
У разі виявлення спаму бот видалити повідомлення. Не забанить користувача, саме видалити повідомлення. Чому? На це є кілька причин: роботи рідко пишуть більше 1 повідомлення в чат, видалення може бути помилковим (як так може вийти розповім нижче), робот буде обмежений у правах і адміністратор буде спокійний, не давши роботі зайвої влади. Навіть якщо спамер повторно напише повідомлення, бот відразу його видалить.
Що якщо спамер пройшов усі етапи перевірок? Чи не опинився в базах спамерів, спам повідомлення невідоме боту, а оцінка моделлю машинного навчання не виявила спаму. Тут у справу входить ще один компонент робота - голосування за видалення спаму.
У відносно «затишних чатиках» користувачі з радістю самі готові зарепортувати та видалити спам повідомлення.
Для цього будь-який учасник може використовувати команду /report у відповідь на спам повідомлення. Бот надішле повідомлення з голосуванням, а комьюніті саме видалити спам повідомлення.
Кількість голосів до ухвалення рішення визначається налаштуваннями бота. Для спокійного чату достатньо кількох голосів (3-4), для чату «хуліганів» можна поставити до 20 (ось тут згадуємо про хибне видалення за допомогою хуліганства). Якщо бот позитивно себе проявить в декількох чатах (зараз працює тільки в 3 чатах), то звичайно, буде додана опція відключення голосувань, довіримо справу професіоналам (спам баз і ML).
Кожен чат може навчати модель бота, після декількох успішних голосувань можна відправити заявку на включення чату в процес навчання моделі.
Ну і звичайно, робот безкоштовний, і запрошую всіх адмінів спробувати його у справі. Лютий мікс технологій, який має повернути спокій у чати та коментарі без «монеток від Данила та Сема».
Знайти бота можна в телеграм: @delationbot
Вирішення проблеми спам-ботів, що додаються в телеграм-групи
Привіт. Я автор кількох популярних ботів для адміністрування телеграм груп: @daysandbox, @watchdog_robot та інших. Щодня в групі підтримки та в особистих повідомленнях я бачу те саме питання: як мені захиститися від спам-ботів, що додаються до групи. Зазвичай ще уточнюють, що це арабські спам-боти. Люди намагаються знайти анти-спам бота, який видалятиме посилання, видаляти повідомлення з арабськими символами, видаляти користувачів з арабськими символами в іменах і все в такому дусі. Але це все наслідки, а причина в багатьох випадках одна і та ж і її легко виправити. Причина проста, але не очевидна.
У чому унікальність проблеми спам-ботів, що додаються до групи? Телеграм боти не бачать повідомлення від інших телеграм ботів. Навіть якщо у вас у групі вже встановлені боти, видаляючі посилання, арабські символи та інші штуки, навіть якщо вони забороняють новим учасникам групи писати повідомлення доти, доки нові учасники не натиснуть на кнопку або пройдуть якийсь тест, це не допомагає запобігти спам.
Спам з'являється за наступним сценарієм:
- учасник групи додає спам-бота до групи
- анти-спам бот бачить факт додавання бота
- анти-спам бот викликає метод telegram API, що обмежує спам-бота в правах запису повідомлень до групи. Наприклад, він робить це для всіх нових користувачів або тільки для тих, логін яких містить наприкінці слово "bot". Це не має значення.
- Проходить деякий час між моментами заходу спам-бота в групу та обробкою телеграм сервера запиту про обмеження цього бота у правах запису в чат. У цей момент спам-бот може надіслати повідомлення до чату.
- Анти-спам бот не бачить це повідомлення, тому що боти не бачать повідомлення інших ботів. Так улаштований телеграм.
Розглянутий сценарій показує, що не завжди можливо боротися з наслідками ботів, що додаються. Найефективніше боротися з причиною - можливістю додавання ботів до групи учасниками групи.
Існує два типи телеграм груп: публічна та приватна. Від типу групи залежить, що і як можуть робити всередині групи адміністратори, прості користувачі та боти. Обов'язковою умовою для публічної групи є існування посилання виду "https://t.me/XXX", за яким можна зайти до групи. Для приватної групи наявність посилання для входу не є обов'язковою.
Розглянемо процес створення групи із нуля. Створимо групу з налаштуваннями за замовчуванням. У нас вийде приватна група без заслання-запрошення.Спробуємо додати будь-якого робота простим учасником групи. Додався! Як вирішити проблему? Єдиний спосіб заборонити додавати ботів у приватну групу - це заборонити додавати вручну взагалі будь-яких нових учасників, це робиться за допомогою галочки "Управління групою -> Дозволи -> Додавання учасників". Це обмежить лише простих користувачів, адміністратори групи, як і раніше, зможуть додавати нових учасників (і ботів) руками.
З найпростішим випадком розібралися. Тепер створимо посилання-запрошення для входу до групи: "Керування групою-> Інформація про групу -> Посилання-запрошення -> Створити посилання-запрошення". Отримаємо посилання виду "https://t.me/joinchat/.". Для кожного адміністратора створюється своє посилання-запрошення, спочатку його знає лише адміністратор, який його створив. Тепер адміністратор може розмістити це посилання там, де він вважатиме за потрібне, і будь-який користувач може приєднатися до чату за цим посиланням. У будь-який момент часу адміністратор може згенерувати нове запрошення, при цьому старе посилання перестане працювати.
Важливо: спам-боти не можуть зайти до групи за посиланням-запрошенням. Спам-бот (і взагалі будь-який бот) може потрапити в чат тільки якщо хтось додасть туди бота вручну. Найчастіша причина появи спам-ботів у приватних чатах - це коли адміністратори створюють посилання-запрошення, але не відключають (через Управління групою -> Дозволи) можливість додавати нових користувачів вручну.
Тепер подивимося, що буде, якщо ми переведемо групу з приватного режиму до публічного за допомогою "Керування групою -> Інформація про групу -> Публічна група".Нам також доведеться придумати публічну адресу виду "https://t.me/XXX", без цього не вдасться зробити групу публічною. Нехай це буде "https://t.me/habr_test". У чому відмінність громадської групи від приватної групи, має посилання-запрошення? Публічну групу можна знайти через внутрішній пошук телеграми, а також можна переглянути будь-яке повідомлення групи через веб за адресою https://t.me/habr_test/X, де X — це порядковий номер повідомлення в групі.
Отже, наша група стала публічною, у неї змінилися властивості видимості, і не лише. Найцікавіше, що до неї більше не можна запрошувати ботів. Якщо в "Керування групою -> Дозволи" дозволено запрошувати нових користувачів, то користувачі можу запрошувати нових користувачів, але тільки звичайних людей, не ботів. При спробі додати бота буде виникати помилка "Не вдалося додати користувача. Спробуйте пізніше". Те, що треба!
Висновок. Імунітет від зараження групи ботами дає одну з двох дій:
- заборону звичайним учасникам додавати ботів (Керування групою -> Дозволи)
- переведення групи на громадський режим тобто. призначення групі адреси виду "https://t.me/habr_test"
P.S. Заголовок статті вийшов трохи клікбейтовим. Звичайно, безліч телеграм-спаму генерується не bot-API ботами, а ботами, що використовують звичайні акаунти користувача, але проблема і її рішення, описані в статті, мають місце бути. І вони мають місце бути щодня, і я вже завагався відповідати одне й те саме на ті самі питання, тому і написав цю статтю.
UPD: Зробив бота, який автоматично видаляє повідомлення, що містять символи арабського алфавіту, а також видаляє нових користувачів, імена яких мають символи арабського алфавіту.Просто встановіть бот @noarab_bot в чат і дайте йому права на видалення повідомлень і на бан користувачів. Документація з роботи: https://tgdev.io/bot/noarab_bot
UPD2: Якщо з тих чи інших причин неможливо зробити групу публічною або заборонити додавання участі в приватній групі, тоді можна використовувати бота @watchdog_robot з фільтром "bot" - watchdog видалятиме ботів відразу ж після того, як їх хтось додав до чату.