def receive(self, data): self.raw_receive(data) logger.debug('received raw SMS message text "%s" from %s' % (self.raw_body, self.raw_phone_number)) if not AreaCode.validate_phone_number(self.raw_phone_number): raise SmircOutOfAreaException('disregarding message from outside of SMIRC service area (%s)' % (self.raw_phone_number)) if self.raw_body is None: raise SmircMessageException('disregarding null message') self.raw_body = self.raw_body.strip() if self.raw_body == '': raise SmircMessageException('disregarding empty message') try: user = UserProfile.load_user(self.raw_phone_number) self.command = SmircCommand.handle(user, self.raw_body) except User.DoesNotExist: user = None self.command = SmircCommand.handle(self.raw_phone_number, self.raw_body) if self.command: return if user is None: raise SmircMessageException('unknown sender %s. Maybe you are not registered? Please see www.smirc.com for help registering.' % (self.raw_phone_number)) conversation_match = re.match('^@(\S*)\s*(.*)', self.raw_body) if conversation_match: conversation_identifier = conversation_match.group(1) self.body = conversation_match.group(2) try: self.sender = Membership.load_membership(user, conversation_identifier) except Membership.DoesNotExist: raise SmircMessageException('you are not involved in a conversation named %s' % (conversation_identifier)) else: self.body = self.raw_body try: self.sender = Membership.objects.filter(user__id__exact=user.id).order_by('last_active').reverse()[0] except IndexError: raise SmircMessageException('you did not target a conversation, and you have no last-active (default) conversation') logger.debug('message body = "%s", target conversation = "%s" (id:%d), sender = "%s" (id:%d)' % (self.body, self.sender.conversation.name, self.sender.conversation.id, self.sender.user.username, self.sender.user.id))