diff --git a/redditbot.py b/redditbot.py
index 199e1dd..c73500a 100644
--- a/redditbot.py
+++ b/redditbot.py
@@ -51,6 +51,59 @@ if isinstance(_send_to_chats, list):
send_to_chats[i] = j
bot_admins = config_data['config']['bot_admins']
+def title_or_shortlink(submission):
+ title = submission.title.strip(''.join((
+ # https://en.wikipedia.org/wiki/Unicode_control_characters#Category_%22Cc%22_control_codes_(C0_and_C1)
+ '\u0000', # NULL (used in null-terminated strings)
+ '\u0009', # HORIZONTAL TABULATION (HT) (inserted by the tab key)
+ '\u000A', # LINE FEED (LF) (used as a line break)
+ '\u000C', # FORM FEED (FF) (denotes a page break in a plain text file)
+ '\u000D', # CARRIAGE RETURN (CR) (used in some line-breaking conventions)
+ '\u0085', # NEXT LINE (NEL) (sometimes used as a line break in text transcoded from EBCDIC)
+ '\u0009\u000A\u000B\u000C\u000D',
+ '\u001C\u001D\u001E\u001F',
+ '\u0085'
+ # https://en.wikipedia.org/wiki/Unicode_control_characters#Unicode_introduced_separators
+ '\u2028', # LINE SEPARATOR (abbreviated LS or LSEP)
+ '\u2029', # PARAGRAPH SEPARATOR (abbreviated PS or PSEP)
+ # https://en.wikipedia.org/wiki/Unicode_control_characters#Bidirectional_text_control
+ '\u061C', # ARABIC LETTER MARK
+ '\u200E', # LEFT-TO-RIGHT MARK
+ '\u200F', # RIGHT-TO-LEFT MARK
+ '\u202A', # LEFT-TO-RIGHT EMBEDDING
+ '\u202B', # RIGHT-TO-LEFT EMBEDDING
+ '\u202C', # POP DIRECTIONAL FORMATTING
+ '\u202D', # LEFT-TO-RIGHT OVERRIDE
+ '\u202E', # RIGHT-TO-LEFT OVERRIDE
+ '\u2066', # LEFT-TO-RIGHT ISOLATE
+ '\u2067', # RIGHT-TO-LEFT ISOLATE
+ '\u2068', # FIRST STRONG ISOLATE
+ '\u2069', # POP DIRECTIONAL ISOLATE
+ # https://en.wikipedia.org/wiki/Whitespace_character#Unicode
+ '\u000B', # line tabulation
+ '\u0020', # space
+ '\u0085', # next line
+ '\u00A0', # no-break space
+ '\u1680', # ogham space mark
+ '\u2000', # en quad
+ '\u2001', # em quad
+ '\u2002', # en space
+ '\u2003', # em space
+ '\u2004', # three-per-em space
+ '\u2005', # four-per-em space
+ '\u2006', # six-per-em space
+ '\u2007', # figure space
+ '\u2008', # punctuation space
+ '\u2009', # thin space
+ '\u200A', # hair space
+ '\u2028', # line separator
+ '\u2029', # paragraph separator
+ '\u202F', # narrow no-break space
+ '\u205F', # medium mathematical space
+ '\u3000', # ideographic space
+ )))
+ return f'{html.escape(title)}' if title else submission.shortlink
+
logging.basicConfig(level=logging.INFO)
async def main():
_added_chats = []
@@ -299,7 +352,7 @@ async def main():
return ext
async def _actual_start_post(random_post, chats, cpp=None, snw=None, ssw=None):
- text = f'{html.escape(random_post.title)}'
+ text = title_or_shortlink(random_post)
nsfw = random_post.over_18
spoilers = random_post.spoiler
cpid = getattr(random_post, 'crosspost_parent', None)
@@ -311,7 +364,7 @@ async def main():
nsfw = random_post.over_18
if ssw and not spoilers:
spoilers = random_post.spoiler
- text += f' (crosspost of {html.escape(random_post.title)})'
+ text += f' (crosspost of {title_or_shortlink(random_post)})'
if spoilers and ssw:
text = '🙈🙈🙈 SPOILERS 🙈🙈🙈\n' + text
if nsfw and snw: