Skip to content

eleksir/buny-jabber-bot

Repository files navigation

Buny Jabber Bot

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

Что он может?

  • Имеет возможность соединяться с сервером по протоколу xmpp как с шифрованием, так и без. (Пока что) Шифрование работает по классическим механикам (шифрованный канал связи, без возможности коммуникации в незашифрованном виде), без поддержки механизма start tls. (Что-то в гошке или на стороне сервера при выборе StartTLS не работает.)
  • Имеет возможность заносить пользователей в бан-лист, согласно заданным в чёрном списке правилам:
    • По совпадению с регулярными выражениями в nick-е или jid-е злодея
    • По регулярным выражениям характерных фраз.
    • Правила можно настроить как глобально, для всех комнат, где присутствует бот, так и для каждой комнаты отдельно.
    • При изменении списка правил бота не надо перезапускать, достаточно отдать ему команду rehash либо в приват, либо прям в чатике.
  • Есть настройка заходить в разные комнаты под разными никами.

Что он не может?

  • Не может заходить в комнаты, защищённые паролем.
  • Не умеет разгадывать капчу.

Предполагается, что если на комнату навешен пароль, то такой бот там не нужен, а капча защищает от злодеев на 100%, иначе её навешивать бесполезно.

Как заставить его работать?

Технически, бот собирается гошкой 1.21 под платформу linux. Работоспособность на других платформах не тестировалась.

Чтобы получить готовые бинарники, достаточно выполнить команду:

make

в итоге получится бинарник buny-jabber-bot, которому нужен конфиг data/config.json, whitelist.json и blacklist.json для работы.

В файлах data/blacklist.json и data/whitelist.json находятся списки злодеев и списки проверенных пользователей.

Замечание

Очевидным образом в комнате банить может только админ. Поэтому боту придётся выдать админские права. А комнату сделать не анонимной (то есть, чтобы как минимум админы могли видеть реальный jid, потому что в бан отправляется именно он).

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

Как работает бан?

Никакой магии, всё по стандарту, согласно xep-0045.

Серверу направляется команда изменения участия (affiliation) зашедшего jid-а и задаётся значение outcast, на что сервер помещает этот jid в список изгнанных из комнаты (бан-лист конкретной комнаты, в которой присутствует бот) и выгоняет этого jid-а.

Как работает белый список?

Белый список - это список jid-ов, которых банить нельзя ни при каких обстоятельствах. В нём всегда неявно присутствует сам бот.

Можно ли почистить ban-list?

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

И если вдруг произошло так, что в бан попали все админы комнаты, то...

Во-первых, давать овнера боту не надо ни при каких обстоятельствах.

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

Дисклеймер

Весь дисклеймер в файле LICENSE.txt :)

Благодарности

Во-первых, сообществу, без него не было бы чятиков.

Во-вторых, batman46(new) из конференций на jabber.ru, за наблюдения и за некоторые идеи, воплощённые в этом боте.

В-третьих, U2 из конференции radio@conference.jabber.ru за мысли, идеи и за позитивный настрой.