From 69c010fb5eba6c51f6d96af346fcf2cc9298f259 Mon Sep 17 00:00:00 2001 From: Ben Brady Date: Thu, 21 Oct 2021 15:25:37 +0100 Subject: [PATCH] Changed how Guild's settings are stored --- src/Cogs/RepostCog.py | 2 +- src/Data/Settings.json | 16 +++---- src/Modules/Guilds.py | 100 ++++++++++++++++++++++------------------- 3 files changed, 60 insertions(+), 58 deletions(-) diff --git a/src/Cogs/RepostCog.py b/src/Cogs/RepostCog.py index abb6a00..b4eff95 100644 --- a/src/Cogs/RepostCog.py +++ b/src/Cogs/RepostCog.py @@ -72,7 +72,7 @@ async def Process(self, msg: discord.Message, Attachment: discord.Attachment): if Delta < Guild.rTimeout: BotMSG = await OriginMSG.reply( - Guild.GetMsg("rDetect").format( + Guild.msgRepostDetected.format( AUTHOR=msg.author.mention, author=msg.author.name, ORIGIN=OriginMSG.author.mention, diff --git a/src/Data/Settings.json b/src/Data/Settings.json index 5dfc9f5..f015a7d 100644 --- a/src/Data/Settings.json +++ b/src/Data/Settings.json @@ -1,12 +1,8 @@ { - "Reposts": { - "Enabled": true, - "Threshold":5, - "Delete": true, - "Channels": [864282912631291905], - "Timeout":604800 - }, - "Messages":{ - "rDetect": ["> {AUTHOR},You seem to have posted a repost"] - } + "rEnabled": true, + "rDelete": true, + "rTimeout": 604800, + "rThreshold": 5, + "rChannels": [864282912631291905], + "rDetected_msg": ["> {AUTHOR},You seem to have posted a repost"] } \ No newline at end of file diff --git a/src/Modules/Guilds.py b/src/Modules/Guilds.py index 35cf533..de22534 100644 --- a/src/Modules/Guilds.py +++ b/src/Modules/Guilds.py @@ -1,26 +1,27 @@ -from Modules import Reposts, Logger +from typing import Dict, List +from Modules import Logger import json import random import sqlite3 -Log = Logger.Get("Guilds") -Store = "./Data/Database.db" -SettingsStore = "./Data/Settings.json" -conn = sqlite3.connect(Store) -Guilds = {} MaxCache = 250 +DBSTORE = "./Data/Database.db" +SETTINGS_STORE = "./Data/Settings.json" +Log = Logger.Get("Guilds") +conn = sqlite3.connect(DBSTORE) -class Guild: - rEnabled = bool - rDelete = bool - rThreshold = int - rChannels = list - rTimeout = int - - Messages = dict +Guilds = {} +class Guild: + rEnabled:bool; "Repost Filtering Enabled?" + rDelete:bool; "Reposts Should Be Deleted?" + rTimeout:int; "Time in seconds for a post to be too old" + rThreshold:int; "Repost Threshold" + rChannels:List[int]; "The list of channels for reposts to be captured" + rDetected_msg:List[str]; "The list of recently deleted messages" + def __init__(self, ID): Log.debug(f"Guild {ID} retrieved") self.ID = ID @@ -32,64 +33,69 @@ def __init__(self, ID): if Settings: self.LoadJSON(Settings[0]) else: - with open(SettingsStore) as fObj: + with open(SETTINGS_STORE) as fObj: self.LoadJSON(fObj.read()) with conn: conn.execute( "Insert into GUILDS values(?,?);", - (self.ID, self.SettingJSON) + (self.ID, self.Settingjson) ) @property - def SettingJSON(self) -> str: + def Settingjson(self) -> str: return json.dumps(self.Settings, indent=4, sort_keys=True) @property def Settings(self) -> dict: return { - "Reposts": { - "Enabled": self.rEnabled, - "Channels": self.rChannels, - "Delete": self.rDelete, - "Timeout": self.rTimeout - }, - "Messages": self.Messages + "rEnabled": self.rEnabled, + "rDelete": self.rDelete, + "rTimeout": self.rTimeout, + "rThreshold": self.rThreshold, + "rChannels": self.rChannels, + "rDetected_msg": self.rDetected_msg } - def GetMsg(self, msg: str) -> str: - Messages = self.Messages[msg] - return random.choice(Messages) + @property + def msgRepostDetected(self) -> str: + return random.choice(self.rDetected_msg) def Save(self): + Log.debug(f"Saving guild{self.ID}'s Settings") with conn: conn.execute( "Update GUILDS set SETTINGS = ? where ID = ?;", - (self.SettingJSON, self.ID) + (self.Settingjson, self.ID) ) def LoadJSON(self, JSON: str): + TypeLookup = { + "rEnabled": [bool], + "rDelete": [bool], + "rTimeout": [int], + "rThreshold": [list,str], + "rChannels": [list,int], + "rDetected_msg": [list,int] + } + + Log.debug(f"Loading Guild {self.ID} from JSON") JSON = json.loads(JSON) - - assert type(JSON["Reposts"]["Enabled"]) == bool - assert type(JSON["Reposts"]["Channels"]) == list - assert type(JSON["Reposts"]["Delete"]) == bool - assert type(JSON["Reposts"]["Timeout"]) == int - assert type(JSON["Messages"]["rDetect"]) == list + #! Data Validation Turned Off + # for key,value in JSON.items(): + # if isinstance(TypeLookup[key][0], list): + # for x in value: + # assert isinstance(x,TypeLookup[key][1]) + # else: + # assert isinstance(value,TypeLookup[key][0]) + + self.rEnabled = JSON["rEnabled"] + self.rDelete = JSON["rDelete"] + self.rTimeout = JSON["rTimeout"] + self.rThreshold = JSON["rThreshold"] + self.rChannels = JSON["rChannels"] + self.rDetected_msg = JSON["rDetected_msg"] - for x in JSON["Reposts"]["Channels"]: - assert type(x) == int - for x in JSON["Messages"]["rDetect"]: - assert type(x) == str - - self.rEnabled = JSON["Reposts"]["Enabled"] - self.rChannels = JSON["Reposts"]["Channels"] - self.rDelete = JSON["Reposts"]["Delete"] - self.rTimeout = JSON["Reposts"]["Timeout"] - - self.Messages = { - "rDetect": JSON["Messages"]["rDetect"] - } self.Save()