Ejemplo n.º 1
0
    def message_received(self, msg):
        """Handle all messages; overrides CommandHandlerMixin."""
        logging.debug('%s said "%s"', msg.sender, msg.body)

        match = re.match(r'^([^/]+)(/.*)?$', msg.sender)
        if not match:
            msg.reply('* Hey, you\'re using a weird JID!')
            return
        self.person = Person.PersonByEmail(match.group(1))
        if not self.person:
            msg.reply('* Sorry, who are you?')
            return

        super(XmppController, self).message_received(msg)
Ejemplo n.º 2
0
    def Broadcast(self):
        channel = Channel.ChannelByName(self.request.get('channel'),
                                        create=False)
        if not channel: return  # channel became empty?
        message = self.request.get('message')
        skip_person = self.request.get('skip')
        if skip_person:
            skip_person = Person.PersonByEmail(skip_person)

        q = Person.all().filter('channel =', channel).order('__key__')
        start_at = self.request.get('start_at')
        if start_at:
            q.filter('__key__ >', db.Key(start_at))
        people = q.fetch(self._BROADCAST_BATCH)
        jids = []
        for p in people:
            if skip_person == p:
                continue
            jids.append(p.jid())
        if not jids:
            return
        try:
            xmpp.send_message(jids, message)
        except xmpp.InvalidJidError:
            logging.error('InvalidJidError caught. JIDs were [%s]',
                          ', '.join(['"%s"' % x for x in jids]))
            raise

        # Add a task for the next batch.
        params = {
            'channel': channel.name,
            'message': message,
            'start_at': str(people[-1].key()),
        }
        if skip_person:
            params['skip'] = skip_person.jid()
        taskqueue.Task(url='/task/broadcast', params=params).add('chats')