Added a way to log execution of app command

This commit is contained in:
2024-10-18 13:46:28 +02:00
parent 8d004f566b
commit 757b9bab21
2 changed files with 48 additions and 37 deletions
+11
View File
@@ -0,0 +1,11 @@
from functools import wraps
import discord
def log_command_execution(func):
"""Wraps an command function to print execution logs to the console"""
@wraps(func)
async def wrapper(self, interaction:discord.Interaction, *args, **kwargs):
self._logger.debug(f"User {interaction.user} in channel {interaction.channel} on guild {interaction.guild} executed the {func.__name__} command")
return await func(self, interaction, *args, **kwargs)
return wrapper
+37 -37
View File
@@ -1,38 +1,38 @@
class Singleton: class Singleton:
""" """
A non-thread-safe helper class to ease implementing singletons. A non-thread-safe helper class to ease implementing singletons.
This should be used as a decorator -- not a metaclass -- to the This should be used as a decorator -- not a metaclass -- to the
class that should be a singleton. class that should be a singleton.
The decorated class can define one `__init__` function that The decorated class can define one `__init__` function that
takes only the `self` argument. Also, the decorated class cannot be takes only the `self` argument. Also, the decorated class cannot be
inherited from. Other than that, there are no restrictions that apply inherited from. Other than that, there are no restrictions that apply
to the decorated class. to the decorated class.
To get the singleton instance, use the `instance` method. Trying To get the singleton instance, use the `instance` method. Trying
to use `__call__` will result in a `TypeError` being raised. to use `__call__` will result in a `TypeError` being raised.
""" """
# Source: https://stackoverflow.com/questions/31875/is-there-a-simple-elegant-way-to-define-singletons # Source: https://stackoverflow.com/questions/31875/is-there-a-simple-elegant-way-to-define-singletons
def __init__(self, decorated): def __init__(self, decorated):
self._decorated = decorated self._decorated = decorated
def instance(self): def instance(self):
""" """
Returns the singleton instance. Upon its first call, it creates a Returns the singleton instance. Upon its first call, it creates a
new instance of the decorated class and calls its `__init__` method. new instance of the decorated class and calls its `__init__` method.
On all subsequent calls, the already created instance is returned. On all subsequent calls, the already created instance is returned.
""" """
try: try:
return self._instance return self._instance
except AttributeError: except AttributeError:
self._instance = self._decorated() self._instance = self._decorated()
return self._instance return self._instance
def __call__(self): def __call__(self):
raise TypeError('Singletons must be accessed through `instance()`.') raise TypeError('Singletons must be accessed through `instance()`.')
def __instancecheck__(self, inst): def __instancecheck__(self, inst):
return isinstance(inst, self._decorated) return isinstance(inst, self._decorated)