modbot.py/README_RU.md

148 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` просто так, чтоб не расслаблялся.
Удачных стримов!