From 4e175d36d3453c5c08ae398442f22151725f7e0e Mon Sep 17 00:00:00 2001 From: Rapptz Date: Sun, 25 Dec 2016 17:50:40 -0500 Subject: [PATCH] Add delete_after parameter to MessageChannel.send --- discord/abc.py | 18 ++++++++++++++++-- discord/state.py | 4 ++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/discord/abc.py b/discord/abc.py index e609faf27..81bb41057 100644 --- a/discord/abc.py +++ b/discord/abc.py @@ -145,7 +145,7 @@ class MessageChannel(metaclass=abc.ABCMeta): raise NotImplementedError @asyncio.coroutine - def send(self, content=None, *, tts=False, embed=None, file=None, filename=None): + def send(self, content=None, *, tts=False, embed=None, file=None, filename=None, delete_after=None): """|coro| Sends a message to the channel with the content given. @@ -185,6 +185,10 @@ class MessageChannel(metaclass=abc.ABCMeta): The filename of the file. Defaults to ``file.name`` if it's available. If this is provided, you must also provide the ``file`` parameter or it is silently ignored. + delete_after: float + If provided, the number of seconds to wait in the background + before deleting the message we just sent. If the deletion fails, + then it is silently ignored. Raises -------- @@ -219,7 +223,17 @@ class MessageChannel(metaclass=abc.ABCMeta): else: data = yield from state.http.send_message(channel_id, content, guild_id=guild_id, tts=tts, embed=embed) - return Message(channel=self, state=state, data=data) + ret = Message(channel=self, state=state, data=data) + if delete_after is not None: + @asyncio.coroutine + def delete(): + yield from asyncio.sleep(delete_after, loop=state.loop) + try: + yield from ret.delete() + except: + pass + discord.compat.create_task(delete(), loop=state.loop) + return ret @asyncio.coroutine def send_typing(self): diff --git a/discord/state.py b/discord/state.py index e9b5a4854..1570d53db 100644 --- a/discord/state.py +++ b/discord/state.py @@ -53,7 +53,7 @@ log = logging.getLogger(__name__) ReadyState = namedtuple('ReadyState', ('launch', 'guilds')) class StateContext: - __slots__ = ('store_user', 'http', 'self_id', 'store_emoji', 'reaction_emoji') + __slots__ = ('store_user', 'http', 'self_id', 'store_emoji', 'reaction_emoji', 'loop') def __init__(self, **kwargs): for attr, value in kwargs.items(): @@ -71,7 +71,7 @@ class ConnectionState: self.ctx = StateContext(store_user=self.store_user, store_emoji=self.store_emoji, reaction_emoji=self._get_reaction_emoji, - http=http, self_id=None) + http=http, self_id=None, loop=loop) self.clear() def clear(self):