feat(commands/voice/queue): add remove commands
This commit is contained in:
parent
393403ef7d
commit
f09e82c211
@ -17,8 +17,11 @@ class ArgumentParser:
|
|||||||
self.parser.print_help()
|
self.parser.print_help()
|
||||||
return help_buffer.getvalue().replace(" and exit", "")
|
return help_buffer.getvalue().replace(" and exit", "")
|
||||||
|
|
||||||
|
def add_mutually_exclusive_group(self, *args, **kwargs):
|
||||||
|
return self.parser.add_mutually_exclusive_group(*args, **kwargs)
|
||||||
|
|
||||||
def add_argument(self, *args, **kwargs):
|
def add_argument(self, *args, **kwargs):
|
||||||
self.parser.add_argument(*args, **kwargs)
|
return self.parser.add_argument(*args, **kwargs)
|
||||||
|
|
||||||
async def parse_args(self, message, tokens) -> argparse.Namespace | None:
|
async def parse_args(self, message, tokens) -> argparse.Namespace | None:
|
||||||
try:
|
try:
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
import arguments
|
import arguments
|
||||||
|
|
||||||
import commands
|
import commands
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
import functools
|
import functools
|
||||||
|
|
||||||
import arguments
|
import arguments
|
||||||
import commands
|
|
||||||
import utils
|
|
||||||
import youtubedl
|
import youtubedl
|
||||||
from state import client, player_current, player_queue
|
from state import client, player_current, player_queue
|
||||||
|
|
||||||
|
import commands
|
||||||
|
import utils
|
||||||
|
|
||||||
|
|
||||||
async def queue_or_play(message):
|
async def queue_or_play(message):
|
||||||
await ensure_joined(message)
|
await ensure_joined(message)
|
||||||
@ -20,13 +21,8 @@ async def queue_or_play(message):
|
|||||||
tokens[0], "queue a song, list the queue, or resume playback"
|
tokens[0], "queue a song, list the queue, or resume playback"
|
||||||
)
|
)
|
||||||
parser.add_argument("query", nargs="?", help="yt-dlp URL or query to get song")
|
parser.add_argument("query", nargs="?", help="yt-dlp URL or query to get song")
|
||||||
parser.add_argument(
|
group = parser.add_mutually_exclusive_group()
|
||||||
"-c",
|
group.add_argument(
|
||||||
"--clear",
|
|
||||||
action="store_true",
|
|
||||||
help="clear all queued songs",
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"-v",
|
"-v",
|
||||||
"--volume",
|
"--volume",
|
||||||
default=50,
|
default=50,
|
||||||
@ -34,6 +30,35 @@ async def queue_or_play(message):
|
|||||||
metavar="[0-150]",
|
metavar="[0-150]",
|
||||||
help="the volume level (0 - 150)",
|
help="the volume level (0 - 150)",
|
||||||
)
|
)
|
||||||
|
group.add_argument(
|
||||||
|
"-i",
|
||||||
|
"--remove-index",
|
||||||
|
type=int,
|
||||||
|
help="remove a queued song by index",
|
||||||
|
)
|
||||||
|
group.add_argument(
|
||||||
|
"-m",
|
||||||
|
"--remove-multiple",
|
||||||
|
action="store_true",
|
||||||
|
help="continue removing queued songs after finding a match",
|
||||||
|
)
|
||||||
|
group.add_argument(
|
||||||
|
"-c",
|
||||||
|
"--clear",
|
||||||
|
action="store_true",
|
||||||
|
help="remove all queued songs",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-t",
|
||||||
|
"--remove-title",
|
||||||
|
help="remove queued songs by title",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-q",
|
||||||
|
"--remove-queuer",
|
||||||
|
type=int,
|
||||||
|
help="remove queued songs by queuer",
|
||||||
|
)
|
||||||
if not (args := await parser.parse_args(message, tokens)):
|
if not (args := await parser.parse_args(message, tokens)):
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -41,6 +66,31 @@ async def queue_or_play(message):
|
|||||||
player_queue[message.guild.id] = []
|
player_queue[message.guild.id] = []
|
||||||
await utils.add_check_reaction(message)
|
await utils.add_check_reaction(message)
|
||||||
return
|
return
|
||||||
|
elif i := args.remove_index:
|
||||||
|
try:
|
||||||
|
queued = player_queue[message.guild.id][i - 1]
|
||||||
|
del player_queue[message.guild.id][i - 1]
|
||||||
|
await utils.reply(message, f"**x** `{queued['player'].title}`")
|
||||||
|
except:
|
||||||
|
await utils.reply(message, "invalid index!")
|
||||||
|
elif args.remove_title or args.remove_queuer:
|
||||||
|
targets = []
|
||||||
|
for queued in player_queue[message.guild.id]:
|
||||||
|
if t := args.remove_title:
|
||||||
|
if t in queued["player"].title:
|
||||||
|
targets.append(queued)
|
||||||
|
if q := args.remove_queuer:
|
||||||
|
if q == queued["queuer"]:
|
||||||
|
targets.append(queued)
|
||||||
|
if not args.remove_multiple:
|
||||||
|
targets = targets[:1]
|
||||||
|
for target in targets:
|
||||||
|
if target in player_queue[message.guild.id]:
|
||||||
|
player_queue[message.guild.id].remove(target)
|
||||||
|
await utils.reply(
|
||||||
|
message,
|
||||||
|
f"removed **{len(targets)}** queued {'song' if len(targets) == 1 else 'songs'}",
|
||||||
|
)
|
||||||
elif query := args.query:
|
elif query := args.query:
|
||||||
try:
|
try:
|
||||||
async with message.channel.typing():
|
async with message.channel.typing():
|
||||||
@ -80,7 +130,7 @@ async def queue_or_play(message):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
generate_currently_playing = (
|
generate_currently_playing = (
|
||||||
lambda: f"**0.** {'**paused:** ' if message.guild.voice_client.is_paused() else ''}`{message.guild.voice_client.source.title}` (<@{player_current[message.guild.id]['queuer']}>)"
|
lambda: f"**0.** {'(paused) ' if message.guild.voice_client.is_paused() else ''}`{message.guild.voice_client.source.title}` (<@{player_current[message.guild.id]['queuer']}>)"
|
||||||
)
|
)
|
||||||
if (
|
if (
|
||||||
not player_queue[message.guild.id]
|
not player_queue[message.guild.id]
|
||||||
@ -201,7 +251,8 @@ async def volume(message):
|
|||||||
def play_next(message, once=False):
|
def play_next(message, once=False):
|
||||||
message.guild.voice_client.stop()
|
message.guild.voice_client.stop()
|
||||||
if player_queue[message.guild.id]:
|
if player_queue[message.guild.id]:
|
||||||
queued = player_queue[message.guild.id].pop()
|
queued = player_queue[message.guild.id][0]
|
||||||
|
del player_queue[message.guild.id][0]
|
||||||
player_current[message.guild.id] = queued
|
player_current[message.guild.id] = queued
|
||||||
message.guild.voice_client.play(
|
message.guild.voice_client.play(
|
||||||
queued["player"], after=lambda _: play_next(message) if not once else None
|
queued["player"], after=lambda _: play_next(message) if not once else None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user