[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
This commit is contained in:
aikaterna 2020-06-11 07:38:43 -07:00 committed by GitHub
parent b1d394eac5
commit e3322af384
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 13 additions and 15 deletions

View File

@ -566,7 +566,7 @@ class AudioAPIInterface:
if len(player.queue) >= 10000: if len(player.queue) >= 10000:
continue continue
if guild_data["maxlength"] > 0: 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 enqueued_tracks += 1
player.add(ctx.author, single_track) player.add(ctx.author, single_track)
self.bot.dispatch( self.bot.dispatch(

View File

@ -165,7 +165,7 @@ class MixinMeta(ABC):
raise NotImplementedError() raise NotImplementedError()
@abstractmethod @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() raise NotImplementedError()
@abstractmethod @abstractmethod

View File

@ -274,7 +274,7 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
description=_("This track is not allowed in this server."), description=_("This track is not allowed in this server."),
) )
elif guild_data["maxlength"] > 0: 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 single_track.requester = ctx.author
player.queue.insert(0, single_track) player.queue.insert(0, single_track)
player.maybe_shuffle() 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})") log.debug(f"Query is not allowed in {ctx.guild} ({ctx.guild.id})")
continue continue
elif guild_data["maxlength"] > 0: 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 track_len += 1
player.add(ctx.author, track) player.add(ctx.author, track)
self.bot.dispatch( self.bot.dispatch(

View File

@ -1489,7 +1489,7 @@ class PlaylistCommands(MixinMeta, metaclass=CompositeMetaClass):
pass pass
if not local_path.exists() and not local_path.is_file(): if not local_path.exists() and not local_path.is_file():
continue 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 continue
player.add(author_obj, track) player.add(author_obj, track)

View File

@ -165,7 +165,7 @@ class FormattingUtilities(MixinMeta, metaclass=CompositeMetaClass):
) )
elif guild_data["maxlength"] > 0: 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.add(ctx.author, search_choice)
player.maybe_shuffle() player.maybe_shuffle()
self.bot.dispatch( self.bot.dispatch(

View File

@ -435,7 +435,7 @@ class PlayerUtilities(MixinMeta, metaclass=CompositeMetaClass):
log.debug(f"Query is not allowed in {ctx.guild} ({ctx.guild.id})") log.debug(f"Query is not allowed in {ctx.guild} ({ctx.guild.id})")
continue continue
elif guild_data["maxlength"] > 0: 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 track_len += 1
player.add(ctx.author, track) player.add(ctx.author, track)
self.bot.dispatch( self.bot.dispatch(
@ -514,7 +514,7 @@ class PlayerUtilities(MixinMeta, metaclass=CompositeMetaClass):
ctx, title=_("This track is not allowed in this server.") ctx, title=_("This track is not allowed in this server.")
) )
elif guild_data["maxlength"] > 0: 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.add(ctx.author, single_track)
player.maybe_shuffle() player.maybe_shuffle()
self.bot.dispatch( self.bot.dispatch(
@ -661,12 +661,10 @@ class PlayerUtilities(MixinMeta, metaclass=CompositeMetaClass):
else: else:
return False return False
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:
try: if track.is_stream:
length = round(track.length / 1000) return True
except AttributeError: length = track.length / 1000
length = round(track / 1000) if length > maxlength:
if maxlength < length <= 92233720368547758070: # livestreams return 9223372036854775807ms
return False return False
return True return True