hubot-genesys-cloud
Version:
Genesys Cloud adapter for Hubot
98 lines (69 loc) • 3.23 kB
text/coffeescript
Controller = require './framework/Controller.coffee'
module.exports = class GroupController extends Controller
: ['rosterItem']
:
getGroups: (callback) ->
.debug 'groups', 'getGroups called'
if then return callback null,
unless
= true
else
.debug 'groups', 'waiting for groups'
'groups', =>
.debug 'groups', 'returning groups',
callback null,
:
ignoredResult: (stanza) -> stanza.is('iq') and stanza.attrs.type is 'result' and stanza.attrs.id in ['focusSet', 'focusSub']
groupsResult: (stanza) -> stanza.is('iq') and stanza.getChildByAttr('node', "orgspan:groups", null, true)? and stanza.attrs.type is 'result'
groupMessage: (stanza) -> stanza.is('message') and stanza.getChild('event', "http://jabber.org/protocol/pubsub#event")?.getChild('items')?.attrs.node is "orgspan:groups"
constructor: ->
super
.on 'disconnect', => = null
.on 'connect', =>
unless then return
ignoredResult: (stanza) ->
groupsResult: (stanza) ->
= {}
.debug 'group', 'groupsResult', stanza.toString()
items = stanza.getChildByAttr('node', "orgspan:groups", null, true)
for item in items.getChildren('item')
item = item.getChild('group')
{name, jid} = item.attrs
[item.attrs.jid] = item.attrs
if item.attrs.autojoin then .joinRoom item.attrs.jid
'rosterItem', {name, jid, section:'groups', type:'room', event:'add'}
'groups'
groupMessage: (stanza) ->
.debug 'group', 'groupsMessage', stanza.toString()
items = stanza.getChildByAttr('node', "orgspan:groups", null, true)
for child in items.children
unless child.name in ['item', 'retract'] then continue
if child.name is 'item'
item = child.getChild('group')
{name, jid} = item.attrs
[item.attrs.jid] = {name:item.attrs.name, jid:item.attrs.jid}
.joinRoom item.attrs.jid
'rosterItem', {name, jid, section:'groups', type:'room', event:'add'}
else
.debug 'group', 'removing group', child.attrs.id
jid = child.attrs.id+"@conference."+.jid.domain
group = [jid]
unless group
return
delete [jid]
'rosterItem', {name:group, jid, section:'groups', type:'room', event:'remove'}
'groups'
_sendRequest: ->
unless .connected then return .once 'connected', =>
if .features['orgspan:groups'] and !.discovered then return
.debug 'group', 'sending group subscription'
iq = new ltx.Element 'iq', type:'set', from:.jid.toString(), to:"pubsub.#{@realtime.jid.domain}", id:'groupSub'
iq.c('pubsub', xmlns:'http://jabber.org/protocol/pubsub')
.c('subscribe', node:'orgspan:groups', jid:.jid.toString())
.send iq
.debug 'group', 'sending group request'
iq = new ltx.Element 'iq', from:.jid.toString(), type:'get'
iq.c('pubsub', xmlns:'http://jabber.org/protocol/pubsub').c('items', node:'orgspan:groups')
.send iq