aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2020-01-14 20:54:31 -0500
committerRapptz <[email protected]>2020-01-14 20:56:00 -0500
commit42a084028ce38c35285efa48edff3425bbd06e5e (patch)
treed0aeeea37b82be0f10ae599a3091edfd346bab12
parentAdd support for custom activities (diff)
downloaddiscord.py-42a084028ce38c35285efa48edff3425bbd06e5e.tar.xz
discord.py-42a084028ce38c35285efa48edff3425bbd06e5e.zip
Expose _ActivityTag as BaseActivity to easily refer to.
-rw-r--r--discord/activity.py28
-rw-r--r--discord/client.py12
-rw-r--r--discord/gateway.py6
-rw-r--r--discord/member.py4
-rw-r--r--discord/shard.py2
-rw-r--r--discord/state.py6
-rw-r--r--discord/widget.py2
7 files changed, 39 insertions, 21 deletions
diff --git a/discord/activity.py b/discord/activity.py
index 66488e24..6f724199 100644
--- a/discord/activity.py
+++ b/discord/activity.py
@@ -33,6 +33,7 @@ from .partial_emoji import PartialEmoji
from .utils import _get_as_snowflake
__all__ = (
+ 'BaseActivity',
'Activity',
'Streaming',
'Game',
@@ -85,7 +86,24 @@ t.ActivityFlags = {
}
"""
-class _ActivityTag:
+class BaseActivity:
+ """The base activity that all user-settable activities inherit from.
+ A user-settable activity is one that can be used in :meth:`Client.change_presence`.
+
+ The following types currently count as user-settable:
+
+ - :class:`Activity`
+ - :class:`Game`
+ - :class:`Streaming`
+ - :class:`CustomActivity`
+
+ Note that although these types are considered user-settable by the library,
+ Discord typically ignores certain combinations of activity depending on
+ what is currently set. This behaviour may change in the future so there are
+ no guarantees on whether Discord will actually let you set these types.
+
+ .. versionadded:: 1.3.0
+ """
__slots__ = ('_created_at',)
def __init__(self, **kwargs):
@@ -100,7 +118,7 @@ class _ActivityTag:
if self._created_at is not None:
return datetime.datetime.utcfromtimestamp(self._created_at / 1000)
-class Activity(_ActivityTag):
+class Activity(BaseActivity):
"""Represents an activity in Discord.
This could be an activity such as streaming, playing, listening
@@ -257,7 +275,7 @@ class Activity(_ActivityTag):
return self.assets.get('small_text', None)
-class Game(_ActivityTag):
+class Game(BaseActivity):
"""A slimmed down version of :class:`Activity` that represents a Discord game.
This is typically displayed via **Playing** on the official Discord client.
@@ -369,7 +387,7 @@ class Game(_ActivityTag):
def __hash__(self):
return hash(self.name)
-class Streaming(_ActivityTag):
+class Streaming(BaseActivity):
"""A slimmed down version of :class:`Activity` that represents a Discord streaming status.
This is typically displayed via **Streaming** on the official Discord client.
@@ -627,7 +645,7 @@ class Spotify:
""":class:`str`: The party ID of the listening party."""
return self._party.get('id', '')
-class CustomActivity(_ActivityTag):
+class CustomActivity(BaseActivity):
"""Represents a Custom activity from Discord.
.. container:: operations
diff --git a/discord/client.py b/discord/client.py
index deabe39b..378b276d 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -45,7 +45,7 @@ from .member import Member
from .errors import *
from .enums import Status, VoiceRegion
from .gateway import *
-from .activity import _ActivityTag, create_activity
+from .activity import BaseActivity, create_activity
from .voice_client import VoiceClient
from .http import HTTPClient
from .state import ConnectionState
@@ -147,7 +147,7 @@ class Client:
must be used to fetch the offline members of the guild.
status: Optional[:class:`.Status`]
A status to start your presence with upon logging on to Discord.
- activity: Optional[Union[:class:`.Activity`, :class:`.Game`, :class:`.Streaming`]]
+ activity: Optional[:class:`BaseActivity`]
An activity to start your presence with upon logging on to Discord.
heartbeat_timeout: :class:`float`
The maximum numbers of seconds before timing out and restarting the
@@ -647,7 +647,7 @@ class Client:
@property
def activity(self):
- """Optional[Union[:class:`.Activity`, :class:`.Game`, :class:`.Streaming`]]: The activity being used upon
+ """Optional[:class:`BaseActivity`]: The activity being used upon
logging in.
"""
return create_activity(self._connection._activity)
@@ -656,10 +656,10 @@ class Client:
def activity(self, value):
if value is None:
self._connection._activity = None
- elif isinstance(value, _ActivityTag):
+ elif isinstance(value, BaseActivity):
self._connection._activity = value.to_dict()
else:
- raise TypeError('activity must be one of Game, Streaming, or Activity.')
+ raise TypeError('activity must derive from BaseActivity.')
# helpers/getters
@@ -918,7 +918,7 @@ class Client:
Parameters
----------
- activity: Optional[Union[:class:`.Game`, :class:`.Streaming`, :class:`.Activity`]]
+ activity: Optional[:class:`BaseActivity`]
The activity being done. ``None`` if no currently active activity is done.
status: Optional[:class:`.Status`]
Indicates what status to change to. If ``None``, then
diff --git a/discord/gateway.py b/discord/gateway.py
index 43bb890a..48ac071c 100644
--- a/discord/gateway.py
+++ b/discord/gateway.py
@@ -38,7 +38,7 @@ import zlib
import websockets
from . import utils
-from .activity import _ActivityTag
+from .activity import BaseActivity
from .enums import SpeakingState
from .errors import ConnectionClosed, InvalidArgument
@@ -490,8 +490,8 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
async def change_presence(self, *, activity=None, status=None, afk=False, since=0.0):
if activity is not None:
- if not isinstance(activity, _ActivityTag):
- raise InvalidArgument('activity must be one of Game, Streaming, or Activity.')
+ if not isinstance(activity, BaseActivity):
+ raise InvalidArgument('activity must derive from BaseActivity.')
activity = activity.to_dict()
if status == 'idle':
diff --git a/discord/member.py b/discord/member.py
index 70acedd6..42976a91 100644
--- a/discord/member.py
+++ b/discord/member.py
@@ -150,7 +150,7 @@ class Member(discord.abc.Messageable, _BaseUser):
joined_at: Optional[:class:`datetime.datetime`]
A datetime object that specifies the date and time in UTC that the member joined the guild for
the first time. In certain cases, this can be ``None``.
- activities: Tuple[Union[:class:`Game`, :class:`Streaming`, :class:`Spotify`, :class:`Activity`]]
+ activities: Tuple[Union[:class:`BaseActivity`, :class:`Spotify`]]
The activities that the user is currently doing.
guild: :class:`Guild`
The guild that the member belongs to.
@@ -381,7 +381,7 @@ class Member(discord.abc.Messageable, _BaseUser):
@property
def activity(self):
- """Union[:class:`Game`, :class:`Streaming`, :class:`Spotify`, :class:`Activity`]: Returns the primary
+ """Union[:class:`BaseActivity`, :class:`Spotify`]: Returns the primary
activity the user is currently doing. Could be None if no activity is being done.
.. note::
diff --git a/discord/shard.py b/discord/shard.py
index 3e85d445..f600e13c 100644
--- a/discord/shard.py
+++ b/discord/shard.py
@@ -311,7 +311,7 @@ class AutoShardedClient(Client):
Parameters
----------
- activity: Optional[Union[:class:`Game`, :class:`Streaming`, :class:`Activity`]]
+ activity: Optional[:class:`BaseActivity`]
The activity being done. ``None`` if no currently active activity is done.
status: Optional[:class:`Status`]
Indicates what status to change to. If ``None``, then
diff --git a/discord/state.py b/discord/state.py
index 0198414e..a215ee3a 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -36,7 +36,7 @@ import inspect
import gc
from .guild import Guild
-from .activity import _ActivityTag
+from .activity import BaseActivity
from .user import User, ClientUser
from .emoji import Emoji
from .partial_emoji import PartialEmoji
@@ -83,8 +83,8 @@ class ConnectionState:
activity = options.get('activity', None)
if activity:
- if not isinstance(activity, _ActivityTag):
- raise TypeError('activity parameter must be one of Game, Streaming, or Activity.')
+ if not isinstance(activity, BaseActivity):
+ raise TypeError('activity parameter must derive from BaseActivity.')
activity = activity.to_dict()
diff --git a/discord/widget.py b/discord/widget.py
index a1037086..50888605 100644
--- a/discord/widget.py
+++ b/discord/widget.py
@@ -113,7 +113,7 @@ class WidgetMember(BaseUser):
The member's nickname.
avatar: Optional[:class:`str`]
The member's avatar hash.
- activity: Optional[Union[:class:`Activity`, :class:`Game`, :class:`Streaming`, :class:`Spotify`]]
+ activity: Optional[Union[:class:`BaseActivity`, :class:`Spotify`]]
The member's activity.
deafened: Optional[:class:`bool`]
Whether the member is currently deafened.