From e3322af384a138beb0ddf472682f41fe6fc845b2 Mon Sep 17 00:00:00 2001 From: aikaterna <20862007+aikaterna@users.noreply.github.com> Date: Thu, 11 Jun 2020 07:38:43 -0700 Subject: [PATCH] [Audio] Redefine max length with livestream exception (#3878) * Redefine max length with livestream exception * Address review * is_track_too_long -> is_track_length_allowed for a more accurate description of what the function actually is doing * we now rely on Track.is_stream for determining whether item is a livestream (or unseekable/non-known audio length like OGG files) for determining whether it can bypass the user-set max track length * Removal of passing track length/an int to is_track_length_allowed - will always pass the full Track object now * Address review --- redbot/cogs/audio/apis/interface.py | 2 +- redbot/cogs/audio/core/abc.py | 2 +- redbot/cogs/audio/core/commands/player.py | 4 ++-- redbot/cogs/audio/core/commands/playlists.py | 2 +- redbot/cogs/audio/core/utilities/formatting.py | 2 +- redbot/cogs/audio/core/utilities/player.py | 16 +++++++--------- 6 files changed, 13 insertions(+), 15 deletions(-) diff --git a/redbot/cogs/audio/apis/interface.py b/redbot/cogs/audio/apis/interface.py index 85cfdcbaa..c2ce5132e 100644 --- a/redbot/cogs/audio/apis/interface.py +++ b/redbot/cogs/audio/apis/interface.py @@ -566,7 +566,7 @@ class AudioAPIInterface: if len(player.queue) >= 10000: continue if guild_data["maxlength"] > 0: - if self.cog.is_track_too_long(single_track, guild_data["maxlength"]): + if self.cog.is_track_length_allowed(single_track, guild_data["maxlength"]): enqueued_tracks += 1 player.add(ctx.author, single_track) self.bot.dispatch( diff --git a/redbot/cogs/audio/core/abc.py b/redbot/cogs/audio/core/abc.py index e66568ece..b7a20d3a4 100644 --- a/redbot/cogs/audio/core/abc.py +++ b/redbot/cogs/audio/core/abc.py @@ -165,7 +165,7 @@ class MixinMeta(ABC): raise NotImplementedError() @abstractmethod - def is_track_too_long(self, track: Union[lavalink.Track, int], maxlength: int) -> bool: + def is_track_length_allowed(self, track: lavalink.Track, maxlength: int) -> bool: raise NotImplementedError() @abstractmethod diff --git a/redbot/cogs/audio/core/commands/player.py b/redbot/cogs/audio/core/commands/player.py index 465d4bb3e..da999f33f 100644 --- a/redbot/cogs/audio/core/commands/player.py +++ b/redbot/cogs/audio/core/commands/player.py @@ -274,7 +274,7 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass): description=_("This track is not allowed in this server."), ) elif guild_data["maxlength"] > 0: - if self.is_track_too_long(single_track, guild_data["maxlength"]): + if self.is_track_length_allowed(single_track, guild_data["maxlength"]): single_track.requester = ctx.author player.queue.insert(0, single_track) player.maybe_shuffle() @@ -763,7 +763,7 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass): log.debug(f"Query is not allowed in {ctx.guild} ({ctx.guild.id})") continue elif guild_data["maxlength"] > 0: - if self.is_track_too_long(track, guild_data["maxlength"]): + if self.is_track_length_allowed(track, guild_data["maxlength"]): track_len += 1 player.add(ctx.author, track) self.bot.dispatch( diff --git a/redbot/cogs/audio/core/commands/playlists.py b/redbot/cogs/audio/core/commands/playlists.py index fb19d7401..07c724e93 100644 --- a/redbot/cogs/audio/core/commands/playlists.py +++ b/redbot/cogs/audio/core/commands/playlists.py @@ -1489,7 +1489,7 @@ class PlaylistCommands(MixinMeta, metaclass=CompositeMetaClass): pass if not local_path.exists() and not local_path.is_file(): continue - if maxlength > 0 and not self.is_track_too_long(track.length, maxlength): + if maxlength > 0 and not self.is_track_length_allowed(track, maxlength): continue player.add(author_obj, track) diff --git a/redbot/cogs/audio/core/utilities/formatting.py b/redbot/cogs/audio/core/utilities/formatting.py index dafd12e67..43af279f8 100644 --- a/redbot/cogs/audio/core/utilities/formatting.py +++ b/redbot/cogs/audio/core/utilities/formatting.py @@ -165,7 +165,7 @@ class FormattingUtilities(MixinMeta, metaclass=CompositeMetaClass): ) elif guild_data["maxlength"] > 0: - if self.is_track_too_long(search_choice.length, guild_data["maxlength"]): + if self.is_track_length_allowed(search_choice, guild_data["maxlength"]): player.add(ctx.author, search_choice) player.maybe_shuffle() self.bot.dispatch( diff --git a/redbot/cogs/audio/core/utilities/player.py b/redbot/cogs/audio/core/utilities/player.py index 5b0880a25..06828aec2 100644 --- a/redbot/cogs/audio/core/utilities/player.py +++ b/redbot/cogs/audio/core/utilities/player.py @@ -435,7 +435,7 @@ class PlayerUtilities(MixinMeta, metaclass=CompositeMetaClass): log.debug(f"Query is not allowed in {ctx.guild} ({ctx.guild.id})") continue elif guild_data["maxlength"] > 0: - if self.is_track_too_long(track, guild_data["maxlength"]): + if self.is_track_length_allowed(track, guild_data["maxlength"]): track_len += 1 player.add(ctx.author, track) self.bot.dispatch( @@ -514,7 +514,7 @@ class PlayerUtilities(MixinMeta, metaclass=CompositeMetaClass): ctx, title=_("This track is not allowed in this server.") ) elif guild_data["maxlength"] > 0: - if self.is_track_too_long(single_track, guild_data["maxlength"]): + if self.is_track_length_allowed(single_track, guild_data["maxlength"]): player.add(ctx.author, single_track) player.maybe_shuffle() self.bot.dispatch( @@ -661,12 +661,10 @@ class PlayerUtilities(MixinMeta, metaclass=CompositeMetaClass): else: return False - def is_track_too_long(self, track: Union[lavalink.Track, int], maxlength: int) -> bool: - try: - length = round(track.length / 1000) - except AttributeError: - length = round(track / 1000) - - if maxlength < length <= 92233720368547758070: # livestreams return 9223372036854775807ms + def is_track_length_allowed(self, track: lavalink.Track, maxlength: int) -> bool: + if track.is_stream: + return True + length = track.length / 1000 + if length > maxlength: return False return True