import datetime import typing import discord from bot import colors from cogs.music import helper if typing.TYPE_CHECKING: from lavalink.models import AudioTrack from bot import TuneBot def format_track(track: "AudioTrack", max_length: int = 0): if max_length == 0: return f"[{track.title}]({track.uri})" if len(track.title) > max_length: track_title = track.title[: max_length - 3] + "..." else: track_title = track.title return f"[{track_title}]({track.uri})" def num_to_emoji(num: int) -> str: emojis = { "1": "1️⃣", "2": "2️⃣", "3": "3️⃣", "4": "4️⃣", "5": "5️⃣", "6": "6️⃣", "7": "7️⃣", "8": "8️⃣", "9": "9️⃣", "0": "0️⃣", } return "".join(emojis[digit] for digit in str(num)) def create_track_embed( current: "AudioTrack", queue: typing.Sequence["AudioTrack"], history: typing.Sequence["AudioTrack"], ) -> discord.Embed: embed = discord.Embed( title="Now playing...", colour=colors["embed"], ) try: duration = str(datetime.timedelta(milliseconds=int(current.duration))) except OverflowError: duration = "🔴 LIVE" embed.description = f"`{duration}` [{current.title}]({current.uri})" if len(queue) > 0: frags: typing.List[str] = [] for index, track in enumerate(queue, start=1): prefix = num_to_emoji(index) max_track_len = 45 - len(prefix) track_fmt = format_track(track, max_length=max_track_len) frags.append(f"{prefix} {track_fmt}") upcoming_fmt = "\n".join(frags) else: upcoming_fmt = "No tracks have been queued yet..." embed.add_field(name="Upcoming", value=upcoming_fmt) embed.set_image(url=f"https://i3.ytimg.com/vi/{current.identifier}/mqdefault.jpg") embed.set_footer(text=f"Uploaded by: {current.author}") return embed