Added more custom exceptions and prepared everything for documentation

This commit is contained in:
2025-04-27 12:39:30 +02:00
parent 6b143d8a2d
commit 638658af75
10 changed files with 146 additions and 53 deletions

View File

@@ -17,7 +17,15 @@ from discord.abc import GuildChannel
from libbot.cache.classes import Cache
from pymongo.results import InsertOneResult
from classes.errors.pycord_user import UserNotFoundError
from classes.errors import (
UserNotFoundError,
UserAlreadyRegisteredForEventError,
UserAlreadyCompletedEventError,
UserNotRegisteredForEventError,
DiscordGuildMemberNotFoundError,
DiscordCategoryNotFoundError,
DiscordChannelNotFoundError,
)
from modules.database import col_users
from modules.utils import get_logger, restore_from_cache
@@ -192,6 +200,7 @@ class PycordUser:
cache.delete(self._get_cache_key())
# TODO Add documentation
@staticmethod
def get_defaults(user_id: Optional[int] = None, guild_id: Optional[int] = None) -> Dict[str, Any]:
return {
@@ -205,6 +214,7 @@ class PycordUser:
"completed_event_ids": [],
}
# TODO Add documentation
@staticmethod
def get_default_value(key: str) -> Any:
if key not in PycordUser.get_defaults():
@@ -226,10 +236,7 @@ class PycordUser:
event_id: ObjectId = ObjectId(event_id) if isinstance(event_id, str) else event_id
if event_id in self.registered_event_ids:
raise RuntimeError(f"User is already registered for event {event_id}")
# TODO Add a unique exception
# raise UserAlreadyRegisteredForEventError(event_name)
raise UserAlreadyRegisteredForEventError(self.id, event_id)
self.registered_event_ids.append(event_id)
@@ -240,10 +247,7 @@ class PycordUser:
event_id: ObjectId = ObjectId(event_id) if isinstance(event_id, str) else event_id
if event_id not in self.registered_event_ids:
raise RuntimeError(f"User is not registered for event {event_id}")
# TODO Add a unique exception
# raise UserNotRegisteredForEventError(event_name)
raise UserNotRegisteredForEventError(self.id, event_id)
self.registered_event_ids.remove(event_id)
@@ -254,15 +258,13 @@ class PycordUser:
event_id: ObjectId = ObjectId(event_id) if isinstance(event_id, str) else event_id
if event_id in self.completed_event_ids:
raise RuntimeError(f"User has already completed event {event_id}")
# TODO Add a unique exception
# raise UserAlreadyCompletedEventError(event_name)
raise UserAlreadyCompletedEventError(self.id, event_id)
self.completed_event_ids.append(event_id)
await self._set(cache, completed_event_ids=self.completed_event_ids)
# TODO Add documentation
async def setup_event_channel(
self,
bot: Bot,
@@ -275,23 +277,13 @@ class PycordUser:
return None
discord_member: Member | None = guild.get_member(self.id)
discord_category: GuildChannel | None = bot.get_channel(pycord_guild.category_id)
discord_category: GuildChannel | None = bot.get_channel(pycord_guild.channel_id)
if discord_member is None:
raise RuntimeError(
f"Discord guild member with ID {self.id} in guild with ID {guild.id} could not be found!"
)
# TODO Add a unique exception
# raise DiscordGuildMemberNotFoundError(self.id, guild.id)
raise DiscordGuildMemberNotFoundError(self.id, guild.id)
if discord_category is None:
raise RuntimeError(
f"Discord category with ID {pycord_guild.category_id} in guild with ID {guild.id} could not be found!"
)
# TODO Add a unique exception
# raise DiscordCategoryNotFoundError(pycord_guild.category_id, guild.id)
raise DiscordCategoryNotFoundError(pycord_guild.channel_id, guild.id)
permission_overwrites: Dict[Role | Member, PermissionOverwrite] = {
guild.default_role: PermissionOverwrite(
@@ -318,6 +310,7 @@ class PycordUser:
return channel
# TODO Add documentation
async def lock_event_channel(
self,
guild: Guild,
@@ -331,20 +324,10 @@ class PycordUser:
)
if discord_member is None:
raise RuntimeError(
f"Discord guild member with ID {self.id} in guild with ID {guild.id} could not be found!"
)
# TODO Add a unique exception
# raise DiscordGuildMemberNotFoundError(self.id, guild.id)
raise DiscordGuildMemberNotFoundError(self.id, guild.id)
if discord_member is None:
raise RuntimeError(
f"Discord channel with ID {self.event_channels[str(event_id)]} in guild with ID {guild.id} could not be found!"
)
# TODO Add a unique exception
# raise DiscordChannelNotFoundError(self.event_channels[str(event_id)], guild.id)
raise DiscordChannelNotFoundError(self.event_channels[str(event_id)], guild.id)
permission_overwrite: PermissionOverwrite = PermissionOverwrite(
view_channel=not completely,
@@ -375,8 +358,10 @@ class PycordUser:
async def set_event_stage(self, stage_id: str | ObjectId | None, cache: Optional[Cache] = None) -> None:
await self._set(cache, current_stage_id=stage_id if isinstance(stage_id, str) else ObjectId(stage_id))
# TODO Add documentation
async def jail(self, cache: Optional[Cache] = None) -> None:
await self._set(cache, is_jailed=True)
# TODO Add documentation
async def unjail(self, cache: Optional[Cache] = None) -> None:
await self._set(cache, is_jailed=False)