aboutsummaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorkhazhyk <[email protected]>2019-04-14 18:50:28 -0700
committerRapptz <[email protected]>2019-04-17 22:41:59 -0400
commitb1fae0861a6011fb4c37859db2d78f7ceb4a7b13 (patch)
tree1ca32631b6c97efab9f11d5a3daf9d6bc567c617 /discord
parent[commands] Add new MessageConverter to commands prose page. (diff)
downloaddiscord.py-b1fae0861a6011fb4c37859db2d78f7ceb4a7b13.tar.xz
discord.py-b1fae0861a6011fb4c37859db2d78f7ceb4a7b13.zip
add read-only cached_messages property to Client
For those of us who want access to this sweet trove of zero hop messages
Diffstat (limited to 'discord')
-rw-r--r--discord/client.py8
-rw-r--r--discord/utils.py27
2 files changed, 35 insertions, 0 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', ''))))