Initial implementation of on-enter ban
This commit is contained in:
19
README.md
19
README.md
@@ -55,25 +55,6 @@ make
|
||||
помещает этот jid в список изгнанных из комнаты (бан-лист конкретной комнаты, в которой присутствует бот) и выгоняет
|
||||
этого jid-а.
|
||||
|
||||
### В чём тонкость?
|
||||
|
||||
Ровно в том, что для исполнения действия, боту надо заметить presence участника, а presence посылается
|
||||
при изменении состояния клиента. То есть, если jid уже был в комнате на момент захода бота в неё, то его не забанят
|
||||
(во всяком случае моментально). Самый простой способ поместить таких персонажей в бан - просто кикнуть их. Ихний
|
||||
affiliation сменится на none, бот заметит presence и, если jid подпадает под правила чёрного списка, то отправит этот
|
||||
jid в бан.
|
||||
|
||||
Но, простите, ведь "по правилам", при заходе клиента в комнату боту присылается presence всех участников, чтобы он мог
|
||||
построить локальный ростер комнаты и начать отслеживать изменения состояния участников конференции. Почему бы в этот
|
||||
момент не банить злодеев?
|
||||
|
||||
Да, так делать можно, однако пока этого нет. Дело в том, что presence самого себя участнику приходит последним (после
|
||||
presence-ов тех, кто находится в комнате на момент появления в ней бота), и, согласно этому событию, можно считать, что
|
||||
клиент зашёл в комнату успешно и формально *только после этого*, клиент может что-то пытаться делать в этой комнате.
|
||||
Соответственно, чтобы кого-то банить исходя из списка presense-ов, который прилетает на входе, необходимо реализовать
|
||||
"одноразовую" очередь тех, кого имеет смысл забанить и разгрести её "когда будет можно". Эта задача факультативная,
|
||||
возможно, она будет решена потом.
|
||||
|
||||
## Как работает белый список?
|
||||
|
||||
Белый список - это список jid-ов, которых банить нельзя ни при каких обстоятельствах. В нём всегда неявно присутствует
|
||||
|
||||
Reference in New Issue
Block a user