Пример #1
0
    def fill_user_details(self, user: ChatUser):
        try:
            url = "https://graph.facebook.com/v2.6/" + user.raw_user_id
            params = {
                'fields':
                'first_name,last_name,profile_pic,picture.type(normal),locale,timezone,gender',
                'access_token':
                None  # TODO: self.get_page(user.conversation.meta.get('page_id')).token
            }
            res = requests.get(url, params=params)
            if not res.status_code == requests.codes.ok:
                logging.error(
                    "ERROR: Loading FB profile, got response: {}".format(
                        res.text))
                return

            response = res.json()

            image_url = response.get("picture", {}).get('data', {}).get('url')
            user.save_image(image_url, extension='.jpeg')
            user.first_name = response.get("first_name")
            user.last_name = response.get("last_name")
            user.locale = response.get("locale")
            # user.conversation.name = '{} {}'.format(user.first_name, user.last_name)
        except:
            logging.error('Unexpected error loading FB user profile')
Пример #2
0
def conversation():
    user = ChatUser()
    user.user_id = -1
    user.save()

    conversation = ChatConversation()
    conversation.interface_name = 'test'
    conversation.conversation_id = -1
    conversation.save()
    yield conversation
Пример #3
0
 def setUp(self, monkeypatch):
     self.message = ChatMessage()
     self.message.type = ChatMessage.MESSAGE
     self.message.text = "Hello, world!"
     self.message.conversation = ChatConversation()
     self.message.time = time.time()
     self.message.user = ChatUser()
     self.message.is_user = True
     self.message.message_id = 105
     self.dialog = MessageProcessor(chat_manager=None, message=self.message)
Пример #4
0
    def accept_with_entities(self, raw_message, entities):
        with transaction.atomic():
            try:
                conversation = ChatConversation.objects.select_for_update(
                ).get(interface_name=raw_message.interface.name,
                      raw_conversation_id=raw_message.raw_conversation_id)
            except ObjectDoesNotExist:
                conversation = ChatConversation()
                conversation.interface_name = raw_message.interface.name
                conversation.raw_conversation_id = raw_message.raw_conversation_id
                conversation.meta = raw_message.conversation_meta
                raw_message.interface.fill_conversation_details(conversation)
                # Save and read instance from database to acquire lock
                conversation.save()
                logging.info("Created new conversation: %s",
                             conversation.__dict__)
                conversation = ChatConversation.objects.select_for_update(
                ).get(pk=conversation.conversation_id)

            conversation.last_message_time = timezone.now()

            try:
                user = ChatUser.objects.get(
                    raw_user_id=raw_message.raw_user_id)
            except ObjectDoesNotExist:
                user = ChatUser()
                user.raw_user_id = raw_message.raw_user_id
                # Save user before filling details so that image field can be saved
                user.save()
                # TODO: also update details of existing users every once in a while
                raw_message.interface.fill_user_details(user)
                logging.info("Created new user: %s", user.__dict__)
                user.save()
                user.conversations.add(conversation)
                user.save()
                conversation.save()

            message = ChatMessage()
            message.conversation = conversation
            message.user = user
            message.type = raw_message.type
            message.text = raw_message.text
            message.time = make_aware(
                datetime.fromtimestamp(raw_message.timestamp))
            message.is_user = True
            message.entities = entities

            self._process(message)
def message():
    message = ChatMessage()
    message.type = ChatMessage.MESSAGE
    message.text = "Hello, world!"
    message.conversation = ChatConversation()
    message.time = time.time()
    message.user = ChatUser()
    message.is_user = True
    message.message_id = 105
    message.entities = {}
    return message
Пример #6
0
    def fill_user_details(self, user: ChatUser):
        try:
            url = FB_API_URL + "/" + user.raw_user_id
            url += "?fields=" + self.profile_fields
            page = self._get_page_for_user(user)
            if not page:
                logging.warn(
                    "Can't retrieve user details, no associated FB page")
                return
            url += "&access_token=" + str(page.token)
            res = requests.get(url)  # don't use params, encoding issues
            if res.status_code != requests.codes.ok:
                logging.error(
                    "ERROR: Loading FB profile, got response: {}".format(
                        res.text))
                return

            response = res.json()

            # basic user information
            image_url = response.get("profile_pic")
            user.save_image(image_url, extension='.jpeg')
            user.first_name = response.get("first_name")
            user.last_name = response.get("last_name")
            user.locale = response.get("locale")  # needs permission

            # optional fields (also need permission)
            profile = {}
            profile['gender'] = response.get("gender")
            profile['timezone'] = response.get("timezone")
            user.profile = profile
            # user.conversation.name = '{} {}'.format(user.first_name, user.last_name)
        except Exception:
            logging.exception('Unexpected error loading FB user profile')
Пример #7
0
    def __init__(self):

        self.message = ChatMessage()
        self.sender = ChatUser()
        self.conversation = ChatConversation()
        self.conversation.conversation_id = 1
        self.conversation.save()
        self.chat_manager = ChatManager()
        self.context = Context.load({})
        self.logging_service = Mock()

        self.sent = []
        self.schedules = []
        self.inactive_callbacks = []
Пример #8
0
    def test_user_details(self, interface, monkeypatch):
        user = ChatUser()
        conversation = ChatConversation()
        conversation.meta = {"page_id": self.page['PAGE_ID']}
        user.save()
        conversation.save()
        user.conversations.add(conversation)
        user.save()
        conversation.save()

        mock_response = Mock()
        mock_response.status_code = 200
        mock_response.json = lambda: {"first_name": "foo", "last_name": "bar"}
        monkeypatch.setattr("requests.get", lambda x: mock_response)
        interface.fill_user_details(user)
        assert user.first_name == 'foo' and user.last_name == 'bar'