added config file
This commit is contained in:
+11
-3
@@ -1,8 +1,13 @@
|
||||
from io import TextIOWrapper
|
||||
import asyncpraw as praw
|
||||
import os
|
||||
|
||||
from typing import Final
|
||||
from macros import *
|
||||
import json
|
||||
|
||||
|
||||
BK_WEEKLY: Final[str] = "bk_weekly_art_posts"
|
||||
BK_WEEK: Final[str] = "bk_week"
|
||||
|
||||
|
||||
class Bot:
|
||||
@@ -12,6 +17,8 @@ class Bot:
|
||||
username: str = os.environ.get("ASSISTANT_R_NAME")
|
||||
password: str = os.environ.get("ASSISTANT_R_PASS")
|
||||
|
||||
fetch_limit = 0
|
||||
|
||||
useragent: str =\
|
||||
f"{username} by u/RandomPersonDotExe aka u/Byte_Dice"\
|
||||
if r_id == "YmZjr4zLr2qtHdpQXtj0sBOOdJzrXQ"\
|
||||
@@ -48,6 +55,7 @@ class Bot:
|
||||
|
||||
return False
|
||||
|
||||
async def change_sr(self, new_sr) -> bool:
|
||||
self.sr = await self.r.subreddit(new_sr)
|
||||
async def update_cfg(self, new_cfg: dict) -> bool:
|
||||
self.sr = await self.r.subreddit(new_cfg[BK_WEEK]["subreddits"])
|
||||
self.fetch_limit = new_cfg[BK_WEEK]["fetch_limit"]
|
||||
return True
|
||||
+1
-1
@@ -57,7 +57,7 @@ async def bk_week_add(mention: models.Comment, bot: botPy.Bot):
|
||||
short_url = mention.submission.shortlink
|
||||
|
||||
r = ""
|
||||
bd = bot.data[data.BK_WEEKLY]
|
||||
bd = bot.data[botPy.BK_WEEKLY]
|
||||
# TODO: ask if the messages should be changed
|
||||
if short_url not in bd:
|
||||
posts.add_post_url(bot, short_url)
|
||||
|
||||
+42
-22
@@ -1,13 +1,12 @@
|
||||
import os
|
||||
import json
|
||||
from typing import Final
|
||||
import time
|
||||
|
||||
import bot as botPy
|
||||
from macros import *
|
||||
|
||||
|
||||
BK_WEEKLY: Final[str] = "bk_weekly_art_posts"
|
||||
DATA_PATH = os.path.abspath(os.path.join(os.path.join(os.getcwd(), "data")))
|
||||
|
||||
|
||||
class PostData:
|
||||
@@ -67,9 +66,7 @@ class PostData:
|
||||
|
||||
|
||||
def read_data(bot: botPy.Bot) -> bool:
|
||||
# Intentionally unreadable >:]
|
||||
data_path = os.path.abspath(os.path.join(os.path.join(os.getcwd(), "data")))
|
||||
r_path = os.path.join(data_path, "reddit_data.json")
|
||||
r_path = os.path.join(DATA_PATH, "reddit_data.json")
|
||||
|
||||
if os.path.isfile(r_path):
|
||||
bot.data_f = open(r_path, "r+")
|
||||
@@ -79,11 +76,11 @@ def read_data(bot: botPy.Bot) -> bool:
|
||||
return False
|
||||
|
||||
py_print("reddit_data.json not found, creating new from preset...")
|
||||
with open(os.path.join(data_path, "reddit_data_preset.json", "r")) as f:
|
||||
with open(os.path.join(DATA_PATH, "reddit_data_preset.json", "r")) as f:
|
||||
data_preset_json = json.load(f)
|
||||
|
||||
data_preset_json[BK_WEEKLY].pop("EXAMPLE VALUE", None)
|
||||
data_preset_json[BK_WEEKLY].pop("EXAMPLE VALUE DELETED", None)
|
||||
data_preset_json[botPy.BK_WEEKLY].pop("EXAMPLE VALUE", None)
|
||||
data_preset_json[botPy.BK_WEEKLY].pop("EXAMPLE VALUE DELETED", None)
|
||||
|
||||
with open(r_path, "w") as f:
|
||||
json.dump(data_preset_json, f, indent = 2)
|
||||
@@ -104,9 +101,32 @@ def write_data(bot: botPy.Bot) -> bool:
|
||||
return True
|
||||
|
||||
|
||||
async def read_cfg(bot: botPy.Bot) -> bool:
|
||||
r_path = os.path.join(DATA_PATH, "cfg.json")
|
||||
|
||||
if os.path.isfile(r_path):
|
||||
bot.data_f = open(r_path, "r+")
|
||||
|
||||
else:
|
||||
py_print("cfg.json not found, creating new from preset...")
|
||||
with open(os.path.join(DATA_PATH, "cfg_default.json", "r")) as f:
|
||||
data_preset_json = json.load(f)
|
||||
|
||||
with open(r_path, "w") as f:
|
||||
json.dump(data_preset_json, f, indent = 2)
|
||||
|
||||
bot.data_f = open(r_path, "r+")
|
||||
|
||||
data_str = bot.data_f.read()
|
||||
json_data = json.loads(data_str)
|
||||
await bot.update_cfg(json_data)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def add_post_to_data(bot: botPy.Bot, new_data: PostData, bypass_conditions: bool = False) -> bool:
|
||||
if bypass_conditions:
|
||||
bot.data[BK_WEEKLY][new_data.url] = new_data.to_json()
|
||||
bot.data[botPy.BK_WEEKLY][new_data.url] = new_data.to_json()
|
||||
if bot.args["dev"]:
|
||||
py_print(f"Added post \"{new_data.url}\" (Conditions bypassed)")
|
||||
return True
|
||||
@@ -114,14 +134,14 @@ def add_post_to_data(bot: botPy.Bot, new_data: PostData, bypass_conditions: bool
|
||||
# not sure what this is for
|
||||
updated = False
|
||||
|
||||
if new_data.url not in bot.data[BK_WEEKLY] or updated:
|
||||
bot.data[BK_WEEKLY][new_data.url] = new_data.to_json()
|
||||
if new_data.url not in bot.data[botPy.BK_WEEKLY] or updated:
|
||||
bot.data[botPy.BK_WEEKLY][new_data.url] = new_data.to_json()
|
||||
if bot.args["dev"]:
|
||||
py_print(f"Added post \"{new_data.url}\"")
|
||||
return True
|
||||
|
||||
if "removed" not in bot.data[BK_WEEKLY][new_data.url]:
|
||||
updated = new_data.upvotes != bot.data[BK_WEEKLY][new_data.url]["post_data"]
|
||||
if "removed" not in bot.data[botPy.BK_WEEKLY][new_data.url]:
|
||||
updated = new_data.upvotes != bot.data[botPy.BK_WEEKLY][new_data.url]["post_data"]
|
||||
|
||||
else:
|
||||
py_print(f"Failed to add post \"{new_data.url}\": Removed flag is True.")
|
||||
@@ -129,15 +149,15 @@ def add_post_to_data(bot: botPy.Bot, new_data: PostData, bypass_conditions: bool
|
||||
|
||||
|
||||
def set_approve_post(bot: botPy.Bot, approved: bool, url: str) -> bool:
|
||||
if not hasattr(bot.data[BK_WEEKLY][url], "removed"):
|
||||
bot.data[BK_WEEKLY][url]["approved"]["by_human"] = approved
|
||||
if not hasattr(bot.data[botPy.BK_WEEKLY][url], "removed"):
|
||||
bot.data[botPy.BK_WEEKLY][url]["approved"]["by_human"] = approved
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def remove_post(bot: botPy.Bot, url: str, removed_by: str = "UNKNOWN", reason: str = "None") -> bool:
|
||||
weekly = bot.data[BK_WEEKLY]
|
||||
weekly = bot.data[botPy.BK_WEEKLY]
|
||||
|
||||
if url in weekly:
|
||||
weekly[url] = {
|
||||
@@ -153,7 +173,7 @@ def remove_post(bot: botPy.Bot, url: str, removed_by: str = "UNKNOWN", reason: s
|
||||
|
||||
def remove_old_posts(bot: botPy.Bot, max_age: int) -> bool:
|
||||
now = int(time.time())
|
||||
weekly = bot.data[BK_WEEKLY]
|
||||
weekly = bot.data[botPy.BK_WEEKLY]
|
||||
remove: list[str] = []
|
||||
|
||||
for url, post in weekly.items():
|
||||
@@ -174,10 +194,10 @@ def set_vote_post(
|
||||
from_dc: bool = False,
|
||||
remove_vote: bool = False,
|
||||
) -> bool:
|
||||
if url not in bot.data[BK_WEEKLY]:
|
||||
if url not in bot.data[botPy.BK_WEEKLY]:
|
||||
return False
|
||||
|
||||
votes = bot.data[BK_WEEKLY][url]["votes"]
|
||||
votes = bot.data[botPy.BK_WEEKLY][url]["votes"]
|
||||
re_voters: set[str] = set(votes["voters_re"])
|
||||
dc_voters: set[int] = set(votes["voters_dc"])
|
||||
mod_voters: set[int] = set(votes["mod_voters"])
|
||||
@@ -194,8 +214,8 @@ def set_vote_post(
|
||||
return False
|
||||
target_voters.add(user)
|
||||
|
||||
bot.data[BK_WEEKLY][url]["votes"]["voters_re"] = list(re_voters)
|
||||
bot.data[BK_WEEKLY][url]["votes"]["voters_dc"] = list(dc_voters)
|
||||
bot.data[BK_WEEKLY][url]["votes"]["mod_voters"] = list(mod_voters)
|
||||
bot.data[botPy.BK_WEEKLY][url]["votes"]["voters_re"] = list(re_voters)
|
||||
bot.data[botPy.BK_WEEKLY][url]["votes"]["voters_dc"] = list(dc_voters)
|
||||
bot.data[botPy.BK_WEEKLY][url]["votes"]["mod_voters"] = list(mod_voters)
|
||||
|
||||
return True
|
||||
|
||||
+8
-5
@@ -26,17 +26,20 @@ async def main():
|
||||
if bot.args["dev"]:
|
||||
py_print("ARGS:", str(bot.args))
|
||||
|
||||
py_print("Reading data...")
|
||||
dr = data.read_data(bot)
|
||||
py_print("Reading config file...")
|
||||
await data.read_cfg(bot)
|
||||
|
||||
py_print("Reading Reddit data...")
|
||||
rd = data.read_data(bot)
|
||||
data_retries = 0
|
||||
|
||||
while not dr:
|
||||
while not rd :
|
||||
data_retries += 1
|
||||
time.sleep(1)
|
||||
py_print(f"Failed to read data: File doesn't exist yet. Retrying (#{data_retries}/5)...")
|
||||
dr = data.read_data(bot)
|
||||
rd = data.read_data(bot)
|
||||
|
||||
if data_retries == 5 and not dr:
|
||||
if data_retries == 5 and not rd:
|
||||
raise Exception("Couldn't read reddit_data.json: File doesn't exist")
|
||||
|
||||
py_print("Successfully read data!")
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ async def fetch_posts_with_flair(bot: botPy.Bot, flair_name: str) -> list[models
|
||||
posts: list[models.Submission] = []
|
||||
|
||||
# ~36 OG-art posts per week, round limit to 50, 75 or 100
|
||||
async for post in bot.sr.search(f"flair:\"{flair_name}\"", sort="new", limit=10):
|
||||
async for post in bot.sr.search(f"flair:\"{flair_name}\"", sort="new", limit=bot.fetch_limit):
|
||||
posts.append(post)
|
||||
|
||||
return posts
|
||||
|
||||
@@ -82,7 +82,7 @@ async def json_to_func(v: dict, bot: botPy.Bot) -> dict:
|
||||
case "set_approve_post": r = data .set_approve_post (bot, *v["args"])
|
||||
case "set_vote_post": r = data .set_vote_post (bot, *v["args"])
|
||||
case "remove_old_posts": r = data .remove_old_posts (bot, *v["args"])
|
||||
case "change_sr": r = await bot .change_sr (*v["args"])
|
||||
case "update_cfg": r = await bot .update_cfg (*v["args"])
|
||||
case "stop_praw": r = await bot .stop ()
|
||||
case _: value_supported = False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user