mirror of
https://github.com/Matthww/TuneBot.git
synced 2026-09-21 23:37:47 +00:00
New embed with queue and image
This commit is contained in:
@@ -7,6 +7,7 @@ from discord.ext import commands
|
|||||||
|
|
||||||
from bot import TuneBot
|
from bot import TuneBot
|
||||||
from cogs.music import helper
|
from cogs.music import helper
|
||||||
|
from cogs.music import track_embed
|
||||||
from cogs.music.interactions import MusicCommands
|
from cogs.music.interactions import MusicCommands
|
||||||
from cogs.music.interactions import QUEUE_SIZE
|
from cogs.music.interactions import QUEUE_SIZE
|
||||||
from cogs.music.voice_client import LavalinkVoiceClient
|
from cogs.music.voice_client import LavalinkVoiceClient
|
||||||
@@ -51,8 +52,12 @@ class MusicCog(BaseCog, name="Music"):
|
|||||||
elif isinstance(event, lavalink.events.TrackStartEvent):
|
elif isinstance(event, lavalink.events.TrackStartEvent):
|
||||||
channel_id = int(event.player.fetch("channel"))
|
channel_id = int(event.player.fetch("channel"))
|
||||||
channel: TextChannel = self.bot.get_channel(channel_id)
|
channel: TextChannel = self.bot.get_channel(channel_id)
|
||||||
embed = helper.create_track_embed(event.player.current)
|
|
||||||
await channel.send(embed=embed)
|
controls = track_embed.create_embed_controls(self.bot)
|
||||||
|
embed = track_embed.create_track_embed(
|
||||||
|
event.player.current, event.player.queue, []
|
||||||
|
)
|
||||||
|
await channel.send(embed=embed, view=controls)
|
||||||
elif isinstance(event, lavalink.events.TrackEndEvent):
|
elif isinstance(event, lavalink.events.TrackEndEvent):
|
||||||
await helper.fill_player_queue(self.bot, event.player, 1)
|
await helper.fill_player_queue(self.bot, event.player, 1)
|
||||||
|
|
||||||
|
|||||||
+1
-19
@@ -37,24 +37,6 @@ async def fill_player_queue(
|
|||||||
player.add(requester=bot.user.id, track=track)
|
player.add(requester=bot.user.id, track=track)
|
||||||
|
|
||||||
|
|
||||||
def create_track_embed(track: lavalink.models.AudioTrack) -> discord.Embed:
|
|
||||||
embed = discord.Embed(
|
|
||||||
title="Now playing...",
|
|
||||||
colour=colors["embed"],
|
|
||||||
)
|
|
||||||
embed.description = f"[{track.title}]({track.uri})"
|
|
||||||
embed.set_thumbnail(url=f"https://i3.ytimg.com/vi/{track.identifier}/mqdefault.jpg")
|
|
||||||
|
|
||||||
try:
|
|
||||||
duration = str(datetime.timedelta(milliseconds=int(track.duration)))
|
|
||||||
except OverflowError:
|
|
||||||
duration = "🔴 LIVE"
|
|
||||||
|
|
||||||
embed.add_field(name="Duration", value=duration)
|
|
||||||
embed.add_field(name="Author", value=track.author)
|
|
||||||
return embed
|
|
||||||
|
|
||||||
|
|
||||||
async def ensure_voice(
|
async def ensure_voice(
|
||||||
permissions: discord.Permissions,
|
permissions: discord.Permissions,
|
||||||
player: "DefaultPlayer",
|
player: "DefaultPlayer",
|
||||||
@@ -77,4 +59,4 @@ async def ensure_voice(
|
|||||||
raise Exception("You need to be in my voicechannel")
|
raise Exception("You need to be in my voicechannel")
|
||||||
|
|
||||||
|
|
||||||
__all__ = ("fill_player_queue", "create_track_embed", "get_player", "ensure_voice")
|
__all__ = ("fill_player_queue", "get_player", "ensure_voice")
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from discord import Interaction
|
|||||||
from bot import config
|
from bot import config
|
||||||
from cogs.music import helper
|
from cogs.music import helper
|
||||||
from utils.embed import create_embed
|
from utils.embed import create_embed
|
||||||
|
from cogs.music import track_embed
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
if typing.TYPE_CHECKING:
|
||||||
from bot import TuneBot
|
from bot import TuneBot
|
||||||
@@ -84,8 +85,9 @@ class MusicCommands(app_commands.Group):
|
|||||||
await ctx.response.send_message(embed=embed)
|
await ctx.response.send_message(embed=embed)
|
||||||
return
|
return
|
||||||
|
|
||||||
embed = helper.create_track_embed(player.current)
|
controls = track_embed.create_embed_controls(self.bot)
|
||||||
await ctx.response.send_message(embed=embed)
|
embed = track_embed.create_track_embed(player.current, player.queue, [])
|
||||||
|
await ctx.response.send_message(embed=embed, view=controls)
|
||||||
|
|
||||||
@app_commands.command(name="queue", description="See what's ahead")
|
@app_commands.command(name="queue", description="See what's ahead")
|
||||||
async def queue(self, ctx: Interaction):
|
async def queue(self, ctx: Interaction):
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
def create_embed_controls(bot: "TuneBot") -> "EmbedControls":
|
||||||
|
return EmbedControls(bot)
|
||||||
|
|
||||||
|
|
||||||
|
class EmbedControls(discord.ui.View):
|
||||||
|
def __init__(self, bot: "TuneBot"):
|
||||||
|
super().__init__()
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
@discord.ui.button(label="Skip")
|
||||||
|
async def skip(self, ctx: discord.Interaction, button: discord.ui.Button):
|
||||||
|
player = helper.get_player(ctx.client, ctx.guild_id)
|
||||||
|
await player.skip()
|
||||||
|
await ctx.response.defer()
|
||||||
Reference in New Issue
Block a user