Files
Quetza/commands/queue.ts
T
2021-10-25 12:50:54 +03:00

85 lines
2.7 KiB
TypeScript

import { design } from "../config";
import { ButtonInteraction, ColorResolvable, CommandInteraction, Message, MessageActionRow, MessageButton, MessageEmbed } from "discord.js";
import { MyClient } from "../types/Client";
import { generateQueue } from "../types/Misc";
import { EmojiIdentifierResolvable } from "discord.js";
export async function run(client: MyClient, ctx: CommandInteraction) {
if (ctx.guildId === null)
return;
const player = client.players.getPlayer(ctx.guildId);
if (player) {
const queue = player.queue;
if (queue.length === 0) {
const embed = new MessageEmbed()
.setColor(design.color as ColorResolvable)
.setTitle("Queue is empty.");
try {
await ctx.reply({ embeds: [embed] });
} catch { }
}
else {
let page = 0;
const maxPage = Math.floor(queue.length / 11);
const row = new MessageActionRow()
.addComponents(
new MessageButton()
.setCustomId("QueueTop")
.setLabel("TOP")
.setStyle("SECONDARY"),
new MessageButton()
.setCustomId("QueueUp")
.setLabel("UP")
.setStyle("SECONDARY"),
new MessageButton()
.setCustomId("QueueDown")
.setLabel("DOWN")
.setStyle("SECONDARY"),
new MessageButton()
.setCustomId("QueueEnd")
.setLabel("END")
.setStyle("SECONDARY")
);
await ctx.reply({
content: generateQueue(queue, page, player.queuePosition),
components: [row]
});
const filter = (btn: ButtonInteraction) => btn.message === ctx.fetchReply() as unknown as Message;
const collector = ctx.channel.createMessageComponentCollector({ filter, time: 15000 });
collector.on("collect", async (btn: ButtonInteraction) => {
switch (btn.customId) {
case "QueueTop": page = 0;
case "QueueUp": page = Math.max(page - 1, 0);
case "QueueDown": page = Math.min(page + 1, maxPage);
case "QueueEnd": page = maxPage;
}
await btn.update({
content: generateQueue(queue, page, player.queuePosition)
});
});
}
}
}
const data = {
name: "queue",
description: "Send player queue.",
}
export { data }