Discord utils: added function for formatting discord objects for printing in logs
This commit is contained in:
parent
66197c18f8
commit
e9880e38a8
|
|
@ -3,7 +3,6 @@ import argparse
|
|||
import logging
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
import discord
|
||||
import discord.utils
|
||||
|
|
@ -34,7 +33,7 @@ class VocalMaisBot(commands.Cog):
|
|||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
logger.info("Connected and ready!")
|
||||
logger.info(f"Logged in as {self.bot.user}")
|
||||
logger.info(f"Logged in as {discord_utils.to_string(self.bot.user)}")
|
||||
|
||||
self.owner = (await self.bot.application_info()).owner
|
||||
|
||||
|
|
@ -80,7 +79,7 @@ class VocalMaisBot(commands.Cog):
|
|||
else:
|
||||
return await ctx.send(f":x: this command can not be run: {error}")
|
||||
else:
|
||||
logger.error(f"Error when running command '{ctx.message.content}' by {ctx.author.name}#{ctx.author.discriminator} in {ctx.guild.name}", exc_info = error)
|
||||
logger.error(f"Error when running command '{ctx.message.content}' by {discord_utils.to_string(ctx.author)} in {discord_utils.to_string(ctx.guild)}", exc_info = error)
|
||||
if isinstance(error, commands.CommandInvokeError):
|
||||
await ctx.send(f":x: There was an error during the command execution :dizzy_face:")
|
||||
else:
|
||||
|
|
@ -89,7 +88,7 @@ class VocalMaisBot(commands.Cog):
|
|||
def cog_check(self, ctx: commands.Context):
|
||||
# We silently ignore messages from bots, since we do not want bots to command us
|
||||
if ctx.author.bot or ctx.message.is_system():
|
||||
logger.info(f"[{ctx.guild.name}({ctx.guild.id})] Ignored command message from bot or system {ctx.author.name}{ctx.author.discriminator}({ctx.author.id}): {ctx.message.content}")
|
||||
logger.info(f"[{discord_utils.to_string(ctx.guild)}] Ignored command message from bot or system: {ctx.message.content}")
|
||||
raise discord_utils.CheckFailDoNotNotify
|
||||
return True
|
||||
|
||||
|
|
@ -233,7 +232,7 @@ class VocalMaisBot(commands.Cog):
|
|||
return # It's not one of our special watched join-to-create channels
|
||||
|
||||
# The user is not a bot and connected to one of our special watched channels
|
||||
logger.debug(f"[{channel.guild.name}({channel.guild.id})] User {user.name}#{user.discriminator}({user.id}) connected to watched channel {channel.name}({channel.id})")
|
||||
logger.debug(f"[{discord_utils.to_string(channel.guild)}] User {discord_utils.to_string(user)}) connected to watched channel {discord_utils.to_string(channel)})")
|
||||
# We create a channel for them and move them into it
|
||||
category = channel.category
|
||||
|
||||
|
|
@ -258,10 +257,10 @@ class VocalMaisBot(commands.Cog):
|
|||
channel_name = discord_utils.voice_channel_safe_name(user_default_channel_name, user_name_replacement = user.display_name)
|
||||
|
||||
# Creating the channel and moving the user into it
|
||||
logger.debug(f"[{channel.guild.name}({channel.guild.id})] Creating channel {channel_name} for {user.name}#{user.discriminator}({user.id})")
|
||||
logger.debug(f"[{discord_utils.to_string(channel.guild)}] Creating channel {channel_name} for {discord_utils.to_string(user)}")
|
||||
user_channel = await category.create_voice_channel(channel_name, overwrites = channel_permissions)
|
||||
await user.move_to(user_channel)
|
||||
logger.info(f"[{channel.guild.name}({channel.guild.id})] Created channel {user_channel.name}({user_channel.id}) for {user.name}#{user.discriminator}({user.id})")
|
||||
logger.info(f"[{discord_utils.to_string(channel.guild)}] Created channel {discord_utils.to_string(user_channel)} for {discord_utils.to_string(user)}")
|
||||
|
||||
# Saving the channel in the configuration
|
||||
self.channels_config.add_channel_to_created(user_channel.guild, user_channel)
|
||||
|
|
@ -272,15 +271,16 @@ class VocalMaisBot(commands.Cog):
|
|||
if not self.channels_config.is_created(channel.guild, channel):
|
||||
return # It is not a channel that we manage, nothing to do
|
||||
|
||||
logger.debug(f"[{channel.guild.name}({channel.guild.id})] User left temporary channel {channel.name} ({channel.id})")
|
||||
logger.debug(f"[{discord_utils.to_string(channel.guild)}] User left temporary channel {discord_utils.to_string(channel)}")
|
||||
# It is a channel that we manage
|
||||
if len(channel.members) > 0:
|
||||
return # There are still people inside it, nothing to do
|
||||
logger.debug(f"[{discord_utils.to_string(channel.guild)}] Temporary channel {discord_utils.to_string(channel)} is now empty")
|
||||
try:
|
||||
await channel.delete()
|
||||
except discord.NotFound:
|
||||
pass # The channel already does not exist, that's not a problem, that's what we want
|
||||
logger.info(f"[{channel.guild.name}({channel.guild.id})] Deleted channel {channel.name}({channel.id}) because it was empty")
|
||||
logger.info(f"[{discord_utils.to_string(channel.guild)}] Deleted channel {discord_utils.to_string(channel)} because it was empty")
|
||||
# updating the configuration
|
||||
self.channels_config.remove_channel_from_created(channel.guild, channel)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import discord
|
||||
import discord.ext.commands as commands
|
||||
from functools import singledispatch
|
||||
|
||||
|
||||
class CheckFailDoNotNotify(commands.CheckFailure):
|
||||
|
|
@ -30,3 +31,34 @@ def voice_channel_safe_name(template: str, max_chars: int = 100, escape_mentions
|
|||
message = message[:max_chars - 3] + "..."
|
||||
|
||||
return message
|
||||
|
||||
|
||||
@singledispatch
|
||||
def to_string(obj) -> str:
|
||||
"""
|
||||
Convert the given discord object to a string, for logging purposes.
|
||||
|
||||
See functools.singledispatch
|
||||
"""
|
||||
return str(obj)
|
||||
|
||||
|
||||
@to_string.register(discord.Object)
|
||||
@to_string.register(discord.abc.Snowflake)
|
||||
def _(obj) -> str:
|
||||
return f"<{obj.id}>"
|
||||
|
||||
|
||||
@to_string.register(discord.abc.User)
|
||||
def _(user) -> str:
|
||||
return f"{user.name}#{user.discriminator}({user.id})"
|
||||
|
||||
|
||||
@to_string.register(discord.Guild)
|
||||
def _(guild) -> str:
|
||||
return f"{guild.name}({guild.id})"
|
||||
|
||||
|
||||
@to_string.register(discord.abc.GuildChannel)
|
||||
def _(channel) -> str:
|
||||
return f"{channel.name}({channel.id})"
|
||||
|
|
|
|||
Loading…
Reference in New Issue