From 98afb896296d2bef4acda07c986f6077b4ef74d6 Mon Sep 17 00:00:00 2001 From: Slipstream Date: Sun, 15 Jun 2025 18:13:06 -0600 Subject: [PATCH] Add Guild.me property (#90) --- README.md | 1 + disagreement/models.py | 19 ++++++++++++++----- docs/caching.md | 9 +++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cc6de38..ef2aceb 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ A Python library for interacting with the Discord API, with a focus on bot devel - Message component helpers - `Message.jump_url` property for quick links to messages - Built-in caching layer +- `Guild.me` property to access the bot's member object - Experimental voice support - Helpful error handling utilities diff --git a/disagreement/models.py b/disagreement/models.py index 6ade9bd..833e06c 100644 --- a/disagreement/models.py +++ b/disagreement/models.py @@ -1253,10 +1253,10 @@ class Guild: def get_channel(self, channel_id: str) -> Optional["Channel"]: return self._channels.get(channel_id) - def get_member(self, user_id: str) -> Optional[Member]: - return self._members.get(user_id) - - def get_member_named(self, name: str) -> Optional[Member]: + def get_member(self, user_id: str) -> Optional[Member]: + return self._members.get(user_id) + + def get_member_named(self, name: str) -> Optional[Member]: """Retrieve a cached member by username or nickname. The lookup is case-insensitive and searches both the username and @@ -1282,7 +1282,16 @@ class Guild: return None def get_role(self, role_id: str) -> Optional[Role]: - return next((role for role in self.roles if role.id == role_id), None) + return next((role for role in self.roles if role.id == role_id), None) + + @property + def me(self) -> Optional[Member]: + """The member object for the connected bot in this guild, if present.""" + + client_user = getattr(self._client, "user", None) + if not client_user: + return None + return self.get_member(client_user.id) def __repr__(self) -> str: return f"" diff --git a/docs/caching.md b/docs/caching.md index 2a1f7b0..98bcc7d 100644 --- a/docs/caching.md +++ b/docs/caching.md @@ -13,6 +13,15 @@ if member: print(member.display_name) ``` +To access the bot's own member object, use the ``Guild.me`` property. It returns +``None`` if the bot is not in the guild or its user data hasn't been loaded: + +```python +bot_member = guild.me +if bot_member: + print(bot_member.joined_at) +``` + The cache can be cleared manually if needed: ```python