aboutsummaryrefslogtreecommitdiff
path: root/discord/ext
diff options
context:
space:
mode:
Diffstat (limited to 'discord/ext')
-rw-r--r--discord/ext/commands/bot.py31
1 files changed, 27 insertions, 4 deletions
diff --git a/discord/ext/commands/bot.py b/discord/ext/commands/bot.py
index 66e245dc..b45f828b 100644
--- a/discord/ext/commands/bot.py
+++ b/discord/ext/commands/bot.py
@@ -108,6 +108,16 @@ class BotBase(GroupMixin):
self._help_command = None
self.description = inspect.cleandoc(description) if description else ''
self.owner_id = options.get('owner_id')
+ self.owner_ids = options.get('owner_ids', {})
+
+ if self.owner_id and self.owner_ids:
+ raise ValueError('Both owner_id and owner_ids are set.')
+ elif not isinstance(self.owner_id, int):
+ raise ValueError('owner_id is not an int.')
+ elif not isinstance(self.owner_ids, (set, list, tuple)):
+ raise ValueError('owner_ids is not a set, list or tuple.')
+ elif not all(isinstance(i, int) for i in self.owner_ids):
+ raise ValueError('owner_ids has to be an iterable of int.')
if options.pop('self_bot', False):
self._skip_check = lambda x, y: x != y
@@ -284,6 +294,9 @@ class BotBase(GroupMixin):
If an :attr:`owner_id` is not set, it is fetched automatically
through the use of :meth:`~.Bot.application_info`.
+ The function also checks if the application is team-owned if
+ :attr:`owner_id` is not set.
+
Parameters
-----------
user: :class:`.abc.User`
@@ -295,11 +308,18 @@ class BotBase(GroupMixin):
Whether the user is the owner.
"""
- if self.owner_id is None:
+ if self.owner_id:
+ return user.id == self.owner_id
+ elif self.owner_ids:
+ return user.id in self.owner_ids
+ else:
app = await self.application_info()
- self.owner_id = owner_id = app.owner.id
- return user.id == owner_id
- return user.id == self.owner_id
+ if app.team:
+ self.owner_ids = {m.id for m in app.team.members}
+ return user.id in self.owner_ids
+ else:
+ self.owner_id = owner_id = app.owner.id
+ return user.id == owner_id
def before_invoke(self, coro):
"""A decorator that registers a coroutine as a pre-invoke hook.
@@ -959,6 +979,9 @@ class Bot(BotBase, discord.Client):
The ID that owns the bot. If this is not set and is then queried via
:meth:`.is_owner` then it is fetched automatically using
:meth:`~.Bot.application_info`.
+ owner_ids: Optional[:class:`set`]
+ The IDs that owns the bot. This is similar to `owner_id`.
+ If both `owner_id` and `owner_ids` are set, ValueError would be raised.
"""
pass