[commands] Remove send_ utility functions.
This commit is contained in:
parent
406984af2e
commit
20ddc9f14f
@ -38,20 +38,6 @@ from .context import Context
|
|||||||
from .errors import CommandNotFound, CommandError
|
from .errors import CommandNotFound, CommandError
|
||||||
from .formatter import HelpFormatter
|
from .formatter import HelpFormatter
|
||||||
|
|
||||||
def _get_variable(name):
|
|
||||||
stack = inspect.stack()
|
|
||||||
try:
|
|
||||||
for frames in stack:
|
|
||||||
try:
|
|
||||||
frame = frames[0]
|
|
||||||
current_locals = frame.f_locals
|
|
||||||
if name in current_locals:
|
|
||||||
return current_locals[name]
|
|
||||||
finally:
|
|
||||||
del frame
|
|
||||||
finally:
|
|
||||||
del stack
|
|
||||||
|
|
||||||
def when_mentioned(bot, msg):
|
def when_mentioned(bot, msg):
|
||||||
"""A callable that implements a command prefix equivalent
|
"""A callable that implements a command prefix equivalent
|
||||||
to being mentioned, e.g. ``@bot ``."""
|
to being mentioned, e.g. ``@bot ``."""
|
||||||
@ -305,169 +291,6 @@ class Bot(GroupMixin, discord.Client):
|
|||||||
print('Ignoring exception in command {}'.format(context.command), file=sys.stderr)
|
print('Ignoring exception in command {}'.format(context.command), file=sys.stderr)
|
||||||
traceback.print_exception(type(exception), exception, exception.__traceback__, file=sys.stderr)
|
traceback.print_exception(type(exception), exception, exception.__traceback__, file=sys.stderr)
|
||||||
|
|
||||||
# utility "send_*" functions
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
|
||||||
def _augmented_msg(self, coro, **kwargs):
|
|
||||||
msg = yield from coro
|
|
||||||
delete_after = kwargs.get('delete_after')
|
|
||||||
if delete_after is not None:
|
|
||||||
@asyncio.coroutine
|
|
||||||
def delete():
|
|
||||||
yield from asyncio.sleep(delete_after, loop=self.loop)
|
|
||||||
yield from self.delete_message(msg)
|
|
||||||
|
|
||||||
discord.compat.create_task(delete(), loop=self.loop)
|
|
||||||
|
|
||||||
return msg
|
|
||||||
|
|
||||||
def say(self, *args, **kwargs):
|
|
||||||
"""|coro|
|
|
||||||
|
|
||||||
A helper function that is equivalent to doing
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
self.send_message(message.channel, *args, **kwargs)
|
|
||||||
|
|
||||||
The following keyword arguments are "extensions" that augment the
|
|
||||||
behaviour of the standard wrapped call.
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
------------
|
|
||||||
delete_after: float
|
|
||||||
Number of seconds to wait before automatically deleting the
|
|
||||||
message.
|
|
||||||
|
|
||||||
See Also
|
|
||||||
---------
|
|
||||||
:meth:`Client.send_message`
|
|
||||||
"""
|
|
||||||
destination = _get_variable('_internal_channel')
|
|
||||||
|
|
||||||
extensions = ('delete_after',)
|
|
||||||
params = {
|
|
||||||
k: kwargs.pop(k, None) for k in extensions
|
|
||||||
}
|
|
||||||
|
|
||||||
coro = self.send_message(destination, *args, **kwargs)
|
|
||||||
return self._augmented_msg(coro, **params)
|
|
||||||
|
|
||||||
def whisper(self, *args, **kwargs):
|
|
||||||
"""|coro|
|
|
||||||
|
|
||||||
A helper function that is equivalent to doing
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
self.send_message(message.author, *args, **kwargs)
|
|
||||||
|
|
||||||
The following keyword arguments are "extensions" that augment the
|
|
||||||
behaviour of the standard wrapped call.
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
------------
|
|
||||||
delete_after: float
|
|
||||||
Number of seconds to wait before automatically deleting the
|
|
||||||
message.
|
|
||||||
|
|
||||||
See Also
|
|
||||||
---------
|
|
||||||
:meth:`Client.send_message`
|
|
||||||
"""
|
|
||||||
destination = _get_variable('_internal_author')
|
|
||||||
|
|
||||||
extensions = ('delete_after',)
|
|
||||||
params = {
|
|
||||||
k: kwargs.pop(k, None) for k in extensions
|
|
||||||
}
|
|
||||||
|
|
||||||
coro = self.send_message(destination, *args, **kwargs)
|
|
||||||
return self._augmented_msg(coro, **params)
|
|
||||||
|
|
||||||
def reply(self, content, *args, **kwargs):
|
|
||||||
"""|coro|
|
|
||||||
|
|
||||||
A helper function that is equivalent to doing
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
msg = '{0.mention}, {1}'.format(message.author, content)
|
|
||||||
self.send_message(message.channel, msg, *args, **kwargs)
|
|
||||||
|
|
||||||
The following keyword arguments are "extensions" that augment the
|
|
||||||
behaviour of the standard wrapped call.
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
------------
|
|
||||||
delete_after: float
|
|
||||||
Number of seconds to wait before automatically deleting the
|
|
||||||
message.
|
|
||||||
|
|
||||||
See Also
|
|
||||||
---------
|
|
||||||
:meth:`Client.send_message`
|
|
||||||
"""
|
|
||||||
author = _get_variable('_internal_author')
|
|
||||||
destination = _get_variable('_internal_channel')
|
|
||||||
fmt = '{0.mention}, {1}'.format(author, str(content))
|
|
||||||
|
|
||||||
extensions = ('delete_after',)
|
|
||||||
params = {
|
|
||||||
k: kwargs.pop(k, None) for k in extensions
|
|
||||||
}
|
|
||||||
|
|
||||||
coro = self.send_message(destination, fmt, *args, **kwargs)
|
|
||||||
return self._augmented_msg(coro, **params)
|
|
||||||
|
|
||||||
def upload(self, *args, **kwargs):
|
|
||||||
"""|coro|
|
|
||||||
|
|
||||||
A helper function that is equivalent to doing
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
self.send_file(message.channel, *args, **kwargs)
|
|
||||||
|
|
||||||
The following keyword arguments are "extensions" that augment the
|
|
||||||
behaviour of the standard wrapped call.
|
|
||||||
|
|
||||||
Parameters
|
|
||||||
------------
|
|
||||||
delete_after: float
|
|
||||||
Number of seconds to wait before automatically deleting the
|
|
||||||
message.
|
|
||||||
|
|
||||||
See Also
|
|
||||||
---------
|
|
||||||
:meth:`Client.send_file`
|
|
||||||
"""
|
|
||||||
destination = _get_variable('_internal_channel')
|
|
||||||
|
|
||||||
extensions = ('delete_after',)
|
|
||||||
params = {
|
|
||||||
k: kwargs.pop(k, None) for k in extensions
|
|
||||||
}
|
|
||||||
|
|
||||||
coro = self.send_file(destination, *args, **kwargs)
|
|
||||||
return self._augmented_msg(coro, **params)
|
|
||||||
|
|
||||||
def type(self):
|
|
||||||
"""|coro|
|
|
||||||
|
|
||||||
A helper function that is equivalent to doing
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
self.send_typing(message.channel)
|
|
||||||
|
|
||||||
See Also
|
|
||||||
---------
|
|
||||||
The :meth:`Client.send_typing` function.
|
|
||||||
"""
|
|
||||||
destination = _get_variable('_internal_channel')
|
|
||||||
return self.send_typing(destination)
|
|
||||||
|
|
||||||
# global check registration
|
# global check registration
|
||||||
|
|
||||||
def check(self, func):
|
def check(self, func):
|
||||||
|
@ -39,13 +39,10 @@ __all__ = [ 'Command', 'Group', 'GroupMixin', 'command', 'group',
|
|||||||
'bot_has_role', 'bot_has_permissions', 'bot_has_any_role',
|
'bot_has_role', 'bot_has_permissions', 'bot_has_any_role',
|
||||||
'cooldown' ]
|
'cooldown' ]
|
||||||
|
|
||||||
def inject_context(ctx, coro):
|
def wrap_callback(coro):
|
||||||
@functools.wraps(coro)
|
@functools.wraps(coro)
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def wrapped(*args, **kwargs):
|
def wrapped(*args, **kwargs):
|
||||||
_internal_channel = ctx.message.channel
|
|
||||||
_internal_author = ctx.message.author
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ret = yield from coro(*args, **kwargs)
|
ret = yield from coro(*args, **kwargs)
|
||||||
except CommandError:
|
except CommandError:
|
||||||
@ -155,7 +152,7 @@ class Command:
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
loop = ctx.bot.loop
|
loop = ctx.bot.loop
|
||||||
injected = inject_context(ctx, coro)
|
injected = wrap_callback(coro)
|
||||||
if self.instance is not None:
|
if self.instance is not None:
|
||||||
discord.compat.create_task(injected(self.instance, error, ctx), loop=loop)
|
discord.compat.create_task(injected(self.instance, error, ctx), loop=loop)
|
||||||
else:
|
else:
|
||||||
@ -365,7 +362,7 @@ class Command:
|
|||||||
# since we're in a regular command (and not a group) then
|
# since we're in a regular command (and not a group) then
|
||||||
# the invoked subcommand is None.
|
# the invoked subcommand is None.
|
||||||
ctx.invoked_subcommand = None
|
ctx.invoked_subcommand = None
|
||||||
injected = inject_context(ctx, self.callback)
|
injected = wrap_callback(self.callback)
|
||||||
yield from injected(*ctx.args, **ctx.kwargs)
|
yield from injected(*ctx.args, **ctx.kwargs)
|
||||||
|
|
||||||
def error(self, coro):
|
def error(self, coro):
|
||||||
@ -598,7 +595,7 @@ class Group(GroupMixin, Command):
|
|||||||
ctx.invoked_subcommand = self.commands.get(trigger, None)
|
ctx.invoked_subcommand = self.commands.get(trigger, None)
|
||||||
|
|
||||||
if early_invoke:
|
if early_invoke:
|
||||||
injected = inject_context(ctx, self.callback)
|
injected = wrap_callback(self.callback)
|
||||||
yield from injected(*ctx.args, **ctx.kwargs)
|
yield from injected(*ctx.args, **ctx.kwargs)
|
||||||
|
|
||||||
if trigger and ctx.invoked_subcommand:
|
if trigger and ctx.invoked_subcommand:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user