Migrate client.py to logging

This commit is contained in:
Nexus 2023-12-05 16:43:29 +00:00
parent 7b7ae4b024
commit e7601fd1d3
Signed by: nex
GPG key ID: 0FA334385D0B689F

View file

@ -1,4 +1,5 @@
import asyncio import asyncio
import logging
import sys import sys
from asyncio import Lock from asyncio import Lock
from datetime import datetime, timezone from datetime import datetime, timezone
@ -30,37 +31,40 @@ class Bot(commands.Bot):
super().__init__( super().__init__(
command_prefix=commands.when_mentioned_or(*prefixes), command_prefix=commands.when_mentioned_or(*prefixes),
debug_guilds=guilds, debug_guilds=guilds,
allowed_mentions=discord.AllowedMentions.none(), allowed_mentions=discord.AllowedMentions(everyone=False, users=True, roles=False, replied_user=True),
intents=intents, intents=intents,
max_messages=5000, max_messages=5000,
case_insensitive=True, case_insensitive=True,
) )
self.loop.run_until_complete(registry.create_all()) self.loop.run_until_complete(registry.create_all())
self.training_lock = Lock() self.training_lock = Lock()
self.started_at = datetime.now(tz=timezone.utc) self.started_at = discord.utils.utcnow()
self.console = console self.console = console
self.incidents = {} self.log = log = logging.getLogger("jimmy.client")
self.debug = log.debug
self.info = log.info
self.warning = self.warn = log.warning
self.error = self.log.error
self.critical = self.log.critical
for ext in extensions: for ext in extensions:
try: try:
self.load_extension(ext) self.load_extension(ext)
except discord.ExtensionNotFound: except discord.ExtensionNotFound:
console.log(f"[red]Failed to load extension {ext}: Extension not found.") log.error(f"[red]Failed to load extension {ext}: Extension not found.")
except (discord.ExtensionFailed, OSError) as e: except (discord.ExtensionFailed, OSError) as e:
console.log(f"[red]Failed to load extension {ext}: {e}") log.error(f"[red]Failed to load extension {ext}: {e}", exc_info=True)
if getattr(config, "dev", False):
console.print_exception()
else: else:
console.log(f"Loaded extension [green]{ext}") log.info(f"Loaded extension [green]{ext}")
if getattr(config, "CONNECT_MODE", None) == 2: if getattr(config, "CONNECT_MODE", None) == 2:
async def connect(self, *, reconnect: bool = True) -> None: async def connect(self, *, reconnect: bool = True) -> None:
self.console.log("Exit target 2 reached, shutting down (not connecting to discord).") self.log.critical("Exit target 2 reached, shutting down (not connecting to discord).")
return return
async def on_error(self, event: str, *args, **kwargs): async def on_error(self, event: str, *args, **kwargs):
e_type, e, tb = sys.exc_info() e_type, e, tb = sys.exc_info()
if isinstance(e, discord.NotFound) and e.code == 10062: # invalid interaction if isinstance(e, discord.NotFound) and e.code == 10062: # invalid interaction
self.log.warning(f"Invalid interaction received, ignoring. {e!r}")
return return
if isinstance(e, discord.CheckFailure) and "The global check once functions failed." in str(e): if isinstance(e, discord.CheckFailure) and "The global check once functions failed." in str(e):
return return
@ -69,25 +73,27 @@ class Bot(commands.Bot):
async def close(self) -> None: async def close(self) -> None:
await self.http.close() await self.http.close()
if getattr(self, "web", None) is not None: if getattr(self, "web", None) is not None:
self.console.log("Closing web server...") self.log.info("Closing web server...")
await self.web["server"].shutdown() try:
if hasattr(self, "web"): await asyncio.wait_for(self.web["server"].shutdown(), timeout=5)
self.web["task"].cancel() self.web["task"].cancel()
self.console.log("Web server closed.") self.console.log("Web server closed.")
try: try:
await self.web["task"] await asyncio.wait_for(self.web["task"], timeout=5)
except asyncio.CancelledError: except (asyncio.CancelledError, asyncio.TimeoutError):
pass pass
del self.web["server"] del self.web["server"]
del self.web["config"] del self.web["config"]
del self.web["task"] del self.web["task"]
del self.web del self.web
except asyncio.TimeoutError:
pass
try: try:
await super().close() await super().close()
except asyncio.TimeoutError: except asyncio.TimeoutError:
self.console.log("Timed out while closing, forcing shutdown.") self.log.critical("Timed out while closing, forcing shutdown.")
sys.exit(1) sys.exit(1)
self.console.log("Finished shutting down.") self.log.info("Finished shutting down.")
try: try: