From d6571a95cb35563a4b88fcc57a8f4aa3b58ab071 Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Thu, 11 Nov 2021 15:13:58 -0600 Subject: [PATCH] Quote tweets properly according to Twitter's API V2 docs --- src/controller/buffers/twitter/base.py | 4 ++-- src/sessions/twitter/session.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/controller/buffers/twitter/base.py b/src/controller/buffers/twitter/base.py index 1d81a604..3ad5b77c 100644 --- a/src/controller/buffers/twitter/base.py +++ b/src/controller/buffers/twitter/base.py @@ -459,11 +459,11 @@ class BaseBuffer(base.Buffer): retweet = messages.tweet(session=self.session, title=_("Quote"), caption=_("Add your comment to the tweet"), max=256, thread_mode=False) if retweet.message.ShowModal() == widgetUtils.OK: text = retweet.message.text.GetValue() - text = text+" https://twitter.com/{0}/status/{1}".format(self.session.get_user(tweet.user).screen_name, id) tweet_data = dict(text=text, attachments=retweet.attachments, poll_period=retweet.poll_period, poll_options=retweet.poll_options) + tweet_data.update(quote_tweet_id=id) call_threaded(self.session.send_tweet, *[tweet_data]) if hasattr(retweet.message, "destroy"): - retweet.message.destroy() + retweet.message.Destroy() def _direct_retweet(self, id): item = self.session.api_call(call_name="retweet", _sound="retweet_send.ogg", id=id) diff --git a/src/sessions/twitter/session.py b/src/sessions/twitter/session.py index 1b985c9c..a311ab42 100644 --- a/src/sessions/twitter/session.py +++ b/src/sessions/twitter/session.py @@ -620,8 +620,9 @@ class Session(base.baseSession): """ Convenience function to send a thread. """ in_reply_to_status_id = None for obj in tweets: + # When quoting a tweet, the tweet_data dict might contain a parameter called quote_tweet_id. Let's add it, or None, so quotes will be posted successfully. if len(obj["attachments"]) == 0: - item = self.api_call_v2(call_name="create_tweet", text=obj["text"], _sound="tweet_send.ogg", in_reply_to_tweet_id=in_reply_to_status_id, poll_duration_minutes=obj["poll_period"], poll_options=obj["poll_options"]) + item = self.api_call_v2(call_name="create_tweet", text=obj["text"], _sound="tweet_send.ogg", in_reply_to_tweet_id=in_reply_to_status_id, poll_duration_minutes=obj["poll_period"], poll_options=obj["poll_options"], quote_tweet_id=obj.get("quote_tweet_id")) in_reply_to_status_id = item.data["id"] else: media_ids = [] @@ -630,7 +631,7 @@ class Session(base.baseSession): if i["type"] == "photo": self.api_call(call_name="create_media_metadata", media_id=img.media_id, alt_text=i["description"]) media_ids.append(img.media_id) - item = self.api_call_v2(call_name="create_tweet", status=obj["text"], _sound="tweet_send.ogg", in_reply_to_tweet_id=in_reply_to_status_id, media_ids=media_ids, poll_duration_minutes=obj["poll_period"], poll_options=obj["poll_options"]) + item = self.api_call_v2(call_name="create_tweet", status=obj["text"], _sound="tweet_send.ogg", in_reply_to_tweet_id=in_reply_to_status_id, media_ids=media_ids, poll_duration_minutes=obj["poll_period"], poll_options=obj["poll_options"], quote_tweet_id=obj.get("quote_tweet_id")) in_reply_to_status_id = item.data["id"] def reply(self, text="", in_reply_to_status_id=None, attachments=[], *args, **kwargs):