Initial implementation of on-enter ban

This commit is contained in:
eleksir
2023-09-02 10:22:39 -07:00
parent 0e9fa089c0
commit 59b92f450d
6 changed files with 115 additions and 26 deletions

View File

@@ -55,25 +55,6 @@ make
помещает этот jid в список изгнанных из комнаты (бан-лист конкретной комнаты, в которой присутствует бот) и выгоняет
этого jid-а.
### В чём тонкость?
Ровно в том, что для исполнения действия, боту надо заметить presence участника, а presence посылается
при изменении состояния клиента. То есть, если jid уже был в комнате на момент захода бота в неё, то его не забанят
(во всяком случае моментально). Самый простой способ поместить таких персонажей в бан - просто кикнуть их. Ихний
affiliation сменится на none, бот заметит presence и, если jid подпадает под правила чёрного списка, то отправит этот
jid в бан.
Но, простите, ведь "по правилам", при заходе клиента в комнату боту присылается presence всех участников, чтобы он мог
построить локальный ростер комнаты и начать отслеживать изменения состояния участников конференции. Почему бы в этот
момент не банить злодеев?
Да, так делать можно, однако пока этого нет. Дело в том, что presence самого себя участнику приходит последним (после
presence-ов тех, кто находится в комнате на момент появления в ней бота), и, согласно этому событию, можно считать, что
клиент зашёл в комнату успешно и формально *только после этого*, клиент может что-то пытаться делать в этой комнате.
Соответственно, чтобы кого-то банить исходя из списка presense-ов, который прилетает на входе, необходимо реализовать
"одноразовую" очередь тех, кого имеет смысл забанить и разгрести её "когда будет можно". Эта задача факультативная,
возможно, она будет решена потом.
## Как работает белый список?
Белый список - это список jid-ов, которых банить нельзя ни при каких обстоятельствах. В нём всегда неявно присутствует