diff options
Diffstat (limited to 'discord/player.py')
| -rw-r--r-- | discord/player.py | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/discord/player.py b/discord/player.py index 74cd073f..8ee3bd13 100644 --- a/discord/player.py +++ b/discord/player.py @@ -27,6 +27,7 @@ DEALINGS IN THE SOFTWARE. import threading import subprocess import audioop +import asyncio import logging import shlex import time @@ -261,6 +262,7 @@ class AudioPlayer(threading.Thread): # getattr lookup speed ups play_audio = self.client.send_audio_packet + self._speak(True) while not self._end.is_set(): # are we paused? @@ -309,14 +311,19 @@ class AudioPlayer(threading.Thread): def stop(self): self._end.set() self._resumed.set() + self._speak(False) - def pause(self): + def pause(self, *, update_speaking=True): self._resumed.clear() + if update_speaking: + self._speak(False) - def resume(self): + def resume(self, *, update_speaking=True): self.loops = 0 self._start = time.time() self._resumed.set() + if update_speaking: + self._speak(True) def is_playing(self): return self._resumed.is_set() and not self._end.is_set() @@ -326,6 +333,12 @@ class AudioPlayer(threading.Thread): def _set_source(self, source): with self._lock: - self.pause() + self.pause(update_speaking=False) self.source = source - self.resume() + self.resume(update_speaking=False) + + def _speak(self, speaking): + try: + asyncio.run_coroutine_threadsafe(self.client.ws.speak(speaking), self.client.loop) + except Exception as e: + log.info("Speaking call in player failed: %s", e) |