From b39aef819e313619cf63f5e2f764280e2d56b4ef Mon Sep 17 00:00:00 2001 From: Klaus-Uwe Mitterer Date: Mon, 3 Apr 2017 14:30:34 +0200 Subject: [PATCH] Improve mention handling. Less code = better. Part 2. --- bottools/methods.py | 60 +++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/bottools/methods.py b/bottools/methods.py index 0a16816..00d65a3 100644 --- a/bottools/methods.py +++ b/bottools/methods.py @@ -51,7 +51,7 @@ def callback(bot, update): return if status: - tweetMessage(status, None, bot, callback = update.callback_query) + tweetMessage(status, update.callback_query.message.chat_id, bot, callback = update.callback_query) def captionHelper(bot, update): if update.message.caption.startswith("@%s /"): @@ -321,30 +321,33 @@ def explicitTweet(bot, update, args, reply = None): except tweepy.error.TweepError as e: bottools.methods.twoExceptions(e, update.message) +def getMentions(tweet, two, args = []): + sender = tweet.user.screen_name + try: + text = tweet.full_text + except: + text = tweet.text + + mentions = [] + + for m in re.split('[^\w@]+', text): + try: + if m[0] == "@" and m[0].strip() != "" and not (m in args or m.strip() == "" or m == "@%s" % two.whoami().strip("@") or m == "@%s" % sender.strip("@")): + mentions += [m] + except: + pass + + if not sender.strip("@") == two.whoami().strip("@"): + mentions = ["@%s" % sender.strip("@")] + mentions + + return mentions + def reply(bot, update, args): try: reply = bottools.methods.getTweetID(args[0], update.message.chat_id) two = bottools.methods.getTwo(update.message) otweet = two.getTweet(reply) - sender = otweet.user.screen_name - - if not ("@%s" % sender.strip("@")) in [("@%s" % a.strip("@")) for a in args]: - mentions = [] - - for m in re.split('[^\w@]+', otweet.full_text): - try: - if m[0] == "@" and m[0].strip() != "": - mentions += [m] - except: - pass - - for m in mentions: - if m in args or m.strip() == "" or m =="@%s" % two.whoami().strip("@") or m == "@%s" % sender.strip("@"): - mentions.remove(m) - - else: - mentions = [] - + mentions = getMentions(otweet, two, args) pargs = mentions + args[1:] except: @@ -463,15 +466,14 @@ def tweetMessage(status, cid, bot, force = False, callback = None, notified = No except: text = status.full_text - if not (force or callback): - try: - two = twitools.twoBotHelper(cid) - except tweepy.error.TweepError as e: - logging.exception("I really don't see how this could possibly happen.") + try: + two = twitools.twoBotHelper(cid) + except tweepy.error.TweepError as e: + logging.exception(e) - if not callback: - if status.user.screen_name.strip("@") == two.whoami().strip("@") and not db.getCStatus(cid): - return + if not callback: + if status.user.screen_name.strip("@") == two.whoami().strip("@") and not db.getCStatus(cid): + return if not callback: try: @@ -507,7 +509,7 @@ def tweetMessage(status, cid, bot, force = False, callback = None, notified = No buttons += [telegram.InlineKeyboardButton("Retweet", callback_data = "/retweet %i" % i)] buttons += [ - telegram.InlineKeyboardButton("Reply", switch_inline_query_current_chat = "/reply %i " % i), + telegram.InlineKeyboardButton("Reply", switch_inline_query_current_chat = "/reply %i %s" % (i, ' '.join(getMentions(status, two)))), telegram.InlineKeyboardButton("Quote", switch_inline_query_current_chat = "/quote %i " % i) ]