«Мир вашему дому» или как мы внедряли бота в чатах нашего ЖК

Привет. Меня зовут Рома и почти год назад я стал новосёлом. Но текст этот вовсе не обо мне, а про автоматизацию внутри чатов жилых комплексов.

Когда подходит срок сдачи долёвки, с получением ключей от новенькой квартиры в лифте полупустого дома новосёлов встречают бумажки от инициативных соседей, приглашающих вступить в чат дома или всего жилого комплекса. Только в нашем ЖК, в который входит 5 домов, в одном только телеграме пять чатов на разные тематики. Вот тебе обычный чат, вот чат для сбыта барахла, здесь чат собачников, а вот тут у нас мамочки нашего района и количество всех этих курилок постоянно растет. Но вместе и с аудиторией растет количество конфликтных ситуаций.

Негодование
Негодование

Со временем стало понятно, что чат дома превращается в канализацию для хейта по любому поводу. Люди перестают делиться полезной информацией, помогать друг другу, а чат превращается в стену для гороха.

Кто-то криво паркуется и всем мест у дома не хватает, у кого-то курят по стояку. Даже влага от трубки кондиционера становилась поводом +500 новых сообщений в чате.

«Мир вашему дому» или как мы внедряли бота в чатах нашего ЖК

Понятное дело, что делиться болью - это процесс, в целом, нормальный. Однако, хотелось как-то контролировать жизнь чата, повысить реакцию админов и сделать это место полезнее, чем просто сливная яма плохого настроения соседей. Тем более хотелось привести лексикон к одному знаменателю, чтобы всем было комфортно.

Знали ли мы про существование готовых групповых ботов, которых можно вкинуть в чат? Конечно.

Однако, после некоторого ресерча было выделено некоторое количество проблем, из-за которых не подходил ни один из них, либо нужно было заводить целый зоопарк не всем понятных аккаунтов, за которыми тоже нужен контроль. Решил выделить основные поинты.

Хз что и где он собирает

Не очень хотелось заводить потенциальный логгер для чата. Конечно, шапочки из фольги мы не носим, но не очень бы хотелось залететь в какую-нибудь стрёмную базу для спамеров.

Иногда боты конфликтуют

Это зависит исключительно от рук разработчика, но встречались кейсы, когда один бот затирал сообщения от другого. Повлиять на это никак нельзя и появляется выбор оставить только кого-то одного.

Корявый софт

Ну тут без комментариев.

Прекращается поддержка

Со временем аккаунт перестает реагировать. Возможно, у разработчика больше нет желания тратить свои ресурсы на поддержание своего детища, а может быть он даже не заметил как бот упал и не может подняться. Актуально если вы откопали бот на каком-нибудь очередном рейтинге на просторах интернета.

Много коммерции

Это не совсем та проблема, про которую вы подумали. Денег на хороший продукт не жалко, однако, оплатить не всегда удается из-за ограничений для пользователей из РФ. К примеру, оплатить Combot с карты МИР нельзя.

Время изобретать велосипед

Сейчас уже не знаю почему, но начать было решено с менее инвазивных методов влияния на жильцов. Хотелось дать некоторый совет при вступлении в чат. Для этого написали простую заглушку с текстом, которая отправлялась при вступлении новых соседей. Минимум сложностей, но, кажется, что это не то, ради чего вы открыли этот пост.

Новый виток развития бот получил именно с приходом анти-мат фильтра. Первая версия фичи предполагала какое-то количество подстрок, по которым бот определял есть ли в сообщении нецензурная брань. Всё работало хорошо, ровно до одного дня, когда бот прикончил два сообщения в разных чатах от соседок, которые никогда до этого не грешили. Поднимая историю, выяснилось, что подстроки - это слишком борзо, потому что сообщения были примерно в таком контексте:

… И как мы будем это разгрЕБАТЬ?

Соседка из чата

А второе касалось оплаты ГБР:

… Мы платим 242 руБЛЯ

Ещё одна соседка

Черт. Пришлось извиняться перед соседями и срочно искать пути решения этого неприятного инцидента. Временно сделали «призыв» администратора, если фильтр опять отстрелит, без удаления сообщений. Админ глазками посмотрит и определит. А я тем временем занялся поиском решения этой задачи. Оказалось что великий русский не только могучий, но и абсолютно неуязвимый для автоматизированных проверок, так как модификаций одного только слова на букву «Е», означающее соитие, такое множество, что хватит переписать на них небольшой рассказик Стивена Кинга без потери смысла. В итоге, идеальным решением оказался бы какой-нибудь вариант с ИИ, но решили пойти по-простому. Сделали механику на регулярных выражениях. Она до сих пор остаётся уязвима под некоторые модификации различных слов, но надо постараться, чтобы их найти.

Предупреждения

Первые версии бота мало работали с пользователями, однако, стало понятно, что безответственность - это тоже не круто. Было решено сделать настраиваемые предупреждения для соседей, ибо, с тем, что мы имели до сих пор можно было систематически нарушать правила и ничего пользователю за это не было. Анти-мат фильтр переехал на механику с настраиваемым количеством предупреждений, после которого бот мог либо забанить человека, либо ограничить его активность в чате, либо ничего не делать. Хорошей практикой получилось делать 3 предупреждения + мут на 12 часов. При этом в чат отправляются сообщения с «прогрессом» пользователя.

«Мир вашему дому» или как мы внедряли бота в чатах нашего ЖК

Спам против демократии

Следующим витком было решено сделать механизм антиспама. Сам по себе телеграм имеет такую опцию, но ее реализация предполагает более верхнеуровневый подход, который не применим для нас.

Есть соседи, для которых домовой чат это личный канал, куда копируется контент с тиктока, вотсапа и всяких информационных площадок. Пожелания доброго утра, картинки про яблочный спас, гифки с начала нулевых - не всем нравится такой контент. Было решено реализовать механизм, в котором каждый сосед может пожаловаться на спам, а остальные участники чата с помощью кнопок могут проголосовать является ли сообщение спамом. Очень удачно в эту схему лег ранее реализованный механизм предупреждений.

Spam-голосовалка
Spam-голосовалка

Но не без нюансов.

Очень большое количество жильцов увидели магию чат ботов впервые, и, когда в чате появлялась какая-нибудь новая команда чат превращался в балаган.

Каждый хотел тоже ощутить на себе магическое касание бота, в итоге пришлось делать отсечки на вызов команды. Получилось следующим образом: одну команду нельзя вызывать больше одного раза в промежуток времени 15 минут, в остальное время бот отвечает заглушкой, что делать так нельзя, попробуйте позже.

Удаляем закрепы

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

Вообще я всегда считал закрепы плохим паттерном администрирования чатов. Информация имеет свойство накапливаться и в один прекрасный момент закрепы превращаются в мини-Википедию, которую надо листать минут пять, чтобы дойти до нужного сообщения в чате. Проблем добавляют некоторые токсичные соседи-админы, которые на вопросы отправляют читать закреп. Я попросил так не делать, потому что очень уж это напомнило мне самые душные форумы про linux:

Читайте man'ы прежде чем писать сюда, пожалуйста!!!

каждый второй форумчанин

Я предложил механизм хинтов. Чтобы бот научился запоминать текст сообщений на какой-то набор подстрок. Эту штуку оказалось довольно сложно настроить, нужно правильно подобрать список слов, чтобы хинт отстреливал всегда в нужный момент, но результат не заставил себя ждать.

Телефоны управляющих компаний, контакты аварийки, участкового, детской поликлиники, почта, индекс нашего дома - всё, что только можно стало покрыто автоматизированными хинтами. Участие живого человека, хранителя всех тайн теперь совершенно необязательно.

Хинты
Хинты

Полностью от закреп избавиться не получилось, однако, он заметно похудел. Основная масса информации теперь касалась каких-то коротких по времени вещей, типа голосований и прочего. Все что только возможно - переехало в бота.

Common usability

Стало понятно, что бот наш довольно универсален и мы решили попробовать отдать его на пользование в другой ЖК, откуда я переехал сюда. Было много проблем с настройкой для другой стороны, потому что до этого все изменения я вносил через базу примитивно и допотопно. Для этого пришлось сделать довольно много вещей:

  • Купил домен для размещения Web UI
  • Увезли бот с модели pull на веб-хуки
  • Сверстал на коленке морду с Bootstrap 5
  • Для того, чтобы часть функционала заработала сразу после добавления, вкинул команды для быстрой конфигурации на месте
  • Навесил метрики, мониторинг и алертинг
  • Докинул немного функционала по фильтрации ссылок, чтобы бот был завершенным
  • Сделал стату, чтобы пользователи могли пофаниться за наиболее болтливых участников чата.
Ольга у нас почти всегда на первом месте.
Ольга у нас почти всегда на первом месте.

Что в итоге?

В итоге бот успешно функционирует в нескольких чатах нескольких ЖК, а так же в группе с коллегами с прошлых мест работы. Цикл развития с простой приглашалки админа в чат до состояния швейцарского ножа составил пол года.

«Мир вашему дому» или как мы внедряли бота в чатах нашего ЖК

Большую часть времени было потрачено больше на осознание того, что нужно и как это реализовать.

Вперед, в мир

Последние пару месяцев я закрывал тех долг. Делал так, чтобы убрать привязку бота на чаты определенной тематики и сделать его универсальным, но не совсем получилось. Есть ощущение, что чаты с небольшим количеством человек и более-менее понятным составом не нуждаются в подобном инструменте. Отличными юзкейсами для него являются:

  • Группы для комментариев в каналах
  • Тематические группы с большим количеством участников, но не определенным составом
  • Домовые чаты

Что дальше?

Есть довольно неплохой список идей о том, как и что можно добавить в бота, чтобы он оказался еще более полезным и мне интересно любое мнение. Любые фичереквесты я принимаю в личку и в комментариях под постом.

Пару заключительных слов про название и публикацию.

С фантазией всё не очень, поэтому решено было назвать этого парня просто Momoderator. Аватарку сгенерировал через ИИ (не скажу какой).

11
1 комментарий

Тоже захотелось такого бота сделать, но еще не научился 😁