diff --git a/discord/ext/commands/bot.py b/discord/ext/commands/bot.py index 06dedf87f..4cbc82471 100644 --- a/discord/ext/commands/bot.py +++ b/discord/ext/commands/bot.py @@ -282,6 +282,20 @@ class Bot(GroupMixin, discord.Client): # 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) + yield from self.delete_message(msg) + + discord.compat.create_task(delete(), loop=self.loop) + + return msg + def say(self, *args, **kwargs): """|coro| @@ -291,12 +305,28 @@ class Bot(GroupMixin, discord.Client): 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') - return self.send_message(destination, *args, **kwargs) + + 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| @@ -307,12 +337,28 @@ class Bot(GroupMixin, discord.Client): 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') - return self.send_message(destination, *args, **kwargs) + + 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| @@ -324,6 +370,15 @@ class Bot(GroupMixin, discord.Client): 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` @@ -331,7 +386,14 @@ class Bot(GroupMixin, discord.Client): author = _get_variable('_internal_author') destination = _get_variable('_internal_channel') fmt = '{0.mention}, {1}'.format(author, str(content)) - return self.send_message(destination, fmt, *args, **kwargs) + + 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| @@ -342,12 +404,28 @@ class Bot(GroupMixin, discord.Client): 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') - return self.send_file(destination, *args, **kwargs) + + 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|