diff --git a/cogs/audio.py b/cogs/audio.py index fb8a889ab..c95a41cea 100644 --- a/cogs/audio.py +++ b/cogs/audio.py @@ -242,12 +242,6 @@ class Audio: self.local_playlist_path = "data/audio/localtracks" self._old_game = False - async def _add_song_status(self, song): - if self._old_game is False: - self._old_game = current - await self.bot.change_status(discord.Game(name=song.title)) - log.debug('Bot status changed to song title: ' + song.title) - def _add_to_queue(self, server, url): if server.id not in self.queue: self._setup_queue(server) @@ -461,16 +455,6 @@ class Audio: # TODO: _enable_controls() - # returns list of active voice channels - # assuming list does not change during the execution of this function - # if that happens, blame asyncio. - def _get_active_voice_clients(self): - avcs = [] - for vc in self.bot.voice_clients: - if hasattr(vc, 'audio_player') and not vc.audio_player.is_done(): - avcs.append(vc) - return avcs - def _get_queue(self, server, limit): if server.id not in self.queue: return [] @@ -829,12 +813,6 @@ class Audio: if server.id in self.queue: del self.queue[server.id] - async def _remove_song_status(self): - if self._old_game is not False: - await self.bot.change_status(self._old_game) - log.debug('Bot status returned to ' + self._old_game) - self._old_game = False - def _save_playlist(self, server, name, playlist): sid = server.id try: @@ -903,14 +881,14 @@ class Audio: "QUEUE": deque(), "TEMP_QUEUE": deque(), "NOW_PLAYING": None} - def _stop(self, server): + async def _stop(self, server): self._setup_queue(server) self._stop_player(server) self._stop_downloader(server) - self.bot.loop.create_task(self._update_bot_status()) + await self.update_bot_status() async def _stop_and_disconnect(self, server): - self._stop(server) + await self._stop(server) await self._disconnect_voice_client(server) def _stop_downloader(self, server): @@ -930,19 +908,6 @@ class Audio: self._kill_player(server) del voice_client.audio_player - # no return. they can check themselves. - async def _update_bot_status(self): - if self.settings["TITLE_STATUS"]: - active_servers = self.get_active_voice_clients() - song = None - if len(active_servers) == 1: - server = active_servers[0].server - song = self.queue[server.id]["NOW_PLAYING"] - if song: - await self._add_song_status(song) - else: - await self._remove_song_status() - def _valid_playlist_name(self, name): for l in name: if l.isdigit() or l.isalpha() or l == "_": @@ -1010,10 +975,10 @@ class Audio: self.settings["TITLE_STATUS"] = not self.settings["TITLE_STATUS"] if self.settings["TITLE_STATUS"]: await self.bot.say("If only one server is playing music, songs' titles will now show up as status") - # not updating on disable if we say disable means don't mess with it. - await self._update_bot_status() else: await self.bot.say("Songs' titles will no longer show up as status") + # go ahead and update here. + await self.update_bot_status() self.save_settings() @audioset.command(pass_context=True, name="volume", no_pm=True) @@ -1113,7 +1078,7 @@ class Audio: voice_channel = author.voice_channel if voice_channel is not None: - self._stop(server) + await self._stop(server) await self._join_voice_channel(voice_channel) @@ -1633,7 +1598,7 @@ class Audio: # TODO: All those fun checks for permissions server = ctx.message.server - self._stop(server) + await self._stop(server) @commands.command(name="yt", pass_context=True, no_pm=True) async def yt_search(self, ctx, *, search_terms: str): @@ -1652,6 +1617,40 @@ class Audio: return False return True + # returns list of active voice channels + # assuming list does not change during the execution of this function + # if that happens, blame asyncio. + def get_active_voice_clients(self): + avcs = [] + for vc in self.bot.voice_clients: + if hasattr(vc, 'audio_player') and not vc.audio_player.is_done(): + avcs.append(vc) + return avcs + + # returns False if not changed. People may want in the future? ¯\_(ツ)_/¯ + async def update_bot_status(self): + if self.settings["TITLE_STATUS"]: + active_servers = self.get_active_voice_clients() + song = None + if len(active_servers) == 1: + server = active_servers[0].server + song = self.queue[server.id]["NOW_PLAYING"] + if song: + if self._old_game is False: # self._old_game can be None. want to use it. + self._old_game = server.me.game + await self.bot.change_status(discord.Game(name=song.title)) + elif self._old_game is not False: + await self.bot.change_status(self._old_game) + self._old_game = False + else: + return False + elif self._old_game is not False: + await self.bot.change_status(self._old_game) + self._old_game = False + else: + return False + return True + async def cache_manager(self): while self == self.bot.get_cog("Audio"): if self._cache_too_large(): @@ -1777,7 +1776,7 @@ class Audio: song = None self.queue[server.id]["NOW_PLAYING"] = song log.debug("set now_playing for sid {}".format(server.id)) - await self._update_bot_status() + await self.update_bot_status() elif server.id in self.downloaders: # We're playing but we might be able to download a new song