|
19 | 19 |
|
20 | 20 | import dotenv |
21 | 21 | import validators |
| 22 | +from discord_logging.handler import DiscordHandler |
22 | 23 |
|
23 | 24 | from exceptions import ( |
24 | 25 | ImproperlyConfiguredError, |
@@ -177,30 +178,42 @@ def _setup_discord_bot_token(cls) -> None: |
177 | 178 | cls._settings["DISCORD_BOT_TOKEN"] = raw_discord_bot_token |
178 | 179 |
|
179 | 180 | @classmethod |
180 | | - def _setup_discord_log_channel_webhook_url(cls) -> None: |
| 181 | + def _setup_discord_log_channel_webhook(cls) -> "Logger": |
181 | 182 | raw_discord_log_channel_webhook_url: str = os.getenv( |
182 | | - "DISCORD_LOG_CHANNEL_WEBHOOK_URL", |
183 | | - "", |
| 183 | + "DISCORD_LOG_CHANNEL_WEBHOOK_URL", "" |
184 | 184 | ) |
185 | 185 |
|
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 | + ): |
196 | 192 | INVALID_DISCORD_LOG_CHANNEL_WEBHOOK_URL_MESSAGE: Final[str] = ( |
197 | 193 | "DISCORD_LOG_CHANNEL_WEBHOOK_URL must be a valid webhook URL " |
198 | 194 | "that points to a discord channel where logs should be displayed." |
199 | 195 | ) |
200 | 196 | raise ImproperlyConfiguredError(INVALID_DISCORD_LOG_CHANNEL_WEBHOOK_URL_MESSAGE) |
201 | 197 |
|
| 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 | + |
202 | 213 | cls._settings["DISCORD_LOG_CHANNEL_WEBHOOK_URL"] = raw_discord_log_channel_webhook_url |
203 | 214 |
|
| 215 | + return webhook_config_logger |
| 216 | + |
204 | 217 | @classmethod |
205 | 218 | def _setup_discord_guild_id(cls) -> None: |
206 | 219 | raw_discord_guild_id: str | None = os.getenv("DISCORD_GUILD_ID") |
@@ -708,30 +721,35 @@ def _setup_env_variables(cls) -> None: |
708 | 721 |
|
709 | 722 | dotenv.load_dotenv() |
710 | 723 |
|
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 |
735 | 753 |
|
736 | 754 | cls._is_env_variables_setup = True |
737 | 755 |
|
|
0 commit comments