111 lines
3.4 KiB
Python
111 lines
3.4 KiB
Python
"""File for Guild class."""
|
|
|
|
import json
|
|
|
|
from data.table import Table # pylint: disable=import-error
|
|
|
|
|
|
class Guild:
|
|
"""Stores a guild's information."""
|
|
|
|
def __init__(self, guild_id: int) -> None:
|
|
self._guild_id: int = guild_id
|
|
self._highscore_channel_id: int = 0
|
|
self._submission_channel_id: int = 0
|
|
self._table_map: dict = {}
|
|
self._username_length: int = 12
|
|
self._verification_channel_id: int = 0
|
|
|
|
def __str__(self) -> str:
|
|
return json.dumps(self.to_dict(), indent=4)
|
|
|
|
@classmethod
|
|
def from_dict(cls, guild_id: int, data: dict):
|
|
"""Fills out Guild object based off of passed data."""
|
|
guild = cls(guild_id)
|
|
guild.highscore_channel = data["highscore_channel_id"]
|
|
guild.submission_channel = data["submission_channel_id"]
|
|
guild.username_length = data["username_length"]
|
|
guild.verification_channel = data["verification_channel_id"]
|
|
|
|
for table_name, table_data in data["tables"].items():
|
|
table = Table.from_dict(table_name, table_data)
|
|
guild.add_table(table)
|
|
|
|
return guild
|
|
|
|
@property
|
|
def guild_id(self) -> int:
|
|
"""Getter for Guild id."""
|
|
return self._guild_id
|
|
|
|
@guild_id.setter
|
|
def guild_id(self, guild_id: int) -> None:
|
|
"""Setter for Guild id."""
|
|
self._guild_id = guild_id
|
|
|
|
@property
|
|
def highscore_channel(self) -> int:
|
|
"""Getter for highscore channel id."""
|
|
return self._highscore_channel_id
|
|
|
|
@highscore_channel.setter
|
|
def highscore_channel(self, channel: int) -> None:
|
|
"""Setter for highscore channel id."""
|
|
self._highscore_channel_id = channel
|
|
|
|
@property
|
|
def submission_channel(self) -> int:
|
|
"""Getter for submission channel id."""
|
|
return self._submission_channel_id
|
|
|
|
@submission_channel.setter
|
|
def submission_channel(self, channel: id) -> None:
|
|
"""Setter for submission channel id."""
|
|
self._submission_channel_id = channel
|
|
|
|
@property
|
|
def tables(self) -> "list[dict]":
|
|
"""Getter for list of tables in Guild."""
|
|
return self._table_map.values()
|
|
|
|
@property
|
|
def username_length(self) -> int:
|
|
"""Getter for username length."""
|
|
return self._username_length
|
|
|
|
@username_length.setter
|
|
def username_length(self, length: int) -> None:
|
|
"""Setter for username length."""
|
|
self._username_length = length
|
|
|
|
@property
|
|
def verification_channel(self) -> int:
|
|
"""Getter for verification channel id."""
|
|
return self._verification_channel_id
|
|
|
|
@verification_channel.setter
|
|
def verification_channel(self, channel: int) -> None:
|
|
"""Setter for verification channel id."""
|
|
self._verification_channel_id = channel
|
|
|
|
def add_table(self, table: Table) -> None:
|
|
"""Adds a table to table_map if it is not there."""
|
|
if table.name not in self._table_map:
|
|
self._table_map[table.name] = table
|
|
|
|
def to_dict(self) -> dict:
|
|
"""Creates python dictionary object from class data."""
|
|
data: dict = {}
|
|
|
|
data["highscore_channel_id"] = self.highscore_channel
|
|
data["submission_channel_id"] = self.submission_channel
|
|
data["tables"] = {}
|
|
data["username_length"] = self.username_length
|
|
data["verification_channel_id"] = self.verification_channel
|
|
|
|
for table in self.tables:
|
|
data["tables"][table.name] = table.to_dict()
|
|
|
|
return data
|