Added queue import and export command

This commit is contained in:
Choco
2023-07-09 20:19:55 +08:00
parent c0330d12dd
commit 61a2d1d974
2 changed files with 77 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ import discord
import voicelink
import re
from io import StringIO
from discord import app_commands
from discord.ext import commands
from function import (
@@ -381,7 +382,11 @@ class Basic(commands.Cog):
await player.seek(num, ctx.author)
await ctx.send(player.get_msg('seek').format(position))
@commands.hybrid_command(name="queue", aliases=get_aliases("queue"))
@commands.hybrid_group(
name="queue",
aliases=get_aliases("queue"),
invoke_without_command=True
)
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
async def queue(self, ctx: commands.Context):
"Display the players queue songs in your queue."
@@ -398,6 +403,76 @@ class Basic(commands.Cog):
message = await ctx.send(embed=view.build_embed(), view=view)
view.response = message
@queue.command(name="export", aliases=get_aliases("export"))
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
async def export(self, ctx: commands.Context):
"Export the queue into a txt file."
player: voicelink.Player = ctx.guild.voice_client
if not player:
return await ctx.send(get_lang(ctx.guild.id, "noPlayer"), ephemeral=True)
if not player.is_user_join(ctx.author):
return await ctx.send(player.get_msg('notInChannel').format(ctx.author.mention, player.channel.mention), ephemeral=True)
if player.queue.is_empty and not player.current:
return await ctx.send(player.get_msg('noTrackPlaying'), ephemeral=True)
await ctx.defer()
tracks = player.queue.tracks(True)
temp = ""
raw = "----------->Raw Info<-----------\n"
total_length = 0
for index, track in enumerate(tracks, start=1):
temp += f"{index}. {track.title} [{ctime(track.length)}]\n"
raw += track.track_id
if index != len(tracks):
raw += ","
total_length += track.length
temp = "!Remember do not change this file!\n------------->Info<-------------\nGuild: {} ({})\nRequester: {} ({})\nTracks: {} - {}\n------------>Tracks<------------\n".format(
ctx.guild.name, ctx.guild.id,
ctx.author.name, ctx.author.id,
len(tracks), ctime(total_length)
) + temp
temp += raw
await ctx.reply(content="", file=discord.File(StringIO(temp), filename=f"{ctx.guild.id}_Full_Queue.txt"))
@queue.command(name="import", aliases=get_aliases("import"))
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
async def _import(self, ctx: commands.Context, attachment: discord.Attachment):
"Import the track into the queue."
player: voicelink.Player = ctx.guild.voice_client
if not player:
player = await voicelink.connect_channel(ctx)
if not player.is_user_join(ctx.author):
return await ctx.send(player.get_msg('notInChannel').format(ctx.author.mention, player.channel.mention), ephemeral=True)
try:
bytes = await attachment.read()
last_line = bytes.split(b"\n")[-1]
track_ids = last_line.decode().split(",")
tracks = [voicelink.Track(track_id=track_id, info=voicelink.decode(track_id), requester=ctx.author) for track_id in track_ids]
if not tracks:
return await ctx.send(player.get_msg('noTrackFound'))
index = await player.add_track(tracks)
await ctx.send(player.get_msg('playlistLoad').format(attachment.filename, index))
except voicelink.QueueFull as e:
return await ctx.send(e)
except Exception as e:
await ctx.send("Something went wrong while decoding the file!")
finally:
if not player.is_playing:
await player.do_next()
@commands.hybrid_command(name="history", aliases=get_aliases("history"))
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
async def history(self, ctx: commands.Context):