# modbot.py Питоновый бот для помощи с модерацией [Peertube Livechat](https://github.com/JohnXLivingston/peertube-plugin-livechat) В текущем виде предназначен для локального запуска пользователем, желающим осуществлять модерацию. Один запущеный бот таргетит одну комнату чата. ## А что может? - Мьютить(mute) юзера - Анмьютить юзера - Таймаутить юзера (мьют, который снимется сам через заданное время) - Отслеживать, чтобы юзер не обходил мьют сменой ника (да, по дефолту может) - Удалять все сообщения юзера - Банить юзера (сразу вместе с удалением сообщений) - Несколько режимов работы чата - Анмьютнуть всех - Мьютить свежеприбывших неавторизованных юзеров - Замьютить ВСЕХ неавторизованных юзеров - Замьютить вообще всех, кроме модераторов - Рейтлимиты (юзер, отправивший больше Х сообщений за Y секунд будет таймаутнут на Z секунд) - Списки запрещенных слов в сообщениях и никах. ## Планы на будущее Скрипт на питоне - безусловно субоптимальное решение проблемы модерации. Хотелось бы развить это до бота, которого можно было бы держать как сервис на сервере, который автоматически заходил бы во все чаты и помогал поддерживать порядок, имел свои persistent-настройки на каждый чат, и, возможно, имел бы веб-интерфейс. Проблема в том, что при таком масштабе **ГОРАЗДО** более вменяемым решением было бы уже написание своего плагина чата на Peertube, в котором всё было бы *как надо* с самого начала. На что лично у меня пока совершенно нет ни времени, ни сил, ни скилла, ни энтузиазма. Посему бота не планируется развивать как-то капитально - правка багов, существующих и вызванных апдейтами, какой-то функциональный допил по мелочи, по заказу телезрителей, не более. ## Требования - Python 3 - Requests (`python3 -m pip install requests`) Если вы на винде и у вас лапки, то питон [можно достать тут](https://www.python.org/downloads/), бота архивом [скачать здесь](https://inex.dev/lnkr/modbot.py/archive/master.zip), а в папке с ботом есть файл [start_modbot.bat](./modbot/start_modbot.bat), по даблклику на который установятся остальные зависимости и запустится бот. ## Установка Всё необходимое барахло валяется в папке [modbot](./modbot) в этом репозитории. Клонируйте репозиторий `git clone https://inex.dev/lnkr/modbot.py.git` Или скачайте [.zip-архивом](https://inex.dev/lnkr/modbot.py/archive/master.zip) И откройте папку `modbot`. ## Настройка Отредактируйте [settings.py](./modbot/settings.py) (как текстовый файл). - **instance** - сюда вписать домен инстанса Peerture. Без https и слэшей. - **username** и **password** - имя пользователя и пароль от аккаунта на данном инстансе, который послужит ботом. - **room** - здесь UUID комнаты чата [(Где взять UUID комнаты чата???)](./where_to_get_room_uuid.png). Вы можете использовать аккаунт, владеющий правами модератора в выбранной комнате. Это значит, что если вы рядовой юзер, вы можете использовать свой аккаунт в качестве бота в комнате собственного стрима, а если вы модератор инстанса 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` просто так, чтоб не расслаблялся. Удачных стримов!