aboutsummaryrefslogtreecommitdiff
path: root/discord/calls.py
diff options
context:
space:
mode:
Diffstat (limited to 'discord/calls.py')
-rw-r--r--discord/calls.py46
1 files changed, 37 insertions, 9 deletions
diff --git a/discord/calls.py b/discord/calls.py
index a502dfbe..b8f3ab5b 100644
--- a/discord/calls.py
+++ b/discord/calls.py
@@ -25,6 +25,7 @@ DEALINGS IN THE SOFTWARE.
"""
from . import utils
+import datetime
from .enums import ServerRegion, try_enum
from .member import VoiceState
@@ -40,15 +41,42 @@ class CallMessage:
A naive UTC datetime object that represents the time that the call has ended.
participants: List[:class:`User`]
The list of users that are participating in this call.
- channel: :class:`PrivateChannel`
- The private channel associated with this call.
+ message: :class:`Message`
+ The message associated with this call message.
"""
- def __init__(self, channel, **kwargs):
- self.channel = channel
+ def __init__(self, message, **kwargs):
+ self.message = message
self.ended_timestamp = utils.parse_time(kwargs.get('ended_timestamp'))
self.participants = kwargs.get('participants')
+ @property
+ def call_ended(self):
+ """bool: Indicates if the call has ended."""
+ return self.ended_timestamp is not None
+
+ @property
+ def channel(self):
+ """:class:`PrivateChannel`\: The private channel associated with this message."""
+ return self.message.channel
+
+ @property
+ def duration(self):
+ """Queries the duration of the call.
+
+ If the call has not ended then the current duration will
+ be returned.
+
+ Returns
+ ---------
+ datetime.timedelta
+ The timedelta object representing the duration.
+ """
+ if self.ended_timestamp is None:
+ return datetime.datetime.utcnow() - self.message.timestamp
+ else:
+ return self.ended_timestamp - self.message.timestamp
+
class GroupCall:
"""Represents the actual group call from Discord.
@@ -56,8 +84,8 @@ class GroupCall:
Attributes
-----------
- message: :class:`CallMessage`
- The message associated with this group call.
+ call: :class:`CallMessage`
+ The call message associated with this group call.
unavailable: bool
Denotes if this group call is unavailable.
ringing: List[:class:`User`]
@@ -67,7 +95,7 @@ class GroupCall:
"""
def __init__(self, **kwargs):
- self.message = kwargs.get('message')
+ self.call = kwargs.get('call')
self.unavailable = kwargs.get('unavailable')
self._voice_states = {}
@@ -78,7 +106,7 @@ class GroupCall:
def _update(self, **kwargs):
self.region = try_enum(ServerRegion, kwargs.get('region'))
- lookup = {u.id: u for u in self.message.channel.recipients}
+ lookup = {u.id: u for u in self.call.channel.recipients}
self.ringing = list(filter(None, map(lambda i: lookup.get(i), kwargs.get('ringing', []))))
def _update_voice_state(self, data):
@@ -102,7 +130,7 @@ class GroupCall:
@property
def channel(self):
""":class:`PrivateChannel`\: Returns the channel the group call is in."""
- return self.message.channel
+ return self.call.channel
def voice_state_for(self, user):
"""Retrieves the :class:`VoiceState` for a specified :class:`User`.