Add like, reply and retweet functions, get image conversion working
This commit is contained in:
parent
fb7afcbb9c
commit
a6b8cefaa1
1
setup.py
1
setup.py
|
@ -65,6 +65,7 @@ if not db.isInitialized():
|
||||||
db.executeQuery("CREATE TABLE retweets(id INT PRIMARY KEY, author VARCHAR(30), created_at VARCHAR(30), text TEXT);")
|
db.executeQuery("CREATE TABLE retweets(id INT PRIMARY KEY, author VARCHAR(30), created_at VARCHAR(30), text TEXT);")
|
||||||
db.executeQuery("CREATE TABLE lyrics(id INTEGER PRIMARY KEY AUTOINCREMENT, text VARCHAR(140) NOT NULL, ref INT NOT NULL default '0', tweet_id INT, active BOOLEAN default '0');")
|
db.executeQuery("CREATE TABLE lyrics(id INTEGER PRIMARY KEY AUTOINCREMENT, text VARCHAR(140) NOT NULL, ref INT NOT NULL default '0', tweet_id INT, active BOOLEAN default '0');")
|
||||||
db.executeQuery("CREATE TABLE tokens(`cid` INT PRIMARY KEY, `ato` TEXT, `ase` TEXT, `tweet` BOOLEAN DEFAULT 1, `fish` INT DEFAULT 0);")
|
db.executeQuery("CREATE TABLE tokens(`cid` INT PRIMARY KEY, `ato` TEXT, `ase` TEXT, `tweet` BOOLEAN DEFAULT 1, `fish` INT DEFAULT 0);")
|
||||||
|
db.executeQuery("CREATE TABLE timelines(`cid` INT, `nr` INT, `tid` INT, PRIMARY KEY(cid, nr));")
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
db.closeConnection()
|
db.closeConnection()
|
||||||
|
|
|
@ -100,3 +100,5 @@ multipleGIFs = '''I don't understand it either, but Twitter doesn't allow upload
|
||||||
accountLocked = '''Your account was locked by Twitter for security reasons. Please log in at the Twitter website (https://twitter.com/) and follow the instructions there.'''
|
accountLocked = '''Your account was locked by Twitter for security reasons. Please log in at the Twitter website (https://twitter.com/) and follow the instructions there.'''
|
||||||
|
|
||||||
longTweet = '''Sorry, but this tweet is too long.'''
|
longTweet = '''Sorry, but this tweet is too long.'''
|
||||||
|
|
||||||
|
cantfind = '''Sorry, I can't find a tweet with ID %s. Please check your timeline and try again.'''
|
||||||
|
|
|
@ -38,7 +38,7 @@ def getTwo(message):
|
||||||
except ValueError:
|
except ValueError:
|
||||||
noauth(message)
|
noauth(message)
|
||||||
except tweepy.error.TweepError as e:
|
except tweepy.error.TweepError as e:
|
||||||
twoExceptions(e, message)
|
raise
|
||||||
|
|
||||||
def noauth(message):
|
def noauth(message):
|
||||||
message.reply_text(strings.noauth)
|
message.reply_text(strings.noauth)
|
||||||
|
@ -86,7 +86,15 @@ def fish(bot, update):
|
||||||
dbtools.dbHelper().addFish(update.message.chat_id)
|
dbtools.dbHelper().addFish(update.message.chat_id)
|
||||||
update.message.reply_text(strings.fishThanks)
|
update.message.reply_text(strings.fishThanks)
|
||||||
|
|
||||||
def explicitTweet(bot, update, args):
|
def getTweetID(tlid, cid):
|
||||||
|
try:
|
||||||
|
db = dbtools.dbHelper()
|
||||||
|
db.executeQuery("SELECT tid FROM timelines WHERE nr = %i AND cid = %i;" % (tlid, int(cid)))
|
||||||
|
return db.getNext()[0]
|
||||||
|
except:
|
||||||
|
raise ValueError("No such tweet in timeline")
|
||||||
|
|
||||||
|
def explicitTweet(bot, update, args, reply = None):
|
||||||
try:
|
try:
|
||||||
two = getTwo(update.message)
|
two = getTwo(update.message)
|
||||||
|
|
||||||
|
@ -100,11 +108,13 @@ def explicitTweet(bot, update, args):
|
||||||
|
|
||||||
if filename.split(".")[-1].lower() == "webp":
|
if filename.split(".")[-1].lower() == "webp":
|
||||||
out = io.BytesIO()
|
out = io.BytesIO()
|
||||||
PIL.Image.open(mobj).convert('RGB').save(out, "jpeg")
|
PIL.Image.open(mobj).convert('RGB').save(out, format="JPEG")
|
||||||
out.read()
|
|
||||||
filename = "%s.jpg" % filename.split(".")[0]
|
filename = "%s.jpg" % filename.split(".")[0]
|
||||||
|
|
||||||
two.api.update_with_media(filename, ' '.join(args), file=mobj)
|
else:
|
||||||
|
out = mobj
|
||||||
|
|
||||||
|
two.api.update_with_media(filename, update.message.caption, file=mobj)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
two.tweet(' '.join(args))
|
two.tweet(' '.join(args))
|
||||||
|
@ -116,6 +126,34 @@ def explicitTweet(bot, update, args):
|
||||||
except:
|
except:
|
||||||
logging.exception("Meh.")
|
logging.exception("Meh.")
|
||||||
|
|
||||||
|
def reply(bot, update, args):
|
||||||
|
try:
|
||||||
|
reply = getTweetID(args[0], update.message.chat_id)
|
||||||
|
except:
|
||||||
|
update.message.reply_text(strings.cantfind % args[0])
|
||||||
|
|
||||||
|
explicitTweet(bot, update, args[1:], reply)
|
||||||
|
|
||||||
|
def retweet(bot, update, args):
|
||||||
|
for tweet in args:
|
||||||
|
try:
|
||||||
|
tid = getTweetID(tweet, update.message.chat_id)
|
||||||
|
getTwo(update.message).api.retweet(tid)
|
||||||
|
except ValueError:
|
||||||
|
update.message.reply_text(strings.cantfind % tweet)
|
||||||
|
except tweepy.error.TweepError as e:
|
||||||
|
twoExceptions(e, update.message)
|
||||||
|
|
||||||
|
def like(bot, update, args):
|
||||||
|
for tweet in args:
|
||||||
|
try:
|
||||||
|
tid = getTweetID(tweet, update.message.chat_id)
|
||||||
|
getTwo(update.message).api.create_favorite(tid)
|
||||||
|
except ValueError:
|
||||||
|
update.message.reply_text(strings.cantfind % tweet)
|
||||||
|
except tweepy.error.TweepError as e:
|
||||||
|
twoExceptions(e, update.message)
|
||||||
|
|
||||||
def tweet(bot, update):
|
def tweet(bot, update):
|
||||||
try:
|
try:
|
||||||
if dbtools.dbHelper().getTStatus(update.message.chat_id):
|
if dbtools.dbHelper().getTStatus(update.message.chat_id):
|
||||||
|
@ -129,13 +167,23 @@ def timeline(bot, update, args = [10]):
|
||||||
except:
|
except:
|
||||||
count = 10
|
count = 10
|
||||||
|
|
||||||
|
db = dbtools.dbHelper()
|
||||||
|
db.executeQuery("DELETE FROM timelines WHERE cid = %i;" % int(update.message.chat_id))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
i = 1
|
||||||
two = getTwo(update.message)
|
two = getTwo(update.message)
|
||||||
|
|
||||||
for status in two.api.home_timeline(count=count):
|
for status in two.api.home_timeline(count=count):
|
||||||
update.message.reply_text("%s (%s) at %s: %s" % (status.author.name, status.author.screen_name, status.created_at, status.text))
|
db.executeQuery("INSERT INTO timelines VALUES(%i, %i, %i);" % (update.message.chat_id, i, status.id))
|
||||||
|
update.message.reply_text("Tweet %i:\n%s (@%s) at %s:\n%s" % (i, status.author.name, status.author.screen_name, status.created_at, status.text))
|
||||||
|
i += 1
|
||||||
|
|
||||||
except tweepy.error.TweepError as e:
|
except tweepy.error.TweepError as e:
|
||||||
twoExceptions(e, update.message)
|
twoExceptions(e, update.message)
|
||||||
|
|
||||||
|
db.commit()
|
||||||
|
|
||||||
def toggleTweet(bot, update):
|
def toggleTweet(bot, update):
|
||||||
try:
|
try:
|
||||||
update.message.reply_text(strings.toggleTweet % (strings.toggleTweetOn if dbtools.dbHelper().toggleTweet(update.message.chat_id) else strings.toggleTweetOff))
|
update.message.reply_text(strings.toggleTweet % (strings.toggleTweetOn if dbtools.dbHelper().toggleTweet(update.message.chat_id) else strings.toggleTweetOff))
|
||||||
|
@ -155,6 +203,9 @@ if __name__ == "__main__":
|
||||||
updater.dispatcher.add_handler(telegram.ext.CommandHandler("auth", auth))
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("auth", auth))
|
||||||
updater.dispatcher.add_handler(telegram.ext.CommandHandler("fish", fish))
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("fish", fish))
|
||||||
updater.dispatcher.add_handler(telegram.ext.CommandHandler("help", start))
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("help", start))
|
||||||
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("like", like, pass_args=True))
|
||||||
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("reply", reply, pass_args=True))
|
||||||
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("retweet", retweet, pass_args=True))
|
||||||
updater.dispatcher.add_handler(telegram.ext.CommandHandler("start", start))
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("start", start))
|
||||||
updater.dispatcher.add_handler(telegram.ext.CommandHandler("test", test, pass_args=True))
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("test", test, pass_args=True))
|
||||||
updater.dispatcher.add_handler(telegram.ext.CommandHandler("timeline", timeline))
|
updater.dispatcher.add_handler(telegram.ext.CommandHandler("timeline", timeline))
|
||||||
|
|
Loading…
Reference in a new issue