feat(commands/voice/queue): allow removing multiple indices

This commit is contained in:
Ryan 2025-01-06 12:46:46 -05:00
parent 5333559b25
commit 7c4041c662
Signed by: ErrorNoInternet
GPG Key ID: 2486BFB7B1E6A4A3

View File

@ -31,11 +31,12 @@ async def queue_or_play(message, edited=False):
"-i", "-i",
"--remove-index", "--remove-index",
type=int, type=int,
help="remove a queued song by index", nargs="*",
help="remove queued songs by index",
) )
parser.add_argument( parser.add_argument(
"-m", "-m",
"--remove-multiple", "--match-multiple",
action="store_true", action="store_true",
help="continue removing queued after finding a match", help="continue removing queued after finding a match",
) )
@ -89,14 +90,25 @@ async def queue_or_play(message, edited=False):
players[message.guild.id].queue.clear() players[message.guild.id].queue.clear()
await utils.add_check_reaction(message) await utils.add_check_reaction(message)
return return
elif i := args.remove_index: elif indices := args.remove_index:
if i <= 0 or i > len(players[message.guild.id].queue): targets = []
await utils.reply(message, "invalid index!") for i in indices:
return if i <= 0 or i > len(players[message.guild.id].queue):
await utils.reply(message, f"invalid index `{i}`!")
return
targets.append(players[message.guild.id].queue[i - 1])
queued = players[message.guild.id].queue[i - 1] for target in targets:
del players[message.guild.id].queue[i - 1] if target in players[message.guild.id].queue:
await utils.reply(message, f"**X** {queued.format()}") players[message.guild.id].queue.remove(target)
if len(targets) == 1:
await utils.reply(message, f"**X** {targets[0].format()}")
else:
await utils.reply(
message,
f"removed **{len(targets)}** queued {'song' if len(targets) == 1 else 'songs'}",
)
elif args.remove_title or args.remove_queuer: elif args.remove_title or args.remove_queuer:
targets = [] targets = []
for queued in players[message.guild.id].queue: for queued in players[message.guild.id].queue:
@ -107,7 +119,7 @@ async def queue_or_play(message, edited=False):
if q := args.remove_queuer: if q := args.remove_queuer:
if q == queued.trigger_message.author.id: if q == queued.trigger_message.author.id:
targets.append(queued) targets.append(queued)
if not args.remove_multiple: if not args.match_multiple:
targets = targets[:1] targets = targets[:1]
for target in targets: for target in targets: