| ... |
... |
@@ -33,6 +33,7 @@ from nbxmpp.protocol import Message |
|
33
|
33
|
from nbxmpp.protocol import DataForm
|
|
34
|
34
|
from nbxmpp.protocol import DataField
|
|
35
|
35
|
from nbxmpp.protocol import isResultNode
|
|
|
36
|
+from nbxmpp.protocol import NodeProcessed
|
|
36
|
37
|
from nbxmpp.simplexml import Node
|
|
37
|
38
|
from nbxmpp.structs import StanzaHandler
|
|
38
|
39
|
from nbxmpp.const import InviteType
|
| ... |
... |
@@ -301,11 +302,28 @@ class MUC: |
|
301
|
302
|
except KeyError:
|
|
302
|
303
|
return
|
|
303
|
304
|
|
|
304
|
|
- properties.voice_request = VoiceRequest(form=data_form)
|
|
|
305
|
+ nick = data_form['muc#roomnick'].value
|
|
|
306
|
+
|
|
|
307
|
+ try:
|
|
|
308
|
+ jid = JID(data_form['muc#jid'].value)
|
|
|
309
|
+ except Exception:
|
|
|
310
|
+ log.warning('Invalid JID on voice request')
|
|
|
311
|
+ log.warning(stanza)
|
|
|
312
|
+ raise NodeProcessed
|
|
|
313
|
+
|
|
|
314
|
+ properties.voice_request = VoiceRequest(jid=jid,
|
|
|
315
|
+ nick=nick,
|
|
|
316
|
+ form=data_form)
|
|
305
|
317
|
properties.from_muc = True
|
|
306
|
318
|
properties.muc_jid = properties.jid.copy()
|
|
307
|
319
|
properties.muc_jid.setBare()
|
|
308
|
320
|
|
|
|
321
|
+ def approve_voice_request(self, muc_jid, voice_request):
|
|
|
322
|
+ form = voice_request.form
|
|
|
323
|
+ form.type_ = 'submit'
|
|
|
324
|
+ form['muc#request_allow'].value = True
|
|
|
325
|
+ self._client.send(Message(to=muc_jid, payload=form))
|
|
|
326
|
+
|
|
309
|
327
|
@call_on_response('_affiliation_received')
|
|
310
|
328
|
def get_affiliation(self, jid, affiliation):
|
|
311
|
329
|
iq = Iq(typ='get', to=jid, queryNS=NS_MUC_ADMIN)
|