fixed simple merge

This commit is contained in:
ekohilas
2017-10-08 03:32:20 +11:00
5 changed files with 50 additions and 24 deletions

View File

@@ -17,7 +17,7 @@ from .client import *
__copyright__ = 'Copyright 2015 - {} by Taehoon Kim'.format(datetime.now().year) __copyright__ = 'Copyright 2015 - {} by Taehoon Kim'.format(datetime.now().year)
__version__ = '1.0.20' __version__ = '1.0.25'
__license__ = 'BSD' __license__ = 'BSD'
__author__ = 'Taehoon Kim; Moreels Pieter-Jan; Mads Marquart' __author__ = 'Taehoon Kim; Moreels Pieter-Jan; Mads Marquart'
__email__ = 'carpedm20@gmail.com' __email__ = 'carpedm20@gmail.com'

View File

@@ -753,11 +753,12 @@ class Client(object):
return list(reversed([graphql_to_message(message) for message in j['message_thread']['messages']['nodes']])) return list(reversed([graphql_to_message(message) for message in j['message_thread']['messages']['nodes']]))
def fetchThreadList(self, offset=0, limit=20): def fetchThreadList(self, offset=0, limit=20, thread_location=ThreadLocation.INBOX):
"""Get thread list of your facebook account """Get thread list of your facebook account
:param offset: The offset, from where in the list to recieve threads from :param offset: The offset, from where in the list to recieve threads from
:param limit: Max. number of threads to retrieve. Capped at 20 :param limit: Max. number of threads to retrieve. Capped at 20
:param thread_location: models.ThreadLocation: INBOX, PENDING, ARCHIVED or OTHER
:type offset: int :type offset: int
:type limit: int :type limit: int
:return: :class:`models.Thread` objects :return: :class:`models.Thread` objects
@@ -768,10 +769,15 @@ class Client(object):
if limit > 20 or limit < 1: if limit > 20 or limit < 1:
raise FBchatUserError('`limit` should be between 1 and 20') raise FBchatUserError('`limit` should be between 1 and 20')
if thread_location in ThreadLocation:
loc_str = thread_location.value
else:
raise FBchatUserError('"thread_location" must be a value of ThreadLocation')
data = { data = {
'client' : self.client, 'client' : self.client,
'inbox[offset]' : offset, loc_str + '[offset]' : offset,
'inbox[limit]' : limit, loc_str + '[limit]' : limit,
} }
j = self._post(self.req_url.THREADS, data, fix_request=True, as_json=True) j = self._post(self.req_url.THREADS, data, fix_request=True, as_json=True)
@@ -779,6 +785,7 @@ class Client(object):
raise FBchatException('Missing payload: {}, with data: {}'.format(j, data)) raise FBchatException('Missing payload: {}, with data: {}'.format(j, data))
participants = {} participants = {}
if 'participants' in j['payload']:
for p in j['payload']['participants']: for p in j['payload']['participants']:
if p['type'] == 'page': if p['type'] == 'page':
participants[p['fbid']] = Page(p['fbid'], url=p['href'], photo=p['image_src'], name=p['name']) participants[p['fbid']] = Page(p['fbid'], url=p['href'], photo=p['image_src'], name=p['name'])
@@ -967,9 +974,12 @@ class Client(object):
) )
}, fix_request=True, as_json=True) }, fix_request=True, as_json=True)
# Return the image_id # Return the image_id
if not mimetype == 'image/gif':
return j['payload']['metadata'][0]['image_id'] return j['payload']['metadata'][0]['image_id']
else:
return j['payload']['metadata'][0]['gif_id']
def sendImage(self, image_id, message=None, thread_id=None, thread_type=ThreadType.USER): def sendImage(self, image_id, message=None, thread_id=None, thread_type=ThreadType.USER, is_gif=False):
""" """
Sends an already uploaded image to a thread. (Used by :func:`Client.sendRemoteImage` and :func:`Client.sendLocalImage`) Sends an already uploaded image to a thread. (Used by :func:`Client.sendRemoteImage` and :func:`Client.sendLocalImage`)
@@ -977,6 +987,7 @@ class Client(object):
:param message: Additional message :param message: Additional message
:param thread_id: User/Group ID to send to. See :ref:`intro_threads` :param thread_id: User/Group ID to send to. See :ref:`intro_threads`
:param thread_type: See :ref:`intro_threads` :param thread_type: See :ref:`intro_threads`
:param is_gif: if sending GIF, True, else False
:type thread_type: models.ThreadType :type thread_type: models.ThreadType
:return: :ref:`Message ID <intro_message_ids>` of the sent image :return: :ref:`Message ID <intro_message_ids>` of the sent image
:raises: FBchatException if request failed :raises: FBchatException if request failed
@@ -990,7 +1001,10 @@ class Client(object):
data['specific_to_list[0]'] = 'fbid:' + str(thread_id) data['specific_to_list[0]'] = 'fbid:' + str(thread_id)
data['specific_to_list[1]'] = 'fbid:' + str(self.uid) data['specific_to_list[1]'] = 'fbid:' + str(self.uid)
if not is_gif:
data['image_ids[0]'] = image_id data['image_ids[0]'] = image_id
else:
data['gif_ids[0]'] = image_id
return self._doSendRequest(data) return self._doSendRequest(data)
@@ -1008,9 +1022,10 @@ class Client(object):
""" """
thread_id, thread_type = self._getThread(thread_id, thread_type) thread_id, thread_type = self._getThread(thread_id, thread_type)
mimetype = guess_type(image_url)[0] mimetype = guess_type(image_url)[0]
is_gif = (mimetype == 'image/gif')
remote_image = requests.get(image_url).content remote_image = requests.get(image_url).content
image_id = self._uploadImage(image_url, remote_image, mimetype) image_id = self._uploadImage(image_url, remote_image, mimetype)
return self.sendImage(image_id=image_id, message=message, thread_id=thread_id, thread_type=thread_type) return self.sendImage(image_id=image_id, message=message, thread_id=thread_id, thread_type=thread_type, is_gif=is_gif)
def sendLocalImage(self, image_path, message=None, thread_id=None, thread_type=ThreadType.USER): def sendLocalImage(self, image_path, message=None, thread_id=None, thread_type=ThreadType.USER):
""" """
@@ -1026,8 +1041,9 @@ class Client(object):
""" """
thread_id, thread_type = self._getThread(thread_id, thread_type) thread_id, thread_type = self._getThread(thread_id, thread_type)
mimetype = guess_type(image_path)[0] mimetype = guess_type(image_path)[0]
is_gif = (mimetype == 'image/gif')
image_id = self._uploadImage(image_path, open(image_path, 'rb'), mimetype) image_id = self._uploadImage(image_path, open(image_path, 'rb'), mimetype)
return self.sendImage(image_id=image_id, message=message, thread_id=thread_id, thread_type=thread_type) return self.sendImage(image_id=image_id, message=message, thread_id=thread_id, thread_type=thread_type, is_gif=is_gif)
def addUsersToGroup(self, user_ids, thread_id=None): def addUsersToGroup(self, user_ids, thread_id=None):
""" """

View File

@@ -221,6 +221,13 @@ class ThreadType(Enum):
PAGE = 3 PAGE = 3
ROOM = 4 ROOM = 4
class ThreadLocation(Enum):
"""Used to specify where a thread is located (inbox, pending, archived, other)."""
INBOX = 'inbox'
PENDING = 'pending'
ARCHIVED = 'action:archived'
OTHER = 'other'
class TypingStatus(Enum): class TypingStatus(Enum):
"""Used to specify whether the user is typing or has stopped typing""" """Used to specify whether the user is typing or has stopped typing"""
STOPPED = 0 STOPPED = 0

View File

@@ -1,4 +1,4 @@
requests requests
lxml lxml
beautifulsoup4 beautifulsoup4
enum34 enum34; python_version < '3.4'

View File

@@ -4,22 +4,24 @@
""" """
Setup script for fbchat Setup script for fbchat
""" """
import os import os
try: try:
from setuptools import setup from setuptools import setup
except ImportError: except ImportError:
from distutils.core import setup from distutils.core import setup
with open('README.rst') as f: with open('README.rst') as f:
readme_content = f.read().strip() readme_content = f.read().strip()
try: requirements = [
requirements = [line.rstrip('\n') for line in open(os.path.join('fbchat.egg-info', 'requires.txt'))] 'requests',
except IOError: 'lxml',
requirements = [line.rstrip('\n') for line in open('requirements.txt')] 'beautifulsoup4'
]
extras_requirements = {
':python_version < "3.4"': ['enum34']
}
version = None version = None
author = None author = None
@@ -75,6 +77,7 @@ setup(
include_package_data=True, include_package_data=True,
packages=['fbchat'], packages=['fbchat'],
install_requires=requirements, install_requires=requirements,
extras_require=extras_requirements,
url=source, url=source,
version=version, version=version,
zip_safe=True, zip_safe=True,