Added a way to log execution of app command
This commit is contained in:
@@ -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
@@ -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)
|
||||||
Reference in New Issue
Block a user