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)
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')