From 95c70b0b489756ad070469c145248d1a8d59417e Mon Sep 17 00:00:00 2001 From: flifloo Date: Wed, 1 May 2019 16:23:17 +0200 Subject: [PATCH] Stream slots system and no double commissions --- app/models.py | 6 ++++++ app/routes.py | 5 ++++- stream.py | 9 ++++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/models.py b/app/models.py index 42ce835..7280179 100644 --- a/app/models.py +++ b/app/models.py @@ -41,6 +41,12 @@ class Tweets(db.Model): slots = db.Column(db.Integer) slots_max = db.Column(db.Integer) keywords = db.Column(db.String(256)) + commissions = db.relationship("Commission", backref="tweet", lazy="dynamic") + +class Commission(db.Model): + id = db.Column(db.Integer, primary_key=True, unique=True) + tweet_id = db.Column(db.Integer, db.ForeignKey("tweets.id")) + user = db.Column(db.String(15)) class TrelloAPI(db.Model): id = db.Column(db.Integer, primary_key=True, unique=True) diff --git a/app/routes.py b/app/routes.py index a2d274f..9c70442 100644 --- a/app/routes.py +++ b/app/routes.py @@ -111,7 +111,10 @@ def dashboard(): twapi = twapi.api_login() if request.args.get("twrm"): - db.session.delete(Tweets.query.filter_by(user = current_user, statu_id = request.args.get("twrm")).first()) + t = Tweets.query.filter_by(user = current_user, statu_id = request.args.get("twrm")).first() + for c in t.commissions.all(): + db.session.delete(c) + db.session.delete(t) db.session.commit() if request.args.get("delet"): twapi.destroy_status(request.args.get["twrm"]) diff --git a/stream.py b/stream.py index 5dba456..8abca45 100644 --- a/stream.py +++ b/stream.py @@ -1,6 +1,6 @@ import tweepy, twitter_credentials, trello, trello_credentials, json, subprocess, argparse from app import db -from app.models import User +from app.models import User, Commission parser = argparse.ArgumentParser() parser.add_argument("user", type = int, help = "User id") @@ -13,15 +13,18 @@ api = tweepy.API(auth) class listener(tweepy.streaming.StreamListener): def on_data(self, data): + print(data) all_data = json.loads(data) for t in user.tweets.all(): - if t.statu_id == int(all_data["in_reply_to_status_id"]) and api.me().id != int(all_data["user"]["id"]): + if "in_reply_to_status_id" in all_data and all_data["in_reply_to_status_id"] and t.statu_id == int(all_data["in_reply_to_status_id"]) and t.slots != t.slots_max and not t.commissions.filter_by(user = all_data["user"]["screen_name"]).first(): #and api.me().id != int(all_data["user"]["id"]) for w in eval(t.keywords.lower()): if all_data["text"].lower().find(w) != -1: + t.slots += 1 + db.session.add(Commission(tweet = t, user = all_data["user"]["screen_name"])) + db.session.commit() api.create_favorite(int(all_data["id"])) user.trello_api.first().api_login().get_list(user.boards.first().column_id).add_card(f"{all_data['user']['name']}'s commission", f"Commission take on Twitter with the cyberplanificateur with this tweet : https://twitter.com/{all_data['user']['screen_name']}/status/{all_data['id']}") print("found") - #Make slots system ! break break return True