コード例 #1
0
ファイル: models.py プロジェクト: rbroemeling/SMIRC
	def execute(self):
		"""Join a chat conversation that you have been invited to.

		/JOIN [user who invited you] in [conversation you are invited to]
		
		Example: /JOIN Foo in Bar
		Take the user "Foo" up on their invitation and join them in the
		conversation "Bar".
		"""
		try:
			invitation = Invitation.objects.get(invitee=self.executor, inviter=self.arguments['user'], conversation__name__iexact=self.arguments['conversation_identifier'])
		except Invitation.DoesNotExist:
			raise SmircCommandException('you do not have an outstanding invitation from %s to the conversation "%s"' % (self.arguments['user'].username, self.arguments['conversation_identifier']))
		
		try:
			Membership.load_membership(self.executor, invitation.conversation)
		except Membership.DoesNotExist:
			pass
		else:
			raise SmircCommandException('you are already in the conversation "%s"', invitation.conversation.name)

		try:
			Membership.load_membership(self.executor, invitation.conversation.name)
		except Membership.DoesNotExist:
			pass
		else:
			raise SmircCommandException('you are already in a different conversation named "%s"')
		
		m = Membership()
		m.conversation = invitation.conversation
		m.user = self.executor
		m.save()
		invitation.delete()
		return 'you have joined the conversation named "%s"' % (m.conversation.name)
コード例 #2
0
ファイル: models.py プロジェクト: rbroemeling/SMIRC
	def execute(self):
		"""Create a new SMIRC conversation.  Executor automatically joins
		the created conversation and is given operator permissions in it.
		
		/CREATE [conversation name]
		
		Example: /CREATE HelloWorld
		Creates a new SMIRC conversation called "HelloWorld" and automatically
		joins the executing user to it with full operator permissions.
		"""
		try:
			Conversation.validate_name(self.arguments['conversation_identifier'])
		except SmircRestrictedNameException as e:
			raise SmircCommandException(str(e))

		try:
			m = Membership.load_membership(self.executor, self.arguments['conversation_identifier'])
		except Membership.DoesNotExist:
			c = Conversation()
			c.name = self.arguments['conversation_identifier']
			c.save()
			m = Membership()
			m.conversation = c
			m.mode_operator = True
			m.user = self.executor
			m.save()
			return 'you have created a conversation named "%s"' % (c.name)
		else:
			raise SmircCommandException('you are already taking part in a conversation named "%s"' % (m.conversation.name))
コード例 #3
0
ファイル: models.py プロジェクト: rbroemeling/SMIRC
	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))