diff --git a/desktop_client.py b/desktop_client.py index 49f094fb2..5330a2f5f 100644 --- a/desktop_client.py +++ b/desktop_client.py @@ -16,6 +16,8 @@ import webbrowser import urllib.parse from pathlib import Path from random import randint +from utils import disallow_announce +from utils import disallow_reply from utils import get_base_content_from_post from utils import has_object_dict from utils import get_full_domain @@ -1757,27 +1759,34 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str, print('') elif command_str in ('reply', 'r'): if post_json_object: - if post_json_object.get('id'): - post_id = post_json_object['id'] - subject = None - if post_json_object['object'].get('summary'): - subject = post_json_object['object']['summary'] - conversation_id = None - if post_json_object['object'].get('conversation'): - conversation_id = \ - post_json_object['object']['conversation'] - session_reply = create_session(proxy_type) - _desktop_reply_to_post(session_reply, post_id, - base_dir, nickname, password, - domain, port, http_prefix, - cached_webfingers, person_cache, - debug, subject, - screenreader, system_language, - languages_understood, - espeak, conversation_id, - low_bandwidth, - content_license_url, - signing_priv_key_pem) + post_content = '' + if post_json_object['object'].get('content'): + post_content = post_json_object['object']['content'] + if not disallow_reply(post_content): + if post_json_object.get('id'): + post_id = post_json_object['id'] + subject = None + if post_json_object['object'].get('summary'): + subject = post_json_object['object']['summary'] + conversation_id = None + if post_json_object['object'].get('conversation'): + conversation_id = \ + post_json_object['object']['conversation'] + session_reply = create_session(proxy_type) + _desktop_reply_to_post(session_reply, post_id, + base_dir, nickname, + password, + domain, port, http_prefix, + cached_webfingers, + person_cache, + debug, subject, + screenreader, + system_language, + languages_understood, + espeak, conversation_id, + low_bandwidth, + content_license_url, + signing_priv_key_pem) refresh_timeline = True print('') elif (command_str == 'post' or command_str == 'p' or @@ -2130,25 +2139,30 @@ def run_desktop_client(base_dir: str, proxy_type: str, http_prefix: str, post_json_object = \ _desktop_get_box_post_object(box_json, curr_index) if post_json_object: - if post_json_object.get('id'): - post_id = post_json_object['id'] - announce_actor = \ - post_json_object['object']['attributedTo'] - say_str = 'Announcing post by ' + \ - get_nickname_from_actor(announce_actor) - _say_command(say_str, say_str, - screenreader, - system_language, espeak) - session_announce = create_session(proxy_type) - send_announce_via_server(base_dir, session_announce, - nickname, password, - domain, port, - http_prefix, post_id, - cached_webfingers, - person_cache, - True, __version__, - signing_priv_key_pem) - refresh_timeline = True + post_content = '' + if post_json_object['object'].get('content'): + post_content = post_json_object['object']['content'] + if not disallow_announce(post_content): + if post_json_object.get('id'): + post_id = post_json_object['id'] + announce_actor = \ + post_json_object['object']['attributedTo'] + say_str = 'Announcing post by ' + \ + get_nickname_from_actor(announce_actor) + _say_command(say_str, say_str, + screenreader, + system_language, espeak) + session_announce = create_session(proxy_type) + send_announce_via_server(base_dir, + session_announce, + nickname, password, + domain, port, + http_prefix, post_id, + cached_webfingers, + person_cache, + True, __version__, + signing_priv_key_pem) + refresh_timeline = True print('') elif (command_str.startswith('unannounce') or command_str.startswith('undo announce') or diff --git a/utils.py b/utils.py index 967b4c56c..1b647e116 100644 --- a/utils.py +++ b/utils.py @@ -3614,3 +3614,41 @@ def is_i2p_request(calling_domain: str, referer_domain: str, if referer_domain.endswith('.i2p'): return True return False + + +def disallow_announce(content: str) -> bool: + """Are announces/boosts not allowed for the given post? + """ + disallow_strings = ( + ':boost_no:', + ':noboost:', + ':noboosts:', + ':no_boost:', + ':no_boosts:', + ':boosts_no:', + 'dont_repeat', + 'dont_announce', + 'dont_boost' + ) + for diss in disallow_strings: + if diss in content: + return True + return False + + +def disallow_reply(content: str) -> bool: + """Are replies not allowed for the given post? + """ + disallow_strings = ( + ':reply_no:', + ':noreply:', + ':noreplies:', + ':no_reply:', + ':no_replies:', + ':replies_no:', + 'dont_at_me' + ) + for diss in disallow_strings: + if diss in content: + return True + return False diff --git a/webapp_post.py b/webapp_post.py index 47a409102..a766e786c 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -25,6 +25,8 @@ from posts import post_is_muted from posts import get_person_box from posts import download_announce from posts import populate_replies_json +from utils import disallow_announce +from utils import disallow_reply from utils import convert_published_to_local_timezone from utils import remove_hash_from_post_id from utils import remove_html @@ -2020,25 +2022,11 @@ def individual_post_as_html(signing_priv_key_pem: str, if content_str: # does an emoji indicate a no boost preference? # if so then don't show the repeat/announce icon - if ':boost_no:' in content_str or \ - ':noboost:' in content_str or \ - ':noboosts:' in content_str or \ - ':no_boost:' in content_str or \ - ':no_boosts:' in content_str or \ - ':boosts_no:' in content_str or \ - 'dont_repeat' in content_str or \ - 'dont_announce' in content_str or \ - 'dont_boost' in content_str: + if disallow_announce(content_str): announce_str = '' # does an emoji indicate a no replies preference? # if so then don't show the reply icon - if ':reply_no:' in content_str or \ - ':noreply:' in content_str or \ - ':noreplies:' in content_str or \ - ':no_reply:' in content_str or \ - ':no_replies:' in content_str or \ - ':replies_no:' in content_str or \ - 'dont_at_me' in content_str: + if disallow_reply(content_str): reply_str = '' new_footer_str = \