chiark / gitweb /
Fix for embedded tweet support:
authorJonathan David Amery <jdamery+zgit@ysolde.ucam.org>
Tue, 14 Aug 2018 11:05:08 +0000 (12:05 +0100)
committerMatthew Vernon <matthewv@chiark.greenend.org.uk>
Tue, 21 Aug 2018 15:44:07 +0000 (16:44 +0100)
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 <matthewv@chiark.greenend.org.uk>
commands.py

index 86d0d23..f7444d1 100755 (executable)
@@ -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("&gt;",">")
@@ -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)