From bf16788e8f843447ef0b0d5649d76a83188b522a Mon Sep 17 00:00:00 2001 From: Jonathan David Amery Date: Tue, 14 Aug 2018 12:05:08 +0100 Subject: [PATCH] Fix for embedded tweet support: Problem: * Overly long embedded tweets cause Acrobat to go over the server's line length limit which causes the message to be silently discarded because of a lack of error handling in automsg. Solutions: * Make each tweet in an embedded tweet chain a seperate message - this requires getTweet to now return a list * Did not fix automsg at all Signed-off-by: Matthew Vernon --- commands.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/commands.py b/commands.py index 86d0d23..f7444d1 100755 --- a/commands.py +++ b/commands.py @@ -498,13 +498,15 @@ def twitterq(bot,cmd,nick,conn,public,twitapi): urlstring = urlre.search(cmd).group(1) if (urlstring.find("twitter.com") !=-1): - stringout = getTweet(urlstring,twitapi) - bot.automsg(public, nick, stringout) + stringsout = getTweet(urlstring,twitapi) + for stringout in stringsout: + bot.automsg(public, nick, stringout) def getTweet(urlstring,twitapi,inclusion=False): unobfuscate_urls=True expand_included_tweets=True - + stringsout=[] + parts = string.split(urlstring,'/') tweetID = parts[-1] try: @@ -577,7 +579,12 @@ def getTweet(urlstring,twitapi,inclusion=False): if expand_included_tweets and not inclusion: if rv.hostname == 'twitter.com' and re.search(r'status/\d+',rv.path): quotedtweet = getTweet(toReplace, twitapi, inclusion=True) # inclusion parameter limits recursion. - tweetText += " Q{" + quotedtweet + "}" + if not quotedtweet: + quotedtweet = [""] + quotedtweet[0] = "Q{ " + quotedtweet[0] + quotedtweet[-1] += " }" + stringsout = quotedtweet + stringsout + tweetText = tweetText.replace(url.url, toReplace) tweetText = tweetText.replace(">",">") @@ -591,6 +598,8 @@ def getTweet(urlstring,twitapi,inclusion=False): except Exception: terror = sys.exc_info() stringout = "Error: %s" % terror[1].__str__() + stringsout = [stringout] + stringsout if inclusion: - return stringout # don't want to double-encode it, so just pass it on for now and encode later - return stringout.encode('UTF-8', 'replace') + return stringsout # don't want to double-encode it, so just pass it on for now and encode later + + return map(lambda x: x.encode('UTF-8', 'replace'), stringsout) -- 2.30.2