Compare commits

..

2 Commits

3 changed files with 50 additions and 27 deletions

View File

@ -33,24 +33,6 @@ async def uptime(message):
if args.since: if args.since:
await utils.reply(message, f"{round(start_time)}") await utils.reply(message, f"{round(start_time)}")
else: else:
format_plural = lambda noun, count: noun if count == 1 else noun + "s" await utils.reply(
message, f"up {utils.format_duration(int(time.time() - start_time))}"
segments = [] )
duration = int(time.time() - start_time)
days, duration = divmod(duration, 86400)
if days >= 1:
segments.append(f"{days} {format_plural('day', days)}")
hours, duration = divmod(duration, 3600)
if hours >= 1:
segments.append(f"{hours} {format_plural('hour', hours)}")
minutes, duration = divmod(duration, 60)
if minutes >= 1:
segments.append(f"{minutes} {format_plural('minute', minutes)}")
if duration > 0:
segments.append(f"{duration} {format_plural('second', duration)}")
await utils.reply(message, f"up {', '.join(segments)}")

View File

@ -18,27 +18,26 @@ 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")
group = parser.add_mutually_exclusive_group() parser.add_argument(
group.add_argument(
"-v", "-v",
"--volume", "--volume",
default=50, default=50,
type=lambda v: arguments.range_type(v, min=0, max=150), type=lambda v: arguments.range_type(v, min=0, max=150),
help="the volume level (0 - 150)", help="the volume level (0 - 150)",
) )
group.add_argument( parser.add_argument(
"-i", "-i",
"--remove-index", "--remove-index",
type=int, type=int,
help="remove a queued song by index", help="remove a queued song by index",
) )
group.add_argument( parser.add_argument(
"-m", "-m",
"--remove-multiple", "--remove-multiple",
action="store_true", action="store_true",
help="continue removing queued songs after finding a match", help="continue removing queued songs after finding a match",
) )
group.add_argument( parser.add_argument(
"-c", "-c",
"--clear", "--clear",
action="store_true", action="store_true",
@ -61,10 +60,30 @@ async def queue_or_play(message):
type=int, type=int,
help="remove queued songs by queuer", help="remove queued songs by queuer",
) )
parser.add_argument(
"-d",
"--duration",
action="store_true",
help="print duration of queued songs",
)
if not (args := await parser.parse_args(message, tokens)): if not (args := await parser.parse_args(message, tokens)):
return return
if args.clear: if args.duration:
queued_songs = players[message.guild.id].queue
formatted_duration = utils.format_duration(
sum(
[
queued.player.duration if queued.player.duration else 0
for queued in queued_songs
]
)
)
await utils.reply(
message,
f"queue is **{formatted_duration or '0 seconds'}** long (**{len(queued_songs)}** songs queued)",
)
elif args.clear:
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

View File

@ -3,6 +3,28 @@ import disnake
import constants import constants
def format_duration(duration: int):
format_plural = lambda noun, count: noun if count == 1 else noun + "s"
segments = []
days, duration = divmod(duration, 86400)
if days >= 1:
segments.append(f"{days} {format_plural('day', days)}")
hours, duration = divmod(duration, 3600)
if hours >= 1:
segments.append(f"{hours} {format_plural('hour', hours)}")
minutes, duration = divmod(duration, 60)
if minutes >= 1:
segments.append(f"{minutes} {format_plural('minute', minutes)}")
if duration > 0:
segments.append(f"{duration} {format_plural('second', duration)}")
return ", ".join(segments)
async def add_check_reaction(message): async def add_check_reaction(message):
await message.add_reaction("") await message.add_reaction("")