diff options
Diffstat (limited to 'gajim/common/modules/muc.py')
-rw-r--r-- | gajim/common/modules/muc.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gajim/common/modules/muc.py b/gajim/common/modules/muc.py index 4521cacbd..57c32e1a5 100644 --- a/gajim/common/modules/muc.py +++ b/gajim/common/modules/muc.py @@ -39,6 +39,7 @@ from nbxmpp.structs import DiscoInfo from nbxmpp.structs import MessageProperties from nbxmpp.structs import PresenceProperties from nbxmpp.structs import StanzaHandler +from nbxmpp.structs import VoiceRequest from nbxmpp.task import Task from gi.repository import GLib @@ -149,6 +150,8 @@ class MUC(BaseModule): str, dict[str, MUCPresenceData]] = defaultdict(dict) self._mucs: dict[str, MUCData] = {} self._muc_nicknames = {} + self._voice_requests: dict[ + GroupchatContact, list[VoiceRequest]] = defaultdict(list) def _on_resume_failed(self, _client: types.Client, @@ -808,10 +811,35 @@ class MUC(BaseModule): return room = self._get_contact(properties.jid.bare) + assert isinstance(room, GroupchatContact) + assert properties.voice_request is not None + + self._voice_requests[room].append(properties.voice_request) room.notify('room-voice-request', properties) raise nbxmpp.NodeProcessed + def get_voice_requests(self, + contact: GroupchatContact + ) -> Optional[list[VoiceRequest]]: + + return self._voice_requests.get(contact, []) + + def approve_voice_request(self, + contact: GroupchatContact, + voice_request: VoiceRequest + ) -> None: + + self._voice_requests[contact].remove(voice_request) + self._nbxmpp('MUC').approve_voice_request(contact.jid, voice_request) + + def decline_voice_request(self, + contact: GroupchatContact, + voice_request: VoiceRequest + ) -> None: + + self._voice_requests[contact].remove(voice_request) + def _on_captcha_challenge(self, _con: types.xmppClient, _stanza: Message, |