Commit Graph
60 Commits
Author SHA1 Message Date
Rapptz 64d09f3720 Force disconnect in abc.Connectable.connect.
Some cases of is_connected is not set so we need to force it to clear
it anyway.
2017-05-13 16:01:32 -04:00
Rapptz b44bba6ee6 First pass at documentation reform. 2017-05-12 20:14:34 -04:00
Rapptz 663315f7ac Explicitly close UDP sockets when re-creating them.
This does not actually make a big difference since the GC should
technically close them when needed but might as well be more explicit.
2017-05-02 20:25:54 -04:00
Rapptz f5cfc96aaf Add PCMVolumeTransformer to augment volume of a PCM stream.
This also introduces the idea of replacing the VoiceClient.source on
the fly. Note that this internally pauses and resumes the audio
stream.
2017-04-19 17:23:39 -04:00
Rapptz 07d5328873 Add VoiceClient.is_paused to query pause state. 2017-04-19 16:06:45 -04:00
Rapptz 55e63ed87f Add VoiceClient.source to get the AudioSource being played. 2017-04-19 01:19:39 -04:00
Rapptz aa32c384ea Clean cache when TimeoutError occurs. 2017-04-18 20:13:34 -04:00
Rapptz f9c2ac9d25 Better handling of VOICE_SERVER_UPDATE.
This now sort of respects "Awaiting Endpoint..." waiting. I haven't
actually tested out this case since it's hard to get it. However this
new code does work with the regular connection flow.
2017-04-18 19:05:34 -04:00
Rapptz 3b1b26ffb1 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.
2017-04-18 03:49:48 -04:00
Rapptz 132ac45010 Ensure after is called inside the daemon thread for players. 2017-02-14 02:10:07 -05:00
Rapptz ff9f5749e1 Update copyright year to 2017. 2017-01-20 23:19:19 -05:00
Rapptz 79a49f9145 Absolute import some circular dependencies to appease Python 3.4. 2017-01-03 09:52:02 -05:00
Rapptz d1d54a468a Rename Server to Guild everywhere. 2017-01-03 09:51:54 -05:00
Rapptz 6fec17d7d4 Catch Player errors and gracefully stop them.
This also introduces the concept of the after function taking a single
parameter, the current player. This is useful for error handling, e.g.
checking Player.error.

Fixes #291
2016-09-25 05:27:35 -04:00
Daniel e977bddc1f Add stderr arg to create_ffmpeg_player 2016-07-08 14:48:04 -04:00
Hornwitser e1f8bdc440 Make PyNaCl optional 2016-06-28 00:58:11 -04:00
Rapptz 102e8aca43 Raise TypeError if "after" parameter is not a callable. 2016-06-20 01:05:28 -04:00
Rapptz e736554777 Make sure the socket is closed when we call VoiceClient.disconnect 2016-06-14 22:33:25 -04:00
Rapptz fe5c369fe9 Handle voice websocket closure if it's a successful close. 2016-06-10 21:45:42 -04:00
Jake 41a2b5ed73 Actually read from the voice websocket & fix heartbeat.
This change makes it so that the buffer doesn't fill and the voice server drops the socket.

Also, use correct interval for voice websocket heartbeat.
2016-06-05 21:18:36 -07:00
Rapptz 13a9a7520c Fix ytdl documentation link. 2016-05-27 15:00:50 -04:00
Rapptz 1155a0aaa4 Make Player threads into daemon threads. 2016-05-12 06:06:38 -04:00
Rapptz 3c04ec2af0 Add a way to change the player volume. 2016-05-12 06:06:38 -04:00
Rapptz 339e26275f Add VoiceClient.move_to for quick switching of voice channels. 2016-05-12 06:06:37 -04:00
Rapptz 2fc496304c Add libopus DLLs for ease of use. 2016-05-06 12:23:24 -04:00
Rapptz d9c780b8a8 Working multi-server voice support. 2016-05-01 20:54:13 -04:00
Rapptz c1b5a52823 Refactor voice websocket into gateway.py 2016-04-27 18:36:24 -04:00
Rapptz ee4574a5e1 Drop voice packets when it can be potentially blocking. 2016-03-31 23:44:22 -04:00
izy521 719c0269f4 Encrypted audio working with PyNacl
I chose PyNacl since it came with its own libsodium portable copy.
2016-03-31 23:03:34 -04:00
Rapptz 827ca1e5a2 Add boolean option to specify if VoiceClient.play_audio should encode.
This allows people to send raw opus encoded data instead of being
forced to encode to Opus.
2016-03-25 19:12:59 -04:00
Rapptz 4fa1bcadaa Add a way to set ffmpeg options before the -i flag. 2016-03-25 18:49:23 -04:00
Khazhismel Kumykov f1736bc08f Move ffmpeg process cleanup to player thread 2016-03-25 18:32:02 -04:00
Khazhismel fc2127789a Support ytsearch and playlists in youtube_dl_player 2016-03-09 21:19:12 -05:00
Jake b10432d393 Disconnect from voice server properly
This needs to exist when users get flagged as bots.
2016-03-04 18:47:50 -08:00
Khazhismel Kumykov ef57873f80 Clean up zombies
self.process.communicate(timeout=0.100) will block

zombies probably would be cleaned up anyways but in a non deterministic fashion by the garage collector
2016-03-02 23:25:20 -05:00
Rapptz 1cd3c0b5cb Make VoiceClient.create_ytdl_player a coroutine.
This is a breaking change. The reason to make it a coroutine is so that
the info retrieval is not blocking since there are rare instances where
it would take an abnormally long time. The player returned is also
augmented to have more attributes relating to the stream itself.
2016-01-31 22:06:12 -05:00
Rapptz b4604fa3f6 Change options in VoiceClient.create_ytdl_player to ytdl_options.
This is a breaking change. This allows you to set both ffmpeg options
and regular ytdl options in the same function since we now just
forward the keyword arguments to the ffmpeg player.
2016-01-31 17:49:40 -05:00
Rapptz 3d21a186fe Try to make the pause/resume loop not busy. 2016-01-26 22:27:19 -05:00
Alexey Glushko f075548d78 add `headers` option to create_ffmpeg_player()
headers can't be passed through 'options' because in '-headers' flag shoul be placed before '-i'
At least for ffmpeg 2.8.4
2016-01-26 22:27:00 -05:00
Rapptz 1f5d26b7d3 Unit correction in voice docstrings. 2016-01-18 17:44:16 -05:00
Rapptz 6c7a493fd9 Raise a different exception if ffmpeg is not found in PATH. 2016-01-16 21:46:11 -05:00
Rapptz 4edff12f6b Proper exception chaining. 2016-01-13 20:08:55 -05:00
Rapptz c1347dfcf0 Remove excessive logging when using voice. 2016-01-06 12:19:59 -05:00
Rapptz db4cc791dd Update license of files to 2016. 2016-01-04 22:28:29 -05:00
Steven Berler 49488c9151 make ip/port voice packet logic more clear
Adds comments and also rewrites the logic in a way that is much easier
to see what is going on. For example you can now easily see that the
port is actually encoded in little endian (which is different from
everything else).
2015-12-27 06:05:07 -08:00
Steven Berler 57c3363119 fix broken ip and port in voice client
Also added debug logging to make it easier to debug errors in how the
initial packet is parsed.
2015-12-27 01:16:52 -08:00
Khazhismel e8a06b7ee9 Insert options before pipe:1 in ffmpeg player, otherwise they are ignored 2015-12-23 18:00:44 -05:00
Rapptz 78e95ef755 Documentation fixes. 2015-12-17 04:11:38 -05:00
Rapptz 6d26d73e24 Client.run now does cleanup when KeyboardInterrupt is encountered. 2015-12-14 16:26:15 -05:00
Rapptz f55d82146e Remove socket.shutdown and only use socket.close instead. 2015-12-11 03:10:51 -05:00