aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/client.py8
-rw-r--r--discord/utils.py27
-rw-r--r--docs/migrating.rst6
3 files changed, 39 insertions, 2 deletions
diff --git a/discord/client.py b/discord/client.py
index e0d7900b..2f70082b 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -228,6 +228,14 @@ class Client:
return self._connection.emojis
@property
+ def cached_messages(self):
+ """Sequence[:class:`~discord.Message`]: Read-only list of messages the connected client has cached.
+
+ .. versionadded:: 1.1.0
+ """
+ return utils.SequenceProxy(self._connection._messages)
+
+ @property
def private_channels(self):
"""List[:class:`abc.PrivateChannel`]: The private channels that the connected client is participating on.
diff --git a/discord/utils.py b/discord/utils.py
index 4dfc7a0c..8303916c 100644
--- a/discord/utils.py
+++ b/discord/utils.py
@@ -26,6 +26,7 @@ DEALINGS IN THE SOFTWARE.
import array
import asyncio
+import collections.abc
import unicodedata
from base64 import b64encode
from bisect import bisect_left
@@ -78,6 +79,32 @@ def cached_slot_property(name):
return CachedSlotProperty(name, func)
return decorator
+class SequenceProxy(collections.abc.Sequence):
+ """Read-only proxy of a Sequence."""
+ def __init__(self, proxied):
+ self.__proxied = proxied
+
+ def __getitem__(self, idx):
+ return self.__proxied[idx]
+
+ def __len__(self):
+ return len(self.__proxied)
+
+ def __contains__(self, item):
+ return item in self.__proxied
+
+ def __iter__(self):
+ return iter(self.__proxied)
+
+ def __reversed__(self):
+ return reversed(self.__proxied)
+
+ def index(self, value, *args, **kwargs):
+ return self.__proxied.index(value, *args, **kwargs)
+
+ def count(self, value):
+ return self.__proxied.count(value)
+
def parse_time(timestamp):
if timestamp:
return datetime.datetime(*map(int, re.split(r'[^\d]', timestamp.replace('+00:00', ''))))
diff --git a/docs/migrating.rst b/docs/migrating.rst
index 0b2e0765..543e8f25 100644
--- a/docs/migrating.rst
+++ b/docs/migrating.rst
@@ -206,8 +206,6 @@ A list of these changes is enumerated below.
+---------------------------------------+------------------------------------------------------------------------------+
| ``Client.wait_until_login`` | Removed |
+---------------------------------------+------------------------------------------------------------------------------+
-| ``Client.messages`` | Removed |
-+---------------------------------------+------------------------------------------------------------------------------+
| ``Client.wait_until_ready`` | No change |
+---------------------------------------+------------------------------------------------------------------------------+
@@ -330,6 +328,10 @@ They will be enumerated here.
- Use :attr:`Client.emojis` instead.
+` ``Client.messages``
+
+ - Use read-only :attr:`Client.cached_messages` instead.
+
- ``Client.wait_for_message`` and ``Client.wait_for_reaction`` are gone.
- Use :meth:`Client.wait_for` instead.