modbot.py/README_RU.md

11 KiB
Raw Permalink Blame History

modbot.py

Питоновый бот для помощи с модерацией Peertube Livechat

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

А что может?

  • Мьютить(mute) юзера
  • Анмьютить юзера
  • Таймаутить юзера (мьют, который снимется сам через заданное время)
  • Отслеживать, чтобы юзер не обходил мьют сменой ника (да, по дефолту может)
  • Удалять все сообщения юзера
  • Банить юзера (сразу вместе с удалением сообщений)
  • Несколько режимов работы чата
    • Анмьютнуть всех
    • Мьютить свежеприбывших неавторизованных юзеров
    • Замьютить ВСЕХ неавторизованных юзеров
    • Замьютить вообще всех, кроме модераторов
  • Рейтлимиты (юзер, отправивший больше Х сообщений за Y секунд будет таймаутнут на Z секунд)
  • Списки запрещенных слов в сообщениях и никах.

Планы на будущее

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

Проблема в том, что при таком масштабе ГОРАЗДО более вменяемым решением было бы уже написание своего плагина чата на Peertube, в котором всё было бы как надо с самого начала. На что лично у меня пока совершенно нет ни времени, ни сил, ни скилла, ни энтузиазма.

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

Требования

  • Python 3
  • Requests (python3 -m pip install requests)

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

Установка

Всё необходимое барахло валяется в папке modbot в этом репозитории.

Клонируйте репозиторий git clone https://inex.dev/lnkr/modbot.py.git

Или скачайте .zip-архивом

И откройте папку modbot.

Настройка

Отредактируйте settings.py (как текстовый файл).

  • instance - сюда вписать домен инстанса Peerture. Без https и слэшей.
  • username и password - имя пользователя и пароль от аккаунта на данном инстансе, который послужит ботом.
  • room - здесь UUID комнаты чата (Где взять UUID комнаты чата???).

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

Необязательные настройки там же:

  • timeout_default - на сколько секунд будет затаймаучен юзер, если была введена команда !timeout без указания времени.
  • ratelimit_timewindow - временное окно для измерения рейтлимитов
  • ratelimit_maxmessages - сколько сообщений может отправить юзер в пределах временного окна
  • ratelimit_timeout - на сколько секунд будет замьючен юзер, отправивший больше.

Впишите слова, заблокированные в никнеймах, в файле bannedusernames.txt, и заблокированные в чате - в файле bannedwords.txt. По одному слову на строку. Эти файлы можно изменять в процессе работы бота - обновления подтянутся и применятся автоматически.

Запуск

cd modbot
python3 modbot.py

Или даблклик по start_modbot.bat, если вы почётный пользователь виндовсов.

Если всё введено правильно, то в чате стрима вы увидите "[ModBot]: Online!" - на этом этапе бот успешно подключен к комнате.

Команды

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

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

!help - вывод короткой справки по командам.

!users - вывести список пользователей.

Список пользователей выводится в следующем формате:

USERID) [name] (jid, role, affiliation)

Например:

13) [lnkr] (lnkr@xxivproduction.video, moderator, owner)

Здесь: 
- USERID: 13
- Ник: lnkr
- jid: lnkr@xxivproduction.video
- роль: moderator
- принадлежность: owner

!usersall - вывести список всех замеченных пользователей, включая ушедших.

!mute USERID - замьютить юзера по его USERID

!unmute USERID - размьютить юзера

!timeout USERID X - замьютить юзера на X секунд

!wipe USERID - удалить сообщения юзера

!ban USERID - забанить юзера и удалить его сообщения

!ratelimits M W S - переписать рейтлимиты: разрешить одному пользователю до M сообщений за W секунд, иначе замьютить его на S секунд

Команды переключения режимов "осады"

!mode 0 - снять со всех мьют

!mode 1 - автоматически мьютить незарегистрированных пользователей, которые зашли после этой команды

!mode 2 - замьютить всех существующих и будущих незарегистрированных пользователей

!mode 3 - мьютить всех, кроме модераторов (также известна как !shutup)

Что выводится в консоли и где ещё мне быстро брать USERID?

Отличный вопрос! Рассмотрим демонстрационное содержимое окна консоли с ботом:

[04:32:47] (2|Собеседник|sobjisnvbudwdt1c@anon.xxivproduction.video|x1) Я веду общение
[04:32:55] (2|Собеседник|sobjisnvbudwdt1c@anon.xxivproduction.video|x2) Продолжаю вести общение, проверяй.
[04:33:30] (3|Собутыльник|xwvlahsevyq-73x-@anon.xxivproduction.video|x1) И я!
[04:33:32] (3|Собутыльник|xwvlahsevyq-73x-@anon.xxivproduction.video|x2) Я тоже веду общение!
[04:33:43] (2|Собеседник|sobjisnvbudwdt1c@anon.xxivproduction.video|x1) Мудак ты, Петя, а не общение ведёшь!

В окне с ботом выводится чат: информация о пользователе, и фрагмент его сообщения, в формате

[ВРЕМЯ] (USERID|USERNAME|JID|xCMN) ТЕКСТ

Присмотримся повнимательнее, что тут где:

[04:32:47] (2|Собеседник|sobjisnvbudwdt1c@anon.xxivproduction.video|x1) Я веду общение

  • [04:32:47] - время
  • 2 - USERID
  • Собеседник - никнейм
  • sobjisnvbudwdt1c@anon.xxivproduction.video - jid
  • x1 - количество отправленных друг за другом сообщений пользователя
  • Я веду общение - Сообщение или его фрагмент

Глядя на такие логи, можно быстро прикинуть, что одному абоненту можно прописать !ban 2 за оскорбления (что заодно вычистит его сообщения), а второму - !timeout 3 30 просто так, чтоб не расслаблялся.

Удачных стримов!