diff --git a/discord/abc.py b/discord/abc.py index 7e7ffedfe..2f78f36d0 100644 --- a/discord/abc.py +++ b/discord/abc.py @@ -732,12 +732,6 @@ class GuildChannel: if base.administrator: return Permissions.all() - if obj.is_timed_out(): - # Timeout leads to every permission except VIEW_CHANNEL and READ_MESSAGE_HISTORY - # being explicitly denied - base.value &= Permissions._timeout_mask() - return base - # Apply @everyone allow/deny first since it's special try: maybe_everyone = self._overwrites[0] @@ -779,6 +773,12 @@ class GuildChannel: denied = Permissions.all_channel() base.value &= ~denied.value + if obj.is_timed_out(): + # Timeout leads to every permission except VIEW_CHANNEL and READ_MESSAGE_HISTORY + # being explicitly denied + # N.B.: This *must* come last, because it's a conclusive mask + base.value &= Permissions._timeout_mask() + return base async def delete(self, *, reason: Optional[str] = None) -> None: