Проект «Ласточка»

– бот с функционалом антиспама и антимата
текущая реализация: для telegram

Описание:

  • Написан на C#
  • Антимат базируется на собственных разработках, за основу взят sbw3.tcl
  • Имеются словари мата и исключений
  • Антиспам разработан с нуля на механиках оценки и самообучения
  • Гибкая настройка режимов поведения всех систем
  • Бот ведет поканальный учет событий
  • Есть режим «солидарности»
Ссылка на «Ласточку»

антиспам 1.2.13 (16.12.2024)
  • добавлена опция блокировки по "чёрному списку", включается либо через меню настроек антиспама, либо через опцию restrictblacklisted. Суть опции: при входе пользователя в чат, он проверяется на наличие в черном списке (строится по истории банов за спам во всех группах где действует бот; ложнопозитивные срабатывания из списка исключаются), и если наличие подтверждено - сразу блокирует его. старое поведение (до введения опции, или если опция выключена): если спамер заходит в чат и числится в черном списке, к нему применяется повышенный коэффициент скоринга, однако остается возможность естественной реабилитации. Опция рекомендована к включению.
антиспам 1.2.12 (12.12.2024)
  • изменение в отчетах по блокировке: копия спам сообщения больше высылается в назначенный чат, вместо этого копия спам-сообщения попадает в специальную ленту сообщений, а ссылка на сообщение в этой ленте попадает в отчет о блокировке
  • открыт отдельный канал - лента заблокированных сообщений, доступен по ссылке https://t.me/lasto4ka_reports, может быть использован другими разработчками антиспам-систем в качестве источника данных для обучения
антиспам 1.2.11 (03.12.2024)
  • добавлена опция ограничения в возможностях отправки медиа (картинок, видео, аудио и т.д.) новых пользователей на время "знакомства".
    опция restrictnewjoinmedia, значиения true/false. работает в паре с параметром newjoinsilence (время знакомства с новым пользователем).
антиспам 1.2.10 (05.11.2024)
  • добавлена возможность взаимодействия с ботом администратором от имени канала (анонимный режим)
  • добавлена базовая поддержка тем в супергруппах (форумы)
антиспам 1.2.9 (02.11.2024)
  • добавлена проверка Message.Entities в сообщениях на предмет замаскированных ссылок
  • расширены методы анализа сообщений
антиспам 1.2.8 (29.10.2024)
  • добавлена настройка реагирования на сообщения от "друзей", новая опция настроек антиспама:
    reactonfriends – значения 0/1, off/on, false/true – при выключении, сообщения пользователей, добавленных в список друзей, не проверяются на спам, при включении - если сообщения определяются как спам, они удаляются
  • добавлена "толерантность" к некоторым emoji
антиспам 1.2.7 (25.10.2024)
  • добавлено обнаружение replyMarkup в пересланных сообщениях (кнопки, inline-элементы и т.д.)
  • исправлен разбор пересланных сообщений с каналов, где у сообщения нет автора (ForwardFrom = null)
антиспам 1.2.6, антимат 1.0.2 (05.10.2024)
  • добавлено ui-меню настроек, доступно только в личных сообщениях бота, меню открывается по команде /start
антиспам 1.2.5 (04.10.2024)
  • добавлен анализ emoji в сообщениях
антиспам 1.2.4 (03.10.2024)
  • добавлены дополнительные проверки на стикеры для снижения вероятности ложнопозитивного срабатывания
  • добавлен поканальный сбор статистики для базовой аналитики
антиспам 1.2.3 (02.10.2024):
  • реализована команда !report Команда предназначена для ручного удаления спама, если сообщение не было автоматически перехвачено ботом. Работает только в режиме ответа на сообщения. Если команда просто отправлена в чат без указания на сообщение, она игнорируется. Копия сообщения, на которое поступила команда, сохраняется в базу обучения для последующего анализа. Оригинал сообщения удаляется. Команда доступна для администраторов канала и для "друзей" канала. В случае, если команда вызвана "другом" канала, режим солидарности не учитывается. Если жалоба поступает на сообщение за авторством администратора канала - копия сообщения отправляется на обучение, но иных действий не совершается. Если жалоба поступает на сообщение за авторством "друга" канала, копия сообщения отправляется на обучение, оригинал сообщения удаляется, иных действий не совершается.
антиспам 1.2.2:
  • добавлен режим тишины для режима солидарности. при включении этого режима бот молча банит спамера без дополнительного оповещения
Добавлена опция настроек антиспама:
silentsolidarity = bool, значения 1 или 0, on/off, true/false - включает/выключает режим тишины для режима солидарности
антиспам 1.2.1 (01.10.2024):
  • добавлен механизм компенсации для больших сообщений, для сокращения ложнопозитивных срабатываний
  • добавлен "список друзей канала", в текущей реализации такие "друзья" при срабатывании антиспама не попадают в бан, подозрительные сообщения удаляются
Новые команды:
!addfriend - можно использовать как ответ на сообщение того, кого хотим добавить в список друзей канала, либо же передав в качестве параметра @username (работает при условии что ранее пользователь оставлял сообщения в присутствии бота)
!listfriends - выводит список друзей канала
!delfriend - удаляет из списка друзей канала, можно по аналогии с !addfriend можно использовать как ответ на сообщение, либо с указанием @username
антимат 1.0.1:
  • "список друзей канала" распространяется на антимат - пользователи из этого списка не попадают в бан. сообщения с нецензурной лексикой однако удаляются.
антиспам 1.2 (27.09.2024)
  • реагирование на спам реакциями
Добавлены опции настроек антиспама:
reactions = bool
maxreactions = int32, значения <1 игнорируются (нет реакции на спам реакциями)
reactionsinterval = int32 в секундах, значение <3 игнорируется (нет реакции на спам реакциями)
антиспам 1.1
  • реагирование на спам медиаданными, режим "знакомства"
Добавлена опция настроек антиспама:
newjoinsilence - время в минутах, в течение которого после входа запрещены любые медиа, если от пользователя не было сообщений

Как пользоваться системой Антимат

Бот предназначен для чатов имеющих тип Group и Supergroup.
Для полноценного функционирования бота, его необходимо пригласить в группу и назначить ему права администратора.
!Бот может существовать в канале без прав администратора, но в этом случае он лишь ведет учет событий для оценки и самообучения.
Все команды бота доступны только администраторам группы!

    Команды и настройки системы антимата:

  • !bw – все команды антимата начинаются с префикса !bw
  • !bw ver (!bw version) – отображает версию системы антимат
  • !bw stat – отображает объем словаря антимата
  • !bw help – вывод справки по командам системы антимат
  • !bw on (!bw enable) – включает систему антимат в чате
  • !bw off (!bw disable) – выключает систему антимат в чате
  • !bw test [текст] – ручная проверка текста на срабатывание системы антимат
  • !bw status (!bw config) – отображает текущие настройки системы антимат в группе
  • !bw set [опция=значение] (!bw mod [опция=значение]) – изменений опций системы антимат
  •  
  • Опции системы антимат:
  • warns – допустимые значения 0, 1, true, false - включает или выключает систему предупреждений
  • warntimes – допустимые значения от 0 и больше (int32) - количество предупреждений, после которых последует бан
  • bantime – время бана в минутах, допустимые значения от 0 и больше
  • cleanup – время удаления собственных сообщений бота (предупреждения) в минутах
Данный пример включает в группе антимат, при этом пользователю будет вынесено 3 предупреждения, прежде чем он получит бан на 60 минут, а сообщения бота о предупреждениях будут автоматически удаляться с чата через 3 минуты.

    Поведение при разных режимах работы антимата:

  • Если система предупреждений выключена (warns=0) – бот только удаляет сообщение с нецезурной лексикой
  • Если система предупреждений включена (warns=1) но количество предупреждений = 0 (warntimes=0) – бот удаляет сообщение и банит пользователя
  • Если система предупреждений включена (warns=1) и количество предупреждений > 0 (warntimes=3, например) – бот выносит предупреждения пользователю, и только когда их будет сколько указано в warntimes, банит его
  • Если bantime=0, бан будет бессрочным

Как пользоваться системой Антиспам

Бот предназначен для чатов имеющих тип Group и Supergroup.
Для полноценного функционирования бота, его необходимо пригласить в группу и назначить ему права администратора.
!Бот может существовать в канале без прав администратора, но в этом случае он лишь ведет учет событий для оценки и самообучения в режиме солидарности.
Все команды бота доступны только администраторам группы!

    Команды и настройки системы антимата:

  • !antispam – все команды антиспама начинаются с префикса !antispam
  • !antispam ver – версия системы антиспам
  • !antispam help – вывод справки системы антиспам
  • !antispam stat – отображает объем словаря антиспама
  • !antispam test [текст] – проверка скоринга сообщения системы антиспам
  • !antispam on (!antispam enable) – включение системы антиспам
  • !antispam off (!antispam disable) – выключение системы антиспам
  • !antispam status (!antispam config) – вывод настроек системы антиспам в чате
  • !antispam set [опция=значение] (!antispam mod [опция=значение]) – изменение настроек системы антиспам в чате
  •  
  • Опции системы антиспам:
  • spamscore – допустимые значения от 2 до 99 - количество баллов по системе оценки антиспам, за которые последует реакция
    ВНИМАНИЕ! Чем меньше spamscore, тем больше ложнопозитивных срабатываний, рекомендуемое значение 5
  • spamscorefwd – допустимые значения от 2 до 99 - прибавка баллов за пересылаемое сообщение
  • ownforward – значения 1, 0, true, false, on, off – учитывать репост собственных сообщений пользователя
  • ownchatforward – значения 1, 0, true, false, on, off – учитывать репост сообщений из этого же канала
  • daystounban – допустимые значения от 1 до 365 - срок бана за спам, в сутках
  • premiumaffix – значения 1, 0, true, false, on, off – учитывать наличие премиума как негативный фактор (+1 балл)
  • report – значения 1, 0, true, false, on, off – включает/выключает отчеты по блокировкам
  • reportto – идентификатор канала (@channelname) на который отсылать отчеты по блокировкам, по умолчанию в тот же канал
  • reportcopy – значения 1, 0, true, false, on, off – включает/выключает пересылку копии заблокированного сообщения (только если отчеты в другой канал)
  • cleanup – время удаления отчетов о блокировках в минутах
  • solidarity – значения 1, 0, true, false, on, off – включает/выключает режим "солидарности" (см.далее)
  • newjoinsilence – значение в минутах (0 - выкл), время с момента захода на канал, в течение которого запрещены репосты и ссылки считаются как однозначный спам
  • restrictnewjoinmedia – включает/выключает ограничение пользователя на время "знакомства" в правах на отправку любых медиа, за исключением текстовых сообщений
  • restrictblacklisted – включает/выключаент блокировку входящих пользователей по "черному списку"
  • reactions – включает/выключает обнаружение спама реакциями
  • maxreactions – количество допустимых реакций за интервал времени
  • reactionsinterval – интервал времени в секундах, в течение которого аккумулируются реакции пользователя
  • reactonfriends – значения 0/1, off/on, false/true – при выключении, сообщения пользователей, добавленных в список друзей, не проверяются на спам, при включении - если сообщения определяются как спам, они удаляются

Данный пример включает систему Антиспам, пороговое значение баллов для реакции = 5, прибавка баллов за репост = 2, бан за спам на 7 дней, прибавка балла за наличие премиума, отчеты по блокировкам в чате, автоудаление сообщений бота через 3 минуты, режим "солидарности", режим знакомства с гостем на 180 минут, обнаружение спама реакциями с порогами не более 15 реакций за 60 секунд.

«Быстрый» старт


Для запуска бота необходимо обладать правом делегировать права администратора в чате
    Последовательность действий для быстро запуска антиспама в чате
  • Приглашаем\добавляем бота в чат с правами администратора
  • В приватном чате с ботом (в личных сообщениях) набираем команду /start
  • Выбираем в списке доступных чатов нужный вам чат и переходим в настройки антиспама
  • Включаем антиспам – самый первый пункт. С этого момента антиспам стартует с рекомендованными настройками.

    Рекомендации по дополнительной настройке бота
  • в чате можно сразу добавить определенных пользователей в список «друзей», что предоставит им автоматический иммунитет от срабатываний системы антиспам:
      доступные способы:
    1. командой /addfriend ответом на пост нужного вам пользователя в чате
    2. командой /addfriend в чате с указанием uid пользователя (или @username, но при условии что боту ранее попадались сообщения от пользователя) – uid можно подсмотреть в профиле пользователя в desktop версии клиента при включении соответствующей экспериментальной опции в настройках
    3. командой /addfriend в личных сообщениях бота с указанием чата и uid/@username пользователя, например /addfriend @mychat @myfriend
  • рекомендуется подключиться к чату @xzdevru для отслеживания изменений в боте, а так же для оперативной обратной связи

Режим «Солидарности»

– данный режим применим к системе Антиспам

Если в текущем групповом чате включен режим «солидарности», при обнаружении спама бот будет блокировать спамера как в данном чате, так и в других чатах, где бот присутствует, включена система антиспам и включен режим «солидарности».
Если в текущем групповом чате отключена система Антиспам, но включен режим «солидарности», бот при обнаружении спама по усредненной бальной шкале будет помечать потенциального спамера как угрозу и любое последующее сообщение в любом из чатов где присутствует бот, включен антиспам и включен режим солидарности, будет иметь повышенный балл при оценке на спам.

«Списки друзей»

– данные списки определяют привилегированную категорию пользователей чата не имеющих статуса администратора

Списки индивидуальные для каждого чата. На текущий момент пользователи занесенные в список друзей имеют следующие привилегии:
  • Защита от бана при работе системы антимат
  • Защита от бана при работе системы антиспам
  • Доступ к команде !report, которая призывает бота отреагировать на сообщение
    Команды управления списком друзей:
  • !addfriend - можно использовать как ответ на сообщение того, кого хотим добавить в список друзей канала, либо же передав в качестве параметра @username (работает при условии что ранее пользователь оставлял сообщения в присутствии бота)
  • !listfriends - выводит список друзей канала
  • !delfriend - удаляет из списка друзей канала, можно по аналогии с !addfriend можно использовать как ответ на сообщение, либо с указанием @username

Дорожная карта развития бота:

  • Краткосрочные планы:
    • Локализация системы антиспам для аудиторий других стран
    • Опциональное подключение локальных кодировок (языковых таблиц, помимо кириллицы\латиницы)
    • Расширение документации по функционалу
  • Долгосрочные планы:
    • Геораспределенная кластеризация бота для повышения отказоустойчивости
    • Открытие исходных кодов под свободной лицензией

Обратная связь

Чат в телеграме для обратной связи: @xzdevru
  • рекомендации по настройкам, в том числе "под ключ"
  • предложения и пожелания по развитию функционала бота
  • ошибки, недоработки и замечания
  • апелляция пользователей по «черному списку»
  • обмен опытом (для разработчиков)