feat(commands/voice/queue): print video duration

This commit is contained in:
Ryan 2024-12-30 20:08:38 -05:00
parent dc795f7ffe
commit 333d6890c2
Signed by: ErrorNoInternet
GPG Key ID: 2486BFB7B1E6A4A3
2 changed files with 19 additions and 10 deletions

View File

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

View File

@ -5,6 +5,7 @@ import disnake
import yt_dlp import yt_dlp
import constants import constants
import utils
ytdl = yt_dlp.YoutubeDL(constants.YTDL_OPTIONS) ytdl = yt_dlp.YoutubeDL(constants.YTDL_OPTIONS)
@ -14,9 +15,9 @@ class YTDLSource(disnake.PCMVolumeTransformer):
self, source: disnake.AudioSource, *, data: dict[str, Any], volume: float = 0.5 self, source: disnake.AudioSource, *, data: dict[str, Any], volume: float = 0.5
): ):
super().__init__(source, volume) super().__init__(source, volume)
print(data)
self.title = data.get("title") self.title = data.get("title")
self.original_url = data.get("original_url") self.original_url = data.get("original_url")
self.duration = data.get("duration")
@classmethod @classmethod
async def from_url( async def from_url(
@ -63,12 +64,24 @@ class QueuedSong:
self.player = player self.player = player
self.queuer = queuer self.queuer = queuer
def format(self, with_queuer=False, hide_preview=False): def format(self, with_queuer=False, hide_preview=False) -> str:
return ( return (
f"[`{self.player.title}`]({'<' if hide_preview else ''}{self.player.original_url}{'>' if hide_preview else ''})" f"[`{self.player.title}`]({'<' if hide_preview else ''}{self.player.original_url}{'>' if hide_preview else ''}) [{self.format_duration(self.player.duration)}]"
+ (f" (<@{self.queuer}>)" if with_queuer else "") + (f" (<@{self.queuer}>)" if with_queuer else "")
) )
def format_duration(self, duration: int) -> str:
segments = []
hours, duration = divmod(duration, 3600)
if hours > 0:
segments.append(hours)
minutes, duration = divmod(duration, 60)
if minutes > 0:
segments.append(minutes)
if duration > 0:
segments.append(duration)
return f"{':'.join(str(s) for s in segments)}"
def __reload_module__(): def __reload_module__():
global ytdl global ytdl