127 lines
8.5 KiB
Markdown
127 lines
8.5 KiB
Markdown
# modbot.py
|
||
|
||
Питоновый бот для помощи с модерацией [Peertube Livechat](https://github.com/JohnXLivingston/peertube-plugin-livechat)
|
||
|
||
## А что может?
|
||
- Мьютить(mute) юзера
|
||
- Анмьютить юзера
|
||
- Таймаутить юзера (мьют, который снимется сам через заданное время)
|
||
- Отслеживать, чтобы юзер не обходил мьют сменой ника (да, по дефолту может)
|
||
- Удалять все сообщения юзера
|
||
- Банить юзера (сразу вместе с удалением сообщений)
|
||
- Несколько режимов работы чата
|
||
- Анмьютнуть всех
|
||
- Мьютить свежеприбывших неавторизованных юзеров
|
||
- Замьютить ВСЕХ неавторизованных юзеров
|
||
- Замьютить вообще всех, кроме модераторов
|
||
- Рейтлимиты (юзер, отправивший больше Х сообщений за Y секунд будет таймаутнут на Z секунд)
|
||
- Списки запрещенных слов в сообщениях и никах.
|
||
|
||
## Требования
|
||
|
||
- 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](./start_modbot.bat), по даблклику на который установятся остальные зависимости и запустится бот.
|
||
|
||
## Настройка
|
||
|
||
Отредактируйте [settings.py](./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` просто так, чтоб не расслаблялся |