diff --git a/discord/abc.py b/discord/abc.py index d0008e321..a652f16cc 100644 --- a/discord/abc.py +++ b/discord/abc.py @@ -845,12 +845,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] @@ -892,6 +886,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: