Add support for querying information about group calls.
This commit is contained in:
@ -33,7 +33,7 @@ from .member import Member
|
||||
from .role import Role
|
||||
from . import utils, compat
|
||||
from .enums import Status, ChannelType, try_enum
|
||||
|
||||
from .calls import GroupCall
|
||||
|
||||
from collections import deque, namedtuple
|
||||
import copy, enum, math
|
||||
@ -63,6 +63,7 @@ class ConnectionState:
|
||||
self.user = None
|
||||
self.sequence = None
|
||||
self.session_id = None
|
||||
self._calls = {}
|
||||
self._servers = {}
|
||||
self._voice_clients = {}
|
||||
self._private_channels = {}
|
||||
@ -563,16 +564,21 @@ class ConnectionState:
|
||||
|
||||
def parse_voice_state_update(self, data):
|
||||
server = self._get_server(data.get('guild_id'))
|
||||
user_id = data.get('user_id')
|
||||
if server is not None:
|
||||
if user_id == self.user.id:
|
||||
channel = server.get_channel(data.get('channel_id'))
|
||||
if data.get('user_id') == self.user.id:
|
||||
voice = self._get_voice_client(server.id)
|
||||
if voice is not None:
|
||||
voice.channel = server.get_channel(data.get('channel_id'))
|
||||
voice.channel = channel
|
||||
|
||||
before, after = server._update_voice_state(data)
|
||||
if after is not None:
|
||||
self.dispatch('voice_state_update', before, after)
|
||||
else:
|
||||
# in here we're either at private or group calls
|
||||
call = self._calls.get(data.get('channel_id'), None)
|
||||
if call is not None:
|
||||
call._update_voice_state(data)
|
||||
|
||||
def parse_typing_start(self, data):
|
||||
channel = self.get_channel(data.get('channel_id'))
|
||||
@ -592,6 +598,25 @@ class ConnectionState:
|
||||
timestamp = datetime.datetime.utcfromtimestamp(data.get('timestamp'))
|
||||
self.dispatch('typing', channel, member, timestamp)
|
||||
|
||||
def parse_call_create(self, data):
|
||||
message = self._get_message(data.get('message_id'))
|
||||
if message is not None:
|
||||
call = GroupCall(message=message, **data)
|
||||
self._calls[data['channel_id']] = call
|
||||
self.dispatch('call', call)
|
||||
|
||||
def parse_call_update(self, data):
|
||||
call = self._calls.get(data.get('channel_id'), None)
|
||||
if call is not None:
|
||||
before = copy.copy(call)
|
||||
call._update(**data)
|
||||
self.dispatch('call_update', before, call)
|
||||
|
||||
def parse_call_delete(self, data):
|
||||
call = self._calls.pop(data.get('channel_id'), None)
|
||||
if call is not None:
|
||||
self.dispatch('call_remove', call)
|
||||
|
||||
def get_channel(self, id):
|
||||
if id is None:
|
||||
return None
|
||||
|
Reference in New Issue
Block a user