mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-07 12:18:59 +00:00
utils.get now supports nested attribute retrieval.
This commit is contained in:
parent
f1480580c1
commit
7765580a14
@ -88,6 +88,9 @@ def get(iterable, **attrs):
|
||||
logical AND, not logical OR. Meaning they have to meet every
|
||||
attribute passed in and not one of them.
|
||||
|
||||
To have a nested attribute search (i.e. search by ``x.y``) then
|
||||
pass in ``x__y`` as the keyword argument.
|
||||
|
||||
If nothing is found that matches the attributes passed, then
|
||||
``None`` is returned.
|
||||
|
||||
@ -106,6 +109,12 @@ def get(iterable, **attrs):
|
||||
|
||||
channel = discord.utils.get(server.channels, name='Foo', type=ChannelType.voice)
|
||||
|
||||
Nested attribute matching:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
channel = discord.utils.get(client.get_all_channels(), server__name='Cool', name='general')
|
||||
|
||||
Parameters
|
||||
-----------
|
||||
iterable
|
||||
@ -116,9 +125,12 @@ def get(iterable, **attrs):
|
||||
|
||||
def predicate(elem):
|
||||
for attr, val in attrs.items():
|
||||
if not hasattr(elem, attr):
|
||||
return False
|
||||
if getattr(elem, attr) != val:
|
||||
nested = attr.split('__')
|
||||
obj = elem
|
||||
for attribute in nested:
|
||||
obj = getattr(obj, attribute)
|
||||
|
||||
if obj != val:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user