2023-08-19 14:16:30 +02:00
|
|
|
import orjson
|
|
|
|
|
import discord
|
|
|
|
|
|
|
|
|
|
from src.utils.SqlConnector import sql
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from src.utils.variousclasses import models, characters
|
|
|
|
|
|
2023-08-19 14:17:16 +02:00
|
|
|
|
2023-08-19 14:16:30 +02:00
|
|
|
class Guild:
|
|
|
|
|
def __init__(self, id: int):
|
|
|
|
|
self.id = id
|
|
|
|
|
self.load()
|
|
|
|
|
|
|
|
|
|
def getDbData(self):
|
|
|
|
|
with sql.mainDb as con:
|
|
|
|
|
curs_data = con.cursor()
|
|
|
|
|
curs_data.execute("SELECT * FROM setup_data WHERE guild_id = ?", (self.id,))
|
|
|
|
|
data = curs_data.fetchone()
|
|
|
|
|
self.isInDb = data is not None
|
|
|
|
|
if not self.isInDb:
|
|
|
|
|
self.updateDbData()
|
|
|
|
|
with sql.mainDb as con:
|
|
|
|
|
curs_data = con.cursor()
|
2023-08-19 14:17:16 +02:00
|
|
|
curs_data.execute(
|
|
|
|
|
"SELECT * FROM setup_data WHERE guild_id = ?", (self.id,)
|
|
|
|
|
)
|
2023-08-19 14:16:30 +02:00
|
|
|
data = curs_data.fetchone()
|
|
|
|
|
data = orjson.loads(data[1])
|
|
|
|
|
self.premium = data["premium"]
|
|
|
|
|
self.channels = data["channels"]
|
|
|
|
|
self.api_keys = data["api_keys"]
|
|
|
|
|
if self.premium:
|
2023-08-19 14:17:16 +02:00
|
|
|
self.premium_expiration = datetime.fromisoformat(
|
|
|
|
|
data.get("premium_expiration", None)
|
|
|
|
|
)
|
2023-08-19 14:16:30 +02:00
|
|
|
self.checkPremiumExpires()
|
|
|
|
|
else:
|
|
|
|
|
self.premium_expiration = None
|
|
|
|
|
|
|
|
|
|
def checkPremiumExpires(self):
|
|
|
|
|
if self.premium_expiration is None:
|
|
|
|
|
self.premium = False
|
|
|
|
|
return
|
|
|
|
|
if self.premium_expiration < datetime.now():
|
|
|
|
|
self.premium = False
|
|
|
|
|
self.premium_expiration = None
|
|
|
|
|
self.updateDbData()
|
|
|
|
|
|
|
|
|
|
def updateDbData(self):
|
|
|
|
|
if self.isInDb:
|
|
|
|
|
data = {
|
|
|
|
|
"guild_id": self.id,
|
|
|
|
|
"premium": self.premium,
|
|
|
|
|
"channels": self.channels,
|
|
|
|
|
"api_keys": self.api_keys,
|
2023-08-19 14:17:16 +02:00
|
|
|
"premium_expiration": self.premium_expiration.isoformat()
|
|
|
|
|
if self.premium
|
|
|
|
|
else None,
|
2023-08-19 14:16:30 +02:00
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
data = {
|
|
|
|
|
"guild_id": self.id,
|
|
|
|
|
"premium": False,
|
|
|
|
|
"channels": {},
|
|
|
|
|
"api_keys": {},
|
|
|
|
|
"premium_expiration": None,
|
|
|
|
|
}
|
|
|
|
|
with sql.mainDb as con:
|
|
|
|
|
curs_data = con.cursor()
|
|
|
|
|
if self.isInDb:
|
2023-08-19 14:17:16 +02:00
|
|
|
curs_data.execute(
|
|
|
|
|
"UPDATE setup_data SET guild_settings = ? WHERE guild_id = ?",
|
|
|
|
|
(orjson.dumps(data), self.id),
|
|
|
|
|
)
|
2023-08-19 14:16:30 +02:00
|
|
|
else:
|
2023-08-19 14:17:16 +02:00
|
|
|
curs_data.execute(
|
|
|
|
|
"INSERT INTO setup_data (guild_id, guild_settings) VALUES (?, ?)",
|
|
|
|
|
(self.id, orjson.dumps(data)),
|
|
|
|
|
)
|
2023-08-19 14:16:30 +02:00
|
|
|
self.isInDb = True
|
2023-08-19 14:17:16 +02:00
|
|
|
|
2023-08-19 14:16:30 +02:00
|
|
|
def load(self):
|
|
|
|
|
self.getDbData()
|
2023-08-19 14:17:16 +02:00
|
|
|
|
2023-08-20 12:42:02 +02:00
|
|
|
def addChannel(
|
|
|
|
|
self, channel: discord.TextChannel | str, model: str, character: str
|
|
|
|
|
):
|
|
|
|
|
if isinstance(channel, discord.TextChannel):
|
|
|
|
|
channel = channel.id
|
|
|
|
|
self.channels[str(channel)] = {
|
2023-08-19 14:16:30 +02:00
|
|
|
"model": model,
|
|
|
|
|
"character": character,
|
|
|
|
|
}
|
|
|
|
|
self.updateDbData()
|
2023-08-19 14:17:16 +02:00
|
|
|
|
2023-08-20 12:42:02 +02:00
|
|
|
def delChannel(self, channel: discord.TextChannel | str):
|
|
|
|
|
if isinstance(channel, discord.TextChannel):
|
|
|
|
|
channel = channel.id
|
|
|
|
|
del self.channels[str(channel)]
|
2023-08-19 14:16:30 +02:00
|
|
|
self.updateDbData()
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def sanitizedChannels(self) -> dict:
|
|
|
|
|
if self.premium:
|
|
|
|
|
return self.channels
|
|
|
|
|
if len(self.channels) == 0:
|
|
|
|
|
return {}
|
2023-08-20 12:42:02 +02:00
|
|
|
dictionary = {
|
2023-08-19 14:16:30 +02:00
|
|
|
list(self.channels.keys())[0]: {
|
|
|
|
|
"model": models.matchingDict[models.default],
|
|
|
|
|
"character": characters.matchingDict[characters.default],
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-08-20 12:42:02 +02:00
|
|
|
if self.channels.get("serverwide", None) is not None:
|
|
|
|
|
dictionary["serverwide"] = self.channels["serverwide"]
|
|
|
|
|
return dictionary
|
2023-08-19 14:16:30 +02:00
|
|
|
|
2023-08-20 12:42:02 +02:00
|
|
|
def getChannelInfo(self, channel: str) -> dict:
|
2023-08-19 14:16:30 +02:00
|
|
|
return self.sanitizedChannels.get(channel, None)
|
|
|
|
|
|
|
|
|
|
def addApiKey(self, api: str, key: str):
|
|
|
|
|
self.api_keys[api] = key
|
2023-08-19 14:17:16 +02:00
|
|
|
self.updateDbData()
|