Improve mention handling. Less code = better. Part 2.

This commit is contained in:
Klaus-Uwe Mitterer 2017-04-03 14:30:34 +02:00
parent 1736012d66
commit b39aef819e

View file

@ -51,7 +51,7 @@ def callback(bot, update):
return return
if status: 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): def captionHelper(bot, update):
if update.message.caption.startswith("@%s /"): if update.message.caption.startswith("@%s /"):
@ -321,30 +321,33 @@ def explicitTweet(bot, update, args, reply = None):
except tweepy.error.TweepError as e: except tweepy.error.TweepError as e:
bottools.methods.twoExceptions(e, update.message) 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): def reply(bot, update, args):
try: try:
reply = bottools.methods.getTweetID(args[0], update.message.chat_id) reply = bottools.methods.getTweetID(args[0], update.message.chat_id)
two = bottools.methods.getTwo(update.message) two = bottools.methods.getTwo(update.message)
otweet = two.getTweet(reply) otweet = two.getTweet(reply)
sender = otweet.user.screen_name mentions = getMentions(otweet, two, args)
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 = []
pargs = mentions + args[1:] pargs = mentions + args[1:]
except: except:
@ -463,15 +466,14 @@ def tweetMessage(status, cid, bot, force = False, callback = None, notified = No
except: except:
text = status.full_text text = status.full_text
if not (force or callback): try:
try: two = twitools.twoBotHelper(cid)
two = twitools.twoBotHelper(cid) except tweepy.error.TweepError as e:
except tweepy.error.TweepError as e: logging.exception(e)
logging.exception("I really don't see how this could possibly happen.")
if not callback: if not callback:
if status.user.screen_name.strip("@") == two.whoami().strip("@") and not db.getCStatus(cid): if status.user.screen_name.strip("@") == two.whoami().strip("@") and not db.getCStatus(cid):
return return
if not callback: if not callback:
try: 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("Retweet", callback_data = "/retweet %i" % i)]
buttons += [ 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) telegram.InlineKeyboardButton("Quote", switch_inline_query_current_chat = "/quote %i " % i)
] ]