ПРИМЕЧАНИЕ: хотел бы упомянуть об этом тем, кто хочет делать то, что упоминается в этой теме. Если человек не знаком с протоколом XMPP и строфами, он может пропустить некоторую необходимую информацию, чтобы установить надлежащий статус. Документы модуля xmpppy, по-видимому, явно не поясняют шаги для установки присутствия.
Установка начального присутствия является самой легкой, как показано в предыдущих сообщениях в этой теме. Он устанавливает присутствие (тип) пользователя по умолчанию. Не уверен, что по умолчанию "status" и "show" состояния, предположим, пустым или "available".
Однако при установке нового статуса путем определения нового объекта присутствия для отправки статуса, если вы инициализируете объект значениями по умолчанию (без аргументов), как в исходном сообщении, отправляемый объект присутствия (или раздел) будет неполным, поскольку это не определяет правильное присутствие "тип". Поэтому в зависимости от того, с каким XMPP-сервером вы работаете, он может или не может правильно принять настройку.
Правильный способ инициализации нового объекта состояния присутствия будет выглядеть так:
offPres = xmpp.Presence(typ='unavailable',show='unavailable',status='unavailable')
или просто просто следующее, если переключаться между «доступно / онлайн» и «недоступно / автономно» без входа в систему и отключения сеанса XMPP IM, где нам все равно, что показывается для статуса / состояния показа (т.е. метка, которую вы видите связанной со статусом, например, «Offline - away» против «offline»).
offPres = xmpp.Presence(typ='unavailable')
Для пользовательских состояний, таких как DND, Away, Out to Lunch и т. Д., Это немного сложнее. Я сам не очень знаком с XMPP, но предполагаю, что вы указали бы статус и показывали бы значение состояния как таковое (например, DND, Away), устанавливая тип присутствия как «доступный» или «недоступный», в зависимости от того, хотите ли вы отображаться таким образом или нет.
А на основе документов xmpppy вы можете указать только тип присутствия при инициализации объекта, но не можете изменить его впоследствии. Но вы можете изменить статус и показать состояния для объекта присутствия после инициализации. Это сделано, как показано в оригинальном сообщении здесь. Для показа состояния существует соответствующий setShow метод, такой же как setStatus .
Отправка присутствия такая же, как в оригинальном сообщении.