From c5b81183f094b9a65688aa46462ace25157197f0 Mon Sep 17 00:00:00 2001 From: gitCommitWiL <43019766+gitCommitWiL@users.noreply.github.com> Date: Mon, 6 Apr 2020 11:06:36 -0400 Subject: [PATCH] Added way to send url previews sendUri(link, message) will send the preview for link below the message in chat --- fbchat/_client.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ fbchat/_state.py | 7 +++++++ 2 files changed, 53 insertions(+) diff --git a/fbchat/_client.py b/fbchat/_client.py index fc856058..b63dc19c 100644 --- a/fbchat/_client.py +++ b/fbchat/_client.py @@ -1066,6 +1066,52 @@ def sendMessage(self, message, thread_id=None, thread_type=ThreadType.USER): Message(text=message), thread_id=thread_id, thread_type=thread_type ) + def sendUri(self, uri, message=None, thread_id=None, thread_type=ThreadType.USER): + """Send a uri preview to a thread. + + Args: + uri: uri to preview + message (Message): Message to send + thread_id: User/Group ID to send to. See :ref:`intro_threads` + thread_type (ThreadType): See :ref:`intro_threads` + + Returns: + :ref:`Message ID ` of the sent message + + Raises: + FBchatException: If request failed + """ + + urlData = self._state._uri_share_data({"uri": uri}) + thread_id, thread_type = self._getThread(thread_id, thread_type) + thread = thread_type._to_class()(thread_id) + data = thread._to_send_data() + if message is not None: + data.update(message._to_send_data()) + data["action_type"] = "ma-type:user-generated-message" + data["shareable_attachment[share_type]"] = urlData["share_type"] + # most uri params will come back as dict + if isinstance(urlData["share_params"], dict): + data["has_attachment"] = True + for key in urlData["share_params"]: + if isinstance(urlData["share_params"][key], dict): + for key2 in urlData["share_params"][key]: + data[ + "shareable_attachment[share_params][{}][{}]".format( + key, key2 + ) + ] = urlData["share_params"][key][key2] + else: + data[ + "shareable_attachment[share_params][{}]".format(key) + ] = urlData["share_params"][key] + # some (such as facebook profile pages) will just be a list + else: + data["has_attachment"] = False + for index, val in enumerate(urlData["share_params"]): + data["shareable_attachment[share_params][{}]".format(index)] = val + return self._doSendRequest(data) + def sendEmoji( self, emoji=None, diff --git a/fbchat/_state.py b/fbchat/_state.py index a20e4f23..2bd95d90 100644 --- a/fbchat/_state.py +++ b/fbchat/_state.py @@ -329,3 +329,10 @@ def _do_send_request(self, data): "Error when sending message: " "No message IDs could be found: {}".format(j) ) + + def _uri_share_data(self, data): + data["image_height"] = 960 + data["image_width"] = 960 + data["__user"] = self.user_id + j = self._post("/message_share_attachment/fromURI/", data) + return j["payload"]["share_data"]