From 24d1ad093d94335d8d18c80838e2ceb90b4b264f Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Fri, 16 Jul 2021 10:22:51 -0500 Subject: [PATCH] Streaming API: Ignore retweets if original tweet is present in a buffer --- src/controller/buffers/twitter/base.py | 2 +- src/sessions/twitter/session.py | 8 ++++---- src/sessions/twitter/utils.py | 10 +++++++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/controller/buffers/twitter/base.py b/src/controller/buffers/twitter/base.py index 5d3aca86..b7b535e1 100644 --- a/src/controller/buffers/twitter/base.py +++ b/src/controller/buffers/twitter/base.py @@ -237,7 +237,7 @@ class BaseBuffer(base.Buffer): items_db = self.session.db[self.name] self.session.add_users_from_results(items) for i in items: - if utils.is_allowed(i, self.session.settings, self.name) == True and utils.find_item(i.id, self.session.db[self.name]) == None: + if utils.is_allowed(i, self.session.settings, self.name) == True and utils.find_item(i, self.session.db[self.name]) == None: i = reduce.reduce_tweet(i) i = self.session.check_quoted_status(i) i = self.session.check_long_tweet(i) diff --git a/src/sessions/twitter/session.py b/src/sessions/twitter/session.py index ea0561e2..45089a23 100644 --- a/src/sessions/twitter/session.py +++ b/src/sessions/twitter/session.py @@ -51,7 +51,7 @@ class Session(base.baseSession): if i.id < last_id: log.error("Ignoring an older tweet... Last id: {0}, tweet id: {1}".format(last_id, i.id)) continue - if utils.find_item(i.id, self.db[name]) == None and utils.is_allowed(i, self.settings, name) == True: + if utils.find_item(i, self.db[name]) == None and utils.is_allowed(i, self.settings, name) == True: if i == False: continue reduced_object = reduce.reduce_tweet(i) reduced_object = self.check_quoted_status(reduced_object) @@ -72,7 +72,7 @@ class Session(base.baseSession): self.db[name] = [] objects = self.db[name] for i in data: - if utils.find_item(i.id, self.db[name]) == None: + if utils.find_item(i, self.db[name]) == None: if self.settings["general"]["reverse_timelines"] == False: objects.append(i) else: objects.insert(0, i) num = num+1 @@ -94,12 +94,12 @@ class Session(base.baseSession): for i in data: # Twitter returns sender_id as str, which must be converted to int in order to match to our user_id object. if int(i.message_create["sender_id"]) == self.db["user_id"]: - if "sent_direct_messages" in self.db and utils.find_item(i.id, self.db["sent_direct_messages"]) == None: + if "sent_direct_messages" in self.db and utils.find_item(i, self.db["sent_direct_messages"]) == None: if self.settings["general"]["reverse_timelines"] == False: sent_objects.append(i) else: sent_objects.insert(0, i) sent = sent+1 else: - if utils.find_item(i.id, self.db["direct_messages"]) == None: + if utils.find_item(i, self.db["direct_messages"]) == None: if self.settings["general"]["reverse_timelines"] == False: objects.append(i) else: objects.insert(0, i) incoming = incoming+1 diff --git a/src/sessions/twitter/utils.py b/src/sessions/twitter/utils.py index 24d498b4..70ebfb1e 100644 --- a/src/sessions/twitter/utils.py +++ b/src/sessions/twitter/utils.py @@ -60,9 +60,13 @@ def find_urls (tweet, twitter_media=False): urls.append(i) return urls -def find_item(id, listItem): - for i in range(0, len(listItem)): - if listItem[i].id == id: return i +def find_item(item, listItems): + for i in range(0, len(listItems)): + if listItems[i].id == item.id: + return i + # Check also retweets. + if hasattr(item, "retweeted_status") and item.retweeted_status.id == listItems[i].id: + return i return None def find_list(name, lists):