aboutsummaryrefslogtreecommitdiff
path: root/discord/ext/commands/context.py
diff options
context:
space:
mode:
Diffstat (limited to 'discord/ext/commands/context.py')
-rw-r--r--discord/ext/commands/context.py32
1 files changed, 31 insertions, 1 deletions
diff --git a/discord/ext/commands/context.py b/discord/ext/commands/context.py
index 95996a67..efaa5b43 100644
--- a/discord/ext/commands/context.py
+++ b/discord/ext/commands/context.py
@@ -24,14 +24,18 @@ DEALINGS IN THE SOFTWARE.
"""
import asyncio
+import discord.abc
+import discord.utils
-class Context:
+class Context(discord.abc.MessageChannel):
"""Represents the context in which a command is being invoked under.
This class contains a lot of meta data to help you understand more about
the invocation context. This class is not created manually and is instead
passed around to commands by passing in :attr:`Command.pass_context`.
+ This class implements the :class:`abc.MessageChannel` ABC.
+
Attributes
-----------
message : :class:`discord.Message`
@@ -76,6 +80,7 @@ class Context:
self.invoked_with = attrs.pop('invoked_with', None)
self.invoked_subcommand = attrs.pop('invoked_subcommand', None)
self.subcommand_passed = attrs.pop('subcommand_passed', None)
+ self._state = self.message._state
@asyncio.coroutine
def invoke(self, command, *args, **kwargs):
@@ -112,6 +117,9 @@ class Context:
ret = yield from command.callback(*arguments, **kwargs)
return ret
+ def _get_destination(self):
+ return self.channel.id, getattr(self.guild, 'id', None)
+
@property
def cog(self):
"""Returns the cog associated with this context's command. None if it does not exist."""
@@ -119,3 +127,25 @@ class Context:
if self.command is None:
return None
return self.command.instance
+
+ @discord.utils.cached_property
+ def id(self):
+ # we need this to meet MessageChannel abc
+ # it is purposefully undocumented because it makes no logistic sense
+ # outside of providing the sugar of the main class.
+ return self.channel.id
+
+ @discord.utils.cached_property
+ def guild(self):
+ """Returns the guild associated with this context's command. None if not available."""
+ return self.message.guild
+
+ @discord.utils.cached_property
+ def channel(self):
+ """Returns the channel associated with this context's command. Shorthand for :attr:`Message.channel`."""
+ return self.message.channel
+
+ @discord.utils.cached_property
+ def author(self):
+ """Returns the author associated with this context's command. Shorthand for :attr:`Message.author`"""
+ return self.message.author