Improvements to reading tweets with many mentions on them

This commit is contained in:
Manuel Cortez 2021-08-25 11:13:12 -05:00
parent 342265b3c0
commit 10511d3022
3 changed files with 23 additions and 5 deletions

View File

@ -2,6 +2,7 @@
## changes in this version ## changes in this version
* When reading a tweet, if the tweet contains more than 2 consecutive mentions, TWBlue will announce how many more users the tweet includes, as opposed to read every user in the conversation. You still can display the tweet to read all users.
* Added user aliases to TWBlue. This feature allows you to rename user's display names on Twitter, so the next time you'll read an user it will be announced as you configured. For adding an alias to an user, select the "add alias" option in the user menu, located in the menu bar. This feature works only if you have set display screen names unchecked. Users are displayed with their display name in people buffers only. This action is supported in all keymaps, although it is undefined by default. ([#389](https://github.com/manuelcortez/TWBlue/pull/389)) * Added user aliases to TWBlue. This feature allows you to rename user's display names on Twitter, so the next time you'll read an user it will be announced as you configured. For adding an alias to an user, select the "add alias" option in the user menu, located in the menu bar. This feature works only if you have set display screen names unchecked. Users are displayed with their display name in people buffers only. This action is supported in all keymaps, although it is undefined by default. ([#389](https://github.com/manuelcortez/TWBlue/pull/389))
* It is possible to undefine keystrokes in the current keymap in TWBlue. This allows you, for example, to redefine keystrokes completely. * It is possible to undefine keystrokes in the current keymap in TWBlue. This allows you, for example, to redefine keystrokes completely.
* Added a limited version of the Twitter's Streaming API: The Streaming API will work only for tweets, and will receive tweets only by people you follow. Protected users are not possible to be streamed. It is possible that during high tweet traffic, the Stream might get disconnected at times, but TWBlue should be capable of detecting this problem and reconnecting the stream again. ([#385](https://github.com/manuelcortez/TWBlue/pull/385)) * Added a limited version of the Twitter's Streaming API: The Streaming API will work only for tweets, and will receive tweets only by people you follow. Protected users are not possible to be streamed. It is possible that during high tweet traffic, the Stream might get disconnected at times, but TWBlue should be capable of detecting this problem and reconnecting the stream again. ([#385](https://github.com/manuelcortez/TWBlue/pull/385))

View File

@ -45,9 +45,9 @@ def compose_tweet(tweet, db, relative_times, show_screen_names=False, session=No
else: else:
value = "text" value = "text"
if hasattr(tweet, "retweeted_status") and value != "message": if hasattr(tweet, "retweeted_status") and value != "message":
text = StripChars(getattr(tweet.retweeted_status, value)) text = utils.clean_mentions(StripChars(getattr(tweet.retweeted_status, value)))
else: else:
text = StripChars(getattr(tweet, value)) text = utils.clean_mentions(StripChars(getattr(tweet, value)))
if show_screen_names: if show_screen_names:
user = session.get_user(tweet.user).screen_name user = session.get_user(tweet.user).screen_name
else: else:
@ -111,7 +111,7 @@ def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False,
value = "full_text" value = "full_text"
else: else:
value = "text" value = "text"
text = StripChars(getattr(quoted_tweet, value)) text = utils.clean_mentions(StripChars(getattr(quoted_tweet, value)))
if show_screen_names: if show_screen_names:
quoting_user = session.get_user(quoted_tweet.user).screen_name quoting_user = session.get_user(quoted_tweet.user).screen_name
else: else:
@ -124,9 +124,9 @@ def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False,
if hasattr(original_tweet, "message"): if hasattr(original_tweet, "message"):
original_text = original_tweet.message original_text = original_tweet.message
elif hasattr(original_tweet, "full_text"): elif hasattr(original_tweet, "full_text"):
original_text = StripChars(original_tweet.full_text) original_text = utils.clean_mentions(StripChars(original_tweet.full_text))
else: else:
original_text = StripChars(original_tweet.text) original_text = utils.clean_mentions(StripChars(original_tweet.text))
quoted_tweet.message = _(u"{0}. Quoted tweet from @{1}: {2}").format( text, original_user, original_text) quoted_tweet.message = _(u"{0}. Quoted tweet from @{1}: {2}").format( text, original_user, original_text)
quoted_tweet = tweets.clear_url(quoted_tweet) quoted_tweet = tweets.clear_url(quoted_tweet)
if hasattr(original_tweet, "entities") and original_tweet.entities.get("urls"): if hasattr(original_tweet, "entities") and original_tweet.entities.get("urls"):

View File

@ -244,3 +244,20 @@ def expand_urls(text, entities):
if url["url"] in text: if url["url"] in text:
text = text.replace(url["url"], url["expanded_url"]) text = text.replace(url["url"], url["expanded_url"])
return text return text
def clean_mentions(text):
new_text = text
mentionned_people = [u for u in re.finditer("(?<=^|(?<=[^a-zA-Z0-9-\.]))@([A-Za-z0-9_]+)", text)]
if len(mentionned_people) <= 2:
return text
end = -2
total_users = 0
for user in mentionned_people:
if abs(user.start()-end) < 3:
new_text = new_text.replace(user.group(0), "")
total_users = total_users+1
end = user.end()
if total_users < 1:
return text
new_text = _("{user_1}, {user_2} and {all_users} more: {text}").format(user_1=mentionned_people[0].group(0), user_2=mentionned_people[1].group(0), all_users=total_users-2, text=new_text)
return new_text