From 8739318101dd684edd828ec8b7815f3ccb3ebb86 Mon Sep 17 00:00:00 2001 From: Kacper Ziubryniewicz Date: Tue, 30 Oct 2018 22:24:47 +0100 Subject: [PATCH] Sending voice clips --- fbchat/client.py | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/fbchat/client.py b/fbchat/client.py index 8f588ec..3b28f2d 100644 --- a/fbchat/client.py +++ b/fbchat/client.py @@ -1153,7 +1153,7 @@ class Client(object): """ self._sendLocation(location=location, current=False, thread_id=thread_id, thread_type=thread_type) - def _upload(self, files): + def _upload(self, files, voice_clip=False): """ Uploads files to Facebook @@ -1163,7 +1163,12 @@ class Client(object): Returns a list of tuples with a file's ID and mimetype """ file_dict = {'upload_{}'.format(i): f for i, f in enumerate(files)} - j = self._postFile(self.req_url.UPLOAD, files=file_dict, fix_request=True, as_json=True) + + data = { + "voice_clip": voice_clip, + } + + j = self._postFile(self.req_url.UPLOAD, files=file_dict, query=data, fix_request=True, as_json=True) if len(j['payload']['metadata']) != len(files): raise FBchatException("Some files could not be uploaded: {}, {}".format(j, files)) @@ -1207,7 +1212,7 @@ class Client(object): """ Sends local files to a thread - :param file_path: Paths of files to upload and send + :param file_paths: Paths of files to upload and send :param message: Additional message :param thread_id: User/Group ID to send to. See :ref:`intro_threads` :param thread_type: See :ref:`intro_threads` @@ -1220,6 +1225,39 @@ class Client(object): files = self._upload(x) return self._sendFiles(files=files, message=message, thread_id=thread_id, thread_type=thread_type) + def sendRemoteVoiceClips(self, clip_urls, message=None, thread_id=None, thread_type=ThreadType.USER): + """ + Sends voice clips from URLs to a thread + + :param clip_urls: URLs of clips to upload and send + :param message: Additional message + :param thread_id: User/Group ID to send to. See :ref:`intro_threads` + :param thread_type: See :ref:`intro_threads` + :type thread_type: models.ThreadType + :return: :ref:`Message ID ` of the sent files + :raises: FBchatException if request failed + """ + clip_urls = require_list(clip_urls) + files = self._upload(get_files_from_urls(clip_urls), voice_clip=True) + return self._sendFiles(files=files, message=message, thread_id=thread_id, thread_type=thread_type) + + def sendLocalVoiceClips(self, clip_paths, message=None, thread_id=None, thread_type=ThreadType.USER): + """ + Sends local voice clips to a thread + + :param clip_paths: Paths of clips to upload and send + :param message: Additional message + :param thread_id: User/Group ID to send to. See :ref:`intro_threads` + :param thread_type: See :ref:`intro_threads` + :type thread_type: models.ThreadType + :return: :ref:`Message ID ` of the sent files + :raises: FBchatException if request failed + """ + clip_paths = require_list(clip_paths) + with get_files_from_paths(clip_paths) as x: + files = self._upload(x, voice_clip=True) + return self._sendFiles(files=files, message=message, thread_id=thread_id, thread_type=thread_type) + def sendImage(self, image_id, message=None, thread_id=None, thread_type=ThreadType.USER, is_gif=False): """ Deprecated. Use :func:`fbchat.Client._sendFiles` instead