From da586e7ca215d2fb9d440002f558b70c6fb69b10 Mon Sep 17 00:00:00 2001 From: Mez Date: Sat, 9 Aug 2025 11:48:01 +0100 Subject: [PATCH] Add activity rewards script --- README.org | 2 +- rewards.py | 212 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 rewards.py diff --git a/README.org b/README.org index 4833b2e..a436fef 100644 --- a/README.org +++ b/README.org @@ -3,7 +3,7 @@ Python scripts to generate a mobile-friendly static site for tracking tcg cards ** Instructions *** Requirements -- =python3= (needs the following libraries: =bs4, collections, datetime, os, random, re, requests=) +- =python3= (needs the following libraries: =bs4, collections, datetime, itertools, os, random, re, requests=) - server space - subdomain pointing to your site root on the server - =rclone= with your server set up as a remote diff --git a/rewards.py b/rewards.py new file mode 100644 index 0000000..1574583 --- /dev/null +++ b/rewards.py @@ -0,0 +1,212 @@ +import log,variables +import datetime,itertools,re,requests +from bs4 import BeautifulSoup + +themonth = datetime.datetime.today().replace(day=1) - datetime.timedelta(days=1) + +artshop = None +artstudio = None +recycledart = None +mastery = None +donations = input("Paste comma-separated deck donation URLs here or press Enter to skip: ").split(", ") + +if donations[0] == "": + donations = None + +print("Generating …") + +games = {} +gamecount = 0 +trades = {} +for event in log.log: + if event["date"].year == themonth.year: + if event["date"].month >= themonth.month: + if re.compile(r" [0-9][0-9][0-9]$").search(event["event"]): + if len(games) < 37: + game = event["url"] + gamepage = requests.get(game) + gamesoup = BeautifulSoup(gamepage.content, "html.parser") + comment = gamesoup.find(class_="comment") + thedate = comment.find(class_="datetime").text + if datetime.datetime.strftime(themonth,"%Y-%m") in thedate: + games.update({event["event"]:event["url"]}) + gamecount += 1 + elif event["date"].month == themonth.month: + if "trade with " in event["event"]: + try: + if event["received"]: + trades.update({event["event"][11:]:event["url"]}) + except: + pass + elif event["event"] == "art shop": + if not artshop: + try: + if event["received"]: + pass + except: + artshop = event["url"] + elif event["event"] == "art studio": + if not artstudio: + try: + if event["lost"]: + artstudio = event["url"] + except: + pass + elif event["event"] == "recycled art": + if not recycledart: + try: + if event["received"]: + recycledart = event["date"] + except: + pass + elif "mastered " in event["event"]: + if not mastery: + mastery = event["url"] + +games = dict(sorted(games.items())) +trades = dict(sorted(trades.items())) + +if len(games) >= 35: + games = dict(itertools.islice(games.items(),35)) +elif len(games) >= 30: + games = dict(itertools.islice(games.items(),30)) +elif len(games) >= 25: + games = dict(itertools.islice(games.items(),25)) +elif len(games) >= 20: + games = dict(itertools.islice(games.items(),20)) +elif len(games) >= 15: + games = dict(itertools.islice(games.items(),15)) +elif len(games) >= 10: + games = dict(itertools.islice(games.items(),10)) +elif len(games) >= 5: + games = dict(itertools.islice(games.items(),5)) + +if len(trades) >= 21: + trades = dict(itertools.islice(trades.items(),21)) +elif len(trades) >= 18: + trades = dict(itertools.islice(trades.items(),18)) +elif len(trades) >= 15: + trades = dict(itertools.islice(trades.items(),15)) +elif len(trades) >= 12: + trades = dict(itertools.islice(trades.items(),12)) +elif len(trades) >= 9: + trades = dict(itertools.islice(trades.items(),9)) +elif len(trades) >= 6: + trades = dict(itertools.islice(trades.items(),6)) +elif len(trades) >= 3: + trades = dict(itertools.islice(trades.items(),3)) + +services = 0 +if artshop: + services += 1 +if artstudio: + services += 1 +if recycledart: + services += 1 +if mastery: + services += 1 +if donations: + services += 1 + +print("\nYour name: " + variables.name + "\nCard post: " + variables.url) + +if len(games) > 4: + print("Category: Games") + if len(games) == 35: + print("Tier: VII") + elif len(games) == 30: + print("Tier: VI") + elif len(games) == 25: + print("Tier: V") + elif len(games) == 20: + print("Tier: IV") + elif len(games) == 15: + print("Tier: III") + elif len(games) == 10: + print("Tier: II") + elif len(games) == 5: + print("Tier: I") + gamestring = "Activity: " + precomma = False + gameindex = 1 + for game in games: + if precomma: + gamestring += " · " + gamestring += str(gameindex) + ". " + game + "" + precomma = True + gameindex += 1 + print(gamestring) + +if len(trades) > 2: + print("Category: Trades") + if len(trades) == 21: + print("Tier: VII") + elif len(trades) == 18: + print("Tier: VI") + elif len(trades) == 15: + print("Tier: V") + elif len(trades) == 12: + print("Tier: IV") + elif len(trades) == 9: + print("Tier: III") + elif len(trades) == 6: + print("Tier: II") + elif len(trades) == 3: + print("Tier: I") + tradestring = "Activity: " + precomma = False + tradeindex = 1 + for trade in trades: + if precomma: + tradestring += " · " + tradestring += str(tradeindex) + ". " + trade + "" + precomma = True + tradeindex += 1 + print(tradestring) + +if services > 0: + print("Category: Services") + if services == 5: + print("Tier: V") + elif services == 4: + print("Tier: IV") + elif services == 3: + print("Tier: III") + elif services == 2: + print("Tier: II") + elif services == 1: + print("Tier: I") + servicestring = "Activity: " + precomma = False + serviceindex = 1 + if artshop: + servicestring += str(serviceindex) + ". art shop" + precomma = True + serviceindex += 1 + if artstudio: + if precomma: + servicestring += " · " + servicestring += str(serviceindex) + ". art studio" + precomma = True + serviceindex += 1 + if recycledart: + if precomma: + servicestring += " · " + servicestring += str(serviceindex) + ". recycled art – " + datetime.datetime.strftime(recycledart,"%-d %B").lower() + precomma = True + serviceindex += 1 + if mastery: + if precomma: + servicestring += " · " + servicestring += str(serviceindex) + ". masteries" + precomma = True + serviceindex += 1 + if donations: + if precomma: + servicestring += " · " + servicestring += str(serviceindex) + ". " + if len(donations) == 1: + servicestring += "deck donations" + else: + servicestring += "deck donations: 🌸 🌸" + print(servicestring)