From ecb7dafcdfa6715415f2d965f15fad0205bada94 Mon Sep 17 00:00:00 2001 From: ByteDice Date: Tue, 4 Feb 2025 20:33:41 +0100 Subject: [PATCH] made post data get added to JSON --- data/reddit_data_preset.json | 28 ++++++++---- src/python/main.py | 87 +++++++++++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 10 deletions(-) diff --git a/data/reddit_data_preset.json b/data/reddit_data_preset.json index f7d3713..6233ec7 100644 --- a/data/reddit_data_preset.json +++ b/data/reddit_data_preset.json @@ -1,13 +1,23 @@ { "file_created_correctly": true, - "bk_weekly_art_posts": [ - { - "url": "EXAMPLE VALUE DO NOT INCLUDE", - "date_unix": 1738614657, - "added_by_human": false, - "added_by_bot": true, - "approved_by_human": true, - "approved_by_ris": true + "bk_weekly_art_posts": { + "EXAMPLE VALUE DO NOT INCLUDE IN FINAL": { + "post_data": { + "title": "I JUST BOUGHT THE CONTINENT OF NORTH AMERICA FOR A DOLLAR!", + "upvotes": 69420, + "date_unix": 1738614657, + "media_type": null, + "media_urls": [] + }, + "nominated_by_human": true, + "added": { + "by_human": false, + "by_bot": true + }, + "approved": { + "by_human": true, + "by_ris": true + } } - ] + } } \ No newline at end of file diff --git a/src/python/main.py b/src/python/main.py index f41a455..3cd59f5 100644 --- a/src/python/main.py +++ b/src/python/main.py @@ -5,6 +5,10 @@ import os import json import emoji import sys +from typing import Final + + +BK_WEEKLY: Final[str] = "bk_weekly_art_posts" class Bot: @@ -23,6 +27,54 @@ class Bot: data: dict = {} +class PostData: + def __init__( + self, + url: str, + title: str, + upvotes: int, + date_unix: int, + media_type: str, + media_urls: list[str], + nominated_by_human: bool = False, + added_by_human: bool = False, + added_by_bot: bool = False, + approved_by_human: bool = False, + approved_by_ris: bool = False + ): + self.url = url + self.title = title + self.upvotes = upvotes + self.date_unix = date_unix + self.media_type = media_type + self.media_urls = media_urls + self.nominated_by_human = nominated_by_human + self.added_by_human = added_by_human + self.added_by_bot = added_by_bot + self.approved_by_human = approved_by_human + self.approved_by_ris = approved_by_ris + + def to_json(self): + return { + "post_data": { + "title": self.title, + "upvotes": self.upvotes, + "date_unix": self.date_unix, + "media_type": self.media_type, + "media_urls": self.media_urls + }, + "nominated_by_human": self.nominated_by_human, + "added": { + "by_human": self.added_by_human, + "by_bot": self.added_by_bot + }, + "approved": { + "by_human": self.approved_by_human, + "by_ris": self.approved_by_ris + } + } + + def main(): sys.stdout.reconfigure(encoding="utf-8") @@ -48,6 +100,21 @@ def main(): f"\n {media_urls}\n" ) + update_post_in_data( + bot, + PostData( + post.shortlink, + post.title, + post.score, + int(post.created_utc), + media[1], + media[3], + added_by_bot = True, + ) + ) + + write_data(bot) + def read_data(bot: Bot): # Intentionally unreadable >:] @@ -55,12 +122,12 @@ def read_data(bot: Bot): try: bot.data_f = open(data_path + "\\reddit_data.json", "r+") + except FileNotFoundError: print("reddit_data.json not found, creating new from preset...") with open(data_path + "\\reddit_data.json", "w") as f: f.write(open(data_path + "\\reddit_data_preset.json", "r").read()) - bot.data_f = open(data_path + "\\reddit_data.json", "r+") data_str = bot.data_f.read() @@ -110,5 +177,23 @@ def has_media(post: models.Submission) -> tuple[bool, str, int, list[str]]: return (media_type != None, media_type, media_count, media_urls) +def write_data(bot: Bot): + bot.data_f.seek(0) + json.dump(bot.data, bot.data_f, indent=2) + bot.data_f.truncate() + + +def update_post_in_data(bot: Bot, new_data: PostData): + if new_data.url not in bot.data: + bot.data[BK_WEEKLY][new_data.url] = new_data.to_json() + return + + +def remove_old_posts(bot: Bot, max_age_unix: int): + for post in bot.data[BK_WEEKLY]: + if post["date_unix"] > max_age_unix: + dict(bot.data[BK_WEEKLY]).pop(post) + + if __name__ == "__main__": main() \ No newline at end of file