[audio] adds typing indicator to playlist dedupe (#3058)

* [audio] adds typing indicator to playlist dedupe

* [audio] not sure what happened here lol

* [audio] forgot the return

* add changelog

* [audio] fix for black
This commit is contained in:
kennnyshiwa 2019-11-22 18:53:42 -05:00 committed by Michael H
parent 4b62598a3d
commit a3140b6659
2 changed files with 80 additions and 76 deletions

View File

@ -0,0 +1 @@
Add typing indicator to playlist dedupe

View File

@ -3737,89 +3737,92 @@ class Audio(commands.Cog):
[p]playlist dedupe MyGlobalPlaylist --scope Global [p]playlist dedupe MyGlobalPlaylist --scope Global
[p]playlist dedupe MyPersonalPlaylist --scope User [p]playlist dedupe MyPersonalPlaylist --scope User
""" """
if scope_data is None: async with ctx.typing():
scope_data = [PlaylistScope.GUILD.value, ctx.author, ctx.guild, False] if scope_data is None:
scope, author, guild, specified_user = scope_data scope_data = [PlaylistScope.GUILD.value, ctx.author, ctx.guild, False]
scope_name = humanize_scope( scope, author, guild, specified_user = scope_data
scope, ctx=guild if scope == PlaylistScope.GUILD.value else author scope_name = humanize_scope(
) scope, ctx=guild if scope == PlaylistScope.GUILD.value else author
try:
playlist_id, playlist_arg = await self._get_correct_playlist_id(
ctx, playlist_matches, scope, author, guild, specified_user
)
except TooManyMatches as e:
return await self._embed_msg(ctx, str(e))
if playlist_id is None:
return await self._embed_msg(
ctx, _("Could not match '{arg}' to a playlist.").format(arg=playlist_arg)
) )
try: try:
playlist = await get_playlist(playlist_id, scope, self.bot, guild, author) playlist_id, playlist_arg = await self._get_correct_playlist_id(
except RuntimeError: ctx, playlist_matches, scope, author, guild, specified_user
return await self._embed_msg( )
ctx, except TooManyMatches as e:
_("Playlist {id} does not exist in {scope} scope.").format( return await self._embed_msg(ctx, str(e))
id=playlist_id, scope=humanize_scope(scope, the=True) if playlist_id is None:
), return await self._embed_msg(
) ctx, _("Could not match '{arg}' to a playlist.").format(arg=playlist_arg)
except MissingGuild: )
return await self._embed_msg(
ctx, _("You need to specify the Guild ID for the guild to lookup.")
)
if not await self.can_manage_playlist(scope, playlist, ctx, author, guild): try:
return playlist = await get_playlist(playlist_id, scope, self.bot, guild, author)
except RuntimeError:
return await self._embed_msg(
ctx,
_("Playlist {id} does not exist in {scope} scope.").format(
id=playlist_id, scope=humanize_scope(scope, the=True)
),
)
except MissingGuild:
return await self._embed_msg(
ctx, _("You need to specify the Guild ID for the guild to lookup.")
)
track_objects = playlist.tracks_obj if not await self.can_manage_playlist(scope, playlist, ctx, author, guild):
original_count = len(track_objects) return
unique_tracks = set()
unique_tracks_add = unique_tracks.add
track_objects = [
x for x in track_objects if not (x in unique_tracks or unique_tracks_add(x))
]
tracklist = [] track_objects = playlist.tracks_obj
for track in track_objects: original_count = len(track_objects)
track_keys = track._info.keys() unique_tracks = set()
track_values = track._info.values() unique_tracks_add = unique_tracks.add
track_id = track.track_identifier track_objects = [
track_info = {} x for x in track_objects if not (x in unique_tracks or unique_tracks_add(x))
for k, v in zip(track_keys, track_values): ]
track_info[k] = v
keys = ["track", "info"]
values = [track_id, track_info]
track_obj = {}
for key, value in zip(keys, values):
track_obj[key] = value
tracklist.append(track_obj)
final_count = len(tracklist) tracklist = []
if original_count - final_count != 0: for track in track_objects:
update = {"tracks": tracklist, "url": None} track_keys = track._info.keys()
await playlist.edit(update) track_values = track._info.values()
track_id = track.track_identifier
track_info = {}
for k, v in zip(track_keys, track_values):
track_info[k] = v
keys = ["track", "info"]
values = [track_id, track_info]
track_obj = {}
for key, value in zip(keys, values):
track_obj[key] = value
tracklist.append(track_obj)
if original_count - final_count != 0: final_count = len(tracklist)
await self._embed_msg( if original_count - final_count != 0:
ctx, update = {"tracks": tracklist, "url": None}
_( await playlist.edit(update)
"Removed {track_diff} duplicated "
"tracks from {name} (`{id}`) [**{scope}**] playlist." if original_count - final_count != 0:
).format( await self._embed_msg(
name=playlist.name, ctx,
id=playlist.id, _(
track_diff=original_count - final_count, "Removed {track_diff} duplicated "
scope=scope_name, "tracks from {name} (`{id}`) [**{scope}**] playlist."
), ).format(
) name=playlist.name,
else: id=playlist.id,
await self._embed_msg( track_diff=original_count - final_count,
ctx, scope=scope_name,
_("{name} (`{id}`) [**{scope}**] playlist has no duplicate tracks.").format( ),
name=playlist.name, id=playlist.id, scope=scope_name )
), return
) else:
await self._embed_msg(
ctx,
_("{name} (`{id}`) [**{scope}**] playlist has no duplicate tracks.").format(
name=playlist.name, id=playlist.id, scope=scope_name
),
)
return
@checks.is_owner() @checks.is_owner()
@playlist.command(name="download", usage="<playlist_name_OR_id> [v2=False] [args]") @playlist.command(name="download", usage="<playlist_name_OR_id> [v2=False] [args]")