Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 32 additions & 10 deletions discord/member.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,17 @@
import itertools
import sys
from operator import attrgetter
from typing import Any, Dict, List, Literal, Optional, TYPE_CHECKING, Tuple, Type, TypeVar, Union, overload
from typing import Any, Dict, List, Literal, Optional, TYPE_CHECKING, Tuple, Type, TypeVar, Union

import discord.abc

from . import utils
from .asset import Asset
from .utils import MISSING
from .user import BaseUser, User, _UserTag
from .activity import create_activity, ActivityTypes
from .permissions import Permissions
from .enums import Status, try_enum
from .colour import Colour
from .enums import Status, try_enum
from .object import Object
from .permissions import Permissions
from .user import BaseUser, User, _UserTag
from .utils import MISSING

__all__ = (
'VoiceState',
Expand Down Expand Up @@ -788,10 +786,9 @@ async def edit(
async def timeout(self, until: Optional[datetime.datetime], *, reason: Optional[str] = None) -> None:
"""|coro|

Timeouts a member from the guild for the set duration.
Applies a timeout to a member in the guild until a set datetime.

You must have the :attr:`~Permissions.moderate_members` permission to
timeout a member.
You must have the :attr:`~Permissions.moderate_members` permission to timeout a member.

Parameters
-----------
Expand All @@ -809,6 +806,31 @@ async def timeout(self, until: Optional[datetime.datetime], *, reason: Optional[
"""
await self.edit(communication_disabled_until=until, reason=reason)

async def timeout_for(self, duration: datetime.timedelta, *, reason: Optional[str] = None) -> None:
"""|coro|

Applies a timeout to a member in the guild for a set duration. A shortcut method for :meth:`~.timeout`, and
equivalent to ``timeout(until=datetime.utcnow() + duration, reason=reason)``.

You must have the :attr:`~Permissions.moderate_members` permission to
timeout a member.

Parameters
-----------
duration: :class:`datetime.timedelta`
The duration to timeout the member for.
reason: Optional[:class:`str`]
The reason for doing this action. Shows up on the audit log.

Raises
-------
Forbidden
You do not have permissions to timeout members.
HTTPException
An error occurred doing the request.
"""
await self.timeout(datetime.datetime.now(datetime.timezone.utc) + duration, reason=reason)

async def remove_timeout(self, *, reason: Optional[str] = None) -> None:
"""|coro|

Expand Down