Re-implement voice sending.

This is a complete redesign of the old voice code.

A list of major changes is as follows:

* The voice websocket will now automatically reconnect with
  exponential back-off just like the regular Client does.
* Removal of the stream player concept.
* Audio now gracefully pauses and resumes when a disconnect is found.
* Introduce a discord.AudioSource concept to abstract streams
* Flatten previous stream player functionality with the
  VoiceClient, e.g. player.stop() is now voice_client.stop()
* With the above re-coupling this means you no longer have to
  store players anywhere.
* The after function now requires a single parameter, the error,
  if any existed. This will typically be None.

A lot of this design is experimental.
This commit is contained in:
Rapptz
2017-04-18 02:29:43 -04:00
parent 38fd0928df
commit 3b1b26ffb1
11 changed files with 609 additions and 537 deletions

View File

@ -31,6 +31,7 @@ from .errors import *
from .permissions import Permissions, PermissionOverwrite
from .enums import ChannelType, Status
from .gateway import *
from .voice_client import VoiceClient
from .emoji import Emoji
from .http import HTTPClient
from .state import ConnectionState
@ -119,10 +120,11 @@ class Client:
self.connection.shard_count = self.shard_count
self._closed = asyncio.Event(loop=self.loop)
self._ready = asyncio.Event(loop=self.loop)
self.connection._get_websocket = lambda g: self.ws
# if VoiceClient.warn_nacl:
# VoiceClient.warn_nacl = False
# log.warning("PyNaCl is not installed, voice will NOT be supported")
if VoiceClient.warn_nacl:
VoiceClient.warn_nacl = False
log.warning("PyNaCl is not installed, voice will NOT be supported")
# internals