Skip to content

Commit d6f6c50

Browse files
Implement error logging for config setup (#431)
1 parent a9763c2 commit d6f6c50

2 files changed

Lines changed: 59 additions & 42 deletions

File tree

cogs/startup.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,26 +41,25 @@ async def on_ready(self) -> None:
4141
"""
4242
if settings["DISCORD_LOG_CHANNEL_WEBHOOK_URL"]:
4343
discord_logging_handler: logging.Handler = DiscordHandler(
44-
self.bot.user.name if self.bot.user else "TeXBot",
45-
settings["DISCORD_LOG_CHANNEL_WEBHOOK_URL"],
44+
service_name=self.bot.user.name if self.bot.user else "TeX-Bot",
45+
webhook_url=settings["DISCORD_LOG_CHANNEL_WEBHOOK_URL"],
4646
avatar_url=(
4747
self.bot.user.avatar.url
4848
if self.bot.user and self.bot.user.avatar
4949
else None
5050
),
5151
)
5252
discord_logging_handler.setLevel(logging.WARNING)
53-
# noinspection SpellCheckingInspection
5453
discord_logging_handler.setFormatter(
55-
logging.Formatter("{levelname} | {message}", style="{"),
54+
logging.Formatter("{levelname} | {message}", style="{")
5655
)
5756

5857
logger.addHandler(discord_logging_handler)
5958

6059
else:
6160
logger.warning(
6261
"DISCORD_LOG_CHANNEL_WEBHOOK_URL was not set, "
63-
"so error logs will not be sent to the Discord log channel.",
62+
"so error logs will not be sent to the Discord log channel."
6463
)
6564

6665
try:

config.py

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import dotenv
2121
import validators
22+
from discord_logging.handler import DiscordHandler
2223

2324
from exceptions import (
2425
ImproperlyConfiguredError,
@@ -177,30 +178,42 @@ def _setup_discord_bot_token(cls) -> None:
177178
cls._settings["DISCORD_BOT_TOKEN"] = raw_discord_bot_token
178179

179180
@classmethod
180-
def _setup_discord_log_channel_webhook_url(cls) -> None:
181+
def _setup_discord_log_channel_webhook(cls) -> "Logger":
181182
raw_discord_log_channel_webhook_url: str = os.getenv(
182-
"DISCORD_LOG_CHANNEL_WEBHOOK_URL",
183-
"",
183+
"DISCORD_LOG_CHANNEL_WEBHOOK_URL", ""
184184
)
185185

186-
DISCORD_LOG_CHANNEL_WEBHOOK_URL_IS_VALID: Final[bool] = bool(
187-
not raw_discord_log_channel_webhook_url
188-
or (
189-
validators.url(raw_discord_log_channel_webhook_url)
190-
and raw_discord_log_channel_webhook_url.startswith(
191-
"https://discord.com/api/webhooks/",
192-
)
193-
),
194-
)
195-
if not DISCORD_LOG_CHANNEL_WEBHOOK_URL_IS_VALID:
186+
if raw_discord_log_channel_webhook_url and (
187+
not validators.url(raw_discord_log_channel_webhook_url)
188+
or not raw_discord_log_channel_webhook_url.startswith(
189+
"https://discord.com/api/webhooks/"
190+
)
191+
):
196192
INVALID_DISCORD_LOG_CHANNEL_WEBHOOK_URL_MESSAGE: Final[str] = (
197193
"DISCORD_LOG_CHANNEL_WEBHOOK_URL must be a valid webhook URL "
198194
"that points to a discord channel where logs should be displayed."
199195
)
200196
raise ImproperlyConfiguredError(INVALID_DISCORD_LOG_CHANNEL_WEBHOOK_URL_MESSAGE)
201197

198+
webhook_config_logger: Logger = logging.getLogger("_temp_webhook_config")
199+
200+
if raw_discord_log_channel_webhook_url:
201+
discord_logging_handler: logging.Handler = DiscordHandler(
202+
service_name="TeX-Bot", webhook_url=raw_discord_log_channel_webhook_url
203+
)
204+
205+
discord_logging_handler.setLevel(logging.WARNING)
206+
207+
discord_logging_handler.setFormatter(
208+
logging.Formatter("{levelname} | {message}", style="{")
209+
)
210+
211+
webhook_config_logger.addHandler(discord_logging_handler)
212+
202213
cls._settings["DISCORD_LOG_CHANNEL_WEBHOOK_URL"] = raw_discord_log_channel_webhook_url
203214

215+
return webhook_config_logger
216+
204217
@classmethod
205218
def _setup_discord_guild_id(cls) -> None:
206219
raw_discord_guild_id: str | None = os.getenv("DISCORD_GUILD_ID")
@@ -708,30 +721,35 @@ def _setup_env_variables(cls) -> None:
708721

709722
dotenv.load_dotenv()
710723

711-
cls._setup_logging()
712-
cls._setup_discord_bot_token()
713-
cls._setup_discord_log_channel_webhook_url()
714-
cls._setup_discord_guild_id()
715-
cls._setup_group_full_name()
716-
cls._setup_group_short_name()
717-
cls._setup_ping_command_easter_egg_probability()
718-
cls._setup_welcome_messages()
719-
cls._setup_roles_messages()
720-
cls._setup_organisation_id()
721-
cls._setup_members_list_auth_session_cookie()
722-
cls._setup_membership_perks_url()
723-
cls._setup_purchase_membership_url()
724-
cls._setup_send_introduction_reminders()
725-
cls._setup_send_introduction_reminders_delay()
726-
cls._setup_send_introduction_reminders_interval()
727-
cls._setup_send_get_roles_reminders()
728-
cls._setup_send_get_roles_reminders_delay()
729-
cls._setup_advanced_send_get_roles_reminders_interval()
730-
cls._setup_statistics_days()
731-
cls._setup_statistics_roles()
732-
cls._setup_moderation_document_url()
733-
cls._setup_strike_performed_manually_warning_location()
734-
cls._setup_auto_add_committee_to_threads()
724+
webhook_config_logger: Logger = cls._setup_discord_log_channel_webhook()
725+
726+
try:
727+
cls._setup_logging()
728+
cls._setup_discord_bot_token()
729+
cls._setup_discord_guild_id()
730+
cls._setup_group_full_name()
731+
cls._setup_group_short_name()
732+
cls._setup_ping_command_easter_egg_probability()
733+
cls._setup_welcome_messages()
734+
cls._setup_roles_messages()
735+
cls._setup_organisation_id()
736+
cls._setup_members_list_auth_session_cookie()
737+
cls._setup_membership_perks_url()
738+
cls._setup_purchase_membership_url()
739+
cls._setup_send_introduction_reminders()
740+
cls._setup_send_introduction_reminders_delay()
741+
cls._setup_send_introduction_reminders_interval()
742+
cls._setup_send_get_roles_reminders()
743+
cls._setup_send_get_roles_reminders_delay()
744+
cls._setup_advanced_send_get_roles_reminders_interval()
745+
cls._setup_statistics_days()
746+
cls._setup_statistics_roles()
747+
cls._setup_moderation_document_url()
748+
cls._setup_strike_performed_manually_warning_location()
749+
cls._setup_auto_add_committee_to_threads()
750+
except ImproperlyConfiguredError as improper_config_error:
751+
webhook_config_logger.error(improper_config_error.message) # noqa: TRY400
752+
raise improper_config_error from improper_config_error
735753

736754
cls._is_env_variables_setup = True
737755

0 commit comments

Comments
 (0)