aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2020-11-27 01:08:52 -0500
committerRapptz <[email protected]>2020-11-27 01:08:52 -0500
commit1014bfcb631ce784e6b8efc82d9302cdca1ad38f (patch)
tree438629e85c73922864381aa1ff53b2e7ba698543
parentCode cleanup involving enums and message replies (diff)
downloaddiscord.py-1014bfcb631ce784e6b8efc82d9302cdca1ad38f.tar.xz
discord.py-1014bfcb631ce784e6b8efc82d9302cdca1ad38f.zip
Allow MessageReference to be constructible by users
-rw-r--r--discord/message.py28
-rw-r--r--docs/api.rst11
2 files changed, 28 insertions, 11 deletions
diff --git a/discord/message.py b/discord/message.py
index 3144c7ad..88755f46 100644
--- a/discord/message.py
+++ b/discord/message.py
@@ -217,6 +217,9 @@ class MessageReference:
.. versionadded:: 1.5
+ .. versionchanged:: 1.6
+ This class can now be constructed by users.
+
Attributes
-----------
message_id: Optional[:class:`int`]
@@ -229,11 +232,20 @@ class MessageReference:
__slots__ = ('message_id', 'channel_id', 'guild_id', '_state')
- def __init__(self, state, **kwargs):
- self.message_id = utils._get_as_snowflake(kwargs, 'message_id')
- self.channel_id = int(kwargs.pop('channel_id'))
- self.guild_id = utils._get_as_snowflake(kwargs, 'guild_id')
+ def __init__(self, *, message_id, channel_id, guild_id=None):
+ self._state = None
+ self.message_id = message_id
+ self.channel_id = channel_id
+ self.guild_id = guild_id
+
+ @classmethod
+ def with_state(cls, state, data):
+ self = cls.__new__(cls)
+ self.message_id = utils._get_as_snowflake(data, 'message_id')
+ self.channel_id = int(data.pop('channel_id'))
+ self.guild_id = utils._get_as_snowflake(data, 'guild_id')
self._state = state
+ return self
@classmethod
def from_message(cls, message):
@@ -416,8 +428,12 @@ class Message(Hashable):
self.nonce = data.get('nonce')
self.stickers = [Sticker(data=data, state=state) for data in data.get('stickers', [])]
- ref = data.get('message_reference')
- self.reference = MessageReference(state, **ref) if ref is not None else None
+ try:
+ ref = data['message_reference']
+ except KeyError:
+ self.reference = None
+ else:
+ self.reference = MessageReference.with_state(state, ref)
for handler in ('author', 'member', 'mentions', 'mention_roles', 'call', 'flags'):
try:
diff --git a/docs/api.rst b/docs/api.rst
index f1a7b0ca..dd6de161 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -2844,11 +2844,6 @@ Sticker
.. autoclass:: Sticker()
:members:
-MessageReference
-~~~~~~~~~~~~~~~~~
-.. autoclass:: MessageReference()
- :members:
-
RawMessageDeleteEvent
~~~~~~~~~~~~~~~~~~~~~~~
@@ -2921,6 +2916,12 @@ AllowedMentions
.. autoclass:: AllowedMentions
:members:
+MessageReference
+~~~~~~~~~~~~~~~~~
+
+.. autoclass:: MessageReference
+ :members:
+
Intents
~~~~~~~~~~