mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-11-22 05:04:58 +05:00
v4.1.1
Страницы в queue Спасибо старым исходникам Жабы
This commit is contained in:
parent
9d3001eaba
commit
46d38e74c6
6 changed files with 178 additions and 33 deletions
|
@ -1,4 +1,4 @@
|
||||||
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
|
const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
|
||||||
const BaseCommand = require("../../base/BaseCommand");
|
const BaseCommand = require("../../base/BaseCommand");
|
||||||
|
|
||||||
class Queue extends BaseCommand {
|
class Queue extends BaseCommand {
|
||||||
|
@ -34,38 +34,175 @@ class Queue extends BaseCommand {
|
||||||
const queue = client.player.getQueue(interaction.guildId);
|
const queue = client.player.getQueue(interaction.guildId);
|
||||||
if (!queue) return interaction.error("music/play:NOT_PLAYING");
|
if (!queue) return interaction.error("music/play:NOT_PLAYING");
|
||||||
|
|
||||||
const currentTrack = queue.current;
|
let currentPage = 0;
|
||||||
const tracks = queue.tracks.slice(0, 5).map((track, i) => {
|
const embeds = generateQueueEmbed(interaction, queue);
|
||||||
return `${i + 1}. [${track.title}](${track.url})\n> ${interaction.translate("music/queue:ADDED")} ${track.requestedBy}`;
|
|
||||||
});
|
|
||||||
|
|
||||||
const embed = new EmbedBuilder()
|
const row = new ActionRowBuilder()
|
||||||
.setAuthor({
|
.addComponents(
|
||||||
name: interaction.translate("music/queue:TITLE"),
|
new ButtonBuilder()
|
||||||
iconURL: interaction.guild.iconURL()
|
.setCustomId("queue_prev_page")
|
||||||
})
|
.setLabel(interaction.translate("music/queue:PREV_PAGE"))
|
||||||
.setColor(client.config.embed.color)
|
.setStyle(ButtonStyle.Primary)
|
||||||
.addFields(
|
.setEmoji("⬅️"),
|
||||||
{
|
new ButtonBuilder()
|
||||||
name: interaction.translate("music/nowplaying:CURRENTLY_PLAYING"),
|
.setCustomId("queue_next_page")
|
||||||
value: `[${currentTrack.title}](${currentTrack.url})\n> ${interaction.translate("music/queue:ADDED")} ${currentTrack.requestedBy}\n`
|
.setLabel(interaction.translate("music/queue:NEXT_PAGE"))
|
||||||
},
|
.setStyle(ButtonStyle.Primary)
|
||||||
{
|
.setEmoji("➡️"),
|
||||||
name: interaction.translate("music/queue:QUEUE"),
|
new ButtonBuilder()
|
||||||
value: tracks.length > 0 ? tracks.join("\n") : interaction.translate("music/queue:NO_QUEUE")
|
.setCustomId("queue_jump_page")
|
||||||
},
|
.setLabel(interaction.translate("music/queue:JUMP_PAGE"))
|
||||||
{
|
.setStyle(ButtonStyle.Secondary)
|
||||||
name: "\u200b",
|
.setEmoji("↗️"),
|
||||||
value: `${interaction.translate("music/queue:MORE", {
|
new ButtonBuilder()
|
||||||
tracks: `${queue.tracks.length - tracks.length} ${client.getNoun(queue.tracks.length - tracks.length, interaction.translate("misc:NOUNS:TRACKS:1"), interaction.translate("misc:NOUNS:TRACKS:2"), interaction.translate("misc:NOUNS:TRACKS:5"))}`
|
.setCustomId("queue_stop")
|
||||||
})}`
|
.setLabel(interaction.translate("common:CANCEL"))
|
||||||
}
|
.setStyle(ButtonStyle.Danger)
|
||||||
|
.setEmoji("⏹️"),
|
||||||
);
|
);
|
||||||
|
|
||||||
interaction.reply({
|
await interaction.reply({
|
||||||
embeds: [embed]
|
content: interaction.translate("music/queue:PAGE", {
|
||||||
|
current: currentPage + 1,
|
||||||
|
length: embeds.length
|
||||||
|
}),
|
||||||
|
embeds: [embeds[currentPage]],
|
||||||
|
components: [row]
|
||||||
|
});
|
||||||
|
|
||||||
|
const filter = i => i.user.id === interaction.user.id;
|
||||||
|
const collector = interaction.channel.createMessageComponentCollector({ filter, idle: (60 * 1000) });
|
||||||
|
|
||||||
|
collector.on("collect", async i => {
|
||||||
|
if (i.isButton()) {
|
||||||
|
if (i.customId === "queue_prev_page") {
|
||||||
|
i.deferUpdate();
|
||||||
|
|
||||||
|
if (currentPage !== 0) {
|
||||||
|
--currentPage;
|
||||||
|
interaction.editReply({
|
||||||
|
content: interaction.translate("music/queue:PAGE", {
|
||||||
|
current: currentPage + 1,
|
||||||
|
length: embeds.length
|
||||||
|
}),
|
||||||
|
embeds: [embeds[currentPage]],
|
||||||
|
components: [row]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (i.customId === "queue_next_page") {
|
||||||
|
i.deferUpdate();
|
||||||
|
|
||||||
|
if (currentPage < embeds.length - 1) {
|
||||||
|
currentPage++;
|
||||||
|
interaction.editReply({
|
||||||
|
content: interaction.translate("music/queue:PAGE", {
|
||||||
|
current: currentPage + 1,
|
||||||
|
length: embeds.length
|
||||||
|
}),
|
||||||
|
embeds: [embeds[currentPage]],
|
||||||
|
components: [row]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (i.customId === "queue_jump_page") {
|
||||||
|
i.deferUpdate();
|
||||||
|
|
||||||
|
const msg = await interaction.followUp({
|
||||||
|
content: interaction.translate("music/queue:PAGE_TO_JUMP", {
|
||||||
|
length: embeds.length
|
||||||
|
}),
|
||||||
|
fetchReply: true
|
||||||
|
});
|
||||||
|
|
||||||
|
const filter = res => {
|
||||||
|
return res.author.id === interaction.user.id && !isNaN(res.content);
|
||||||
|
};
|
||||||
|
|
||||||
|
interaction.channel.awaitMessages({ filter, max: 1, time: (30 * 1000) }).then(collected => {
|
||||||
|
if (embeds[Number(collected.first().content) - 1]) {
|
||||||
|
currentPage = Number(collected.first().content) - 1;
|
||||||
|
interaction.editReply({
|
||||||
|
content: interaction.translate("music/queue:PAGE", {
|
||||||
|
current: currentPage + 1,
|
||||||
|
length: embeds.length
|
||||||
|
}),
|
||||||
|
embeds: [embeds[currentPage]],
|
||||||
|
components: [row]
|
||||||
|
});
|
||||||
|
|
||||||
|
if (collected.first().deletable) collected.first().delete();
|
||||||
|
if (msg.deletable) msg.delete();
|
||||||
|
} else {
|
||||||
|
if (collected.first().deletable) collected.first().delete();
|
||||||
|
if (msg.deletable) msg.delete();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (i.customId === "queue_stop") {
|
||||||
|
i.deferUpdate();
|
||||||
|
collector.stop(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
collector.on("end", async (_, reason) => {
|
||||||
|
if (reason) {
|
||||||
|
const row = new ActionRowBuilder()
|
||||||
|
.addComponents(
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setCustomId("queue_prev_page")
|
||||||
|
.setLabel(interaction.translate("music/queue:PREV_PAGE"))
|
||||||
|
.setStyle(ButtonStyle.Primary)
|
||||||
|
.setEmoji("⬅️")
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setCustomId("queue_next_page")
|
||||||
|
.setLabel(interaction.translate("music/queue:NEXT_PAGE"))
|
||||||
|
.setStyle(ButtonStyle.Primary)
|
||||||
|
.setEmoji("➡️")
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setCustomId("queue_jump_page")
|
||||||
|
.setLabel(interaction.translate("music/queue:JUMP_PAGE"))
|
||||||
|
.setStyle(ButtonStyle.Secondary)
|
||||||
|
.setEmoji("↗️")
|
||||||
|
.setDisabled(true),
|
||||||
|
new ButtonBuilder()
|
||||||
|
.setCustomId("queue_stop")
|
||||||
|
.setLabel(interaction.translate("common:CANCEL"))
|
||||||
|
.setStyle(ButtonStyle.Danger)
|
||||||
|
.setEmoji("⏹️")
|
||||||
|
.setDisabled(true),
|
||||||
|
);
|
||||||
|
return interaction.editReply({
|
||||||
|
components: [row]
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function generateQueueEmbed(interaction, queue) {
|
||||||
|
const embeds = [];
|
||||||
|
const currentTrack = queue.current;
|
||||||
|
let k = 10;
|
||||||
|
|
||||||
|
for (let i = 0; i < queue.tracks.length; i += 10) {
|
||||||
|
const current = queue.tracks.slice(i, k);
|
||||||
|
let j = i;
|
||||||
|
k += 10;
|
||||||
|
|
||||||
|
const info = current.map(track => `${++j}. [${track.title}](${track.url})\n> ${interaction.translate("music/queue:ADDED")} ${track.requestedBy}`).join("\n");
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setTitle(interaction.translate("music/nowplaying:CURRENTLY_PLAYING"))
|
||||||
|
.setThumbnail(currentTrack.thumbnail)
|
||||||
|
.setColor(interaction.client.config.embed.color)
|
||||||
|
.setDescription(`[${currentTrack.title}](${currentTrack.url})\n> ${interaction.translate("music/queue:ADDED")} ${currentTrack.requestedBy}\n\n**${interaction.translate("music/queue:NEXT")}**\n${info}`)
|
||||||
|
.setTimestamp();
|
||||||
|
embeds.push(embed);
|
||||||
|
}
|
||||||
|
|
||||||
|
return embeds;
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = Queue;
|
module.exports = Queue;
|
|
@ -1,3 +1,6 @@
|
||||||
|
### JaBa v4.1.1
|
||||||
|
* Добавлено
|
||||||
|
* Страницы в *queue*.
|
||||||
|
|
||||||
### JaBa v4.1
|
### JaBa v4.1
|
||||||
* Изменения
|
* Изменения
|
||||||
|
|
|
@ -3,7 +3,12 @@
|
||||||
"USAGE": "",
|
"USAGE": "",
|
||||||
"EXAMPLES": "queue",
|
"EXAMPLES": "queue",
|
||||||
"QUEUE": "Очередь",
|
"QUEUE": "Очередь",
|
||||||
|
"PAGE": "Страница **{{current}}**/**{{length}}**",
|
||||||
"NO_QUEUE": "Пусто",
|
"NO_QUEUE": "Пусто",
|
||||||
"ADDED": "Добавил",
|
"ADDED": "Добавил",
|
||||||
"MORE": "и ещё {{tracks}}"
|
"NEXT_PAGE": "След. страница",
|
||||||
|
"PREV_PAGE": "Пред. страница",
|
||||||
|
"JUMP_PAGE": "Перейти к странице",
|
||||||
|
"PAGE_TO_JUMP": "Укажите страницу к которой хотите перейти (максимум **{{length}}**):",
|
||||||
|
"NEXT": "Далее"
|
||||||
}
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
"USAGE": "[номер]",
|
"USAGE": "[номер]",
|
||||||
"EXAMPLES": "skipto 3",
|
"EXAMPLES": "skipto 3",
|
||||||
"POSITION": "Номер трека в очереди",
|
"POSITION": "Номер трека в очереди",
|
||||||
"SUCCESS": "Выполнен переход на позицию {{position}}",
|
"SUCCESS": "Выполнен переход на трек под номером **{{position}}**",
|
||||||
"ERROR": "На позиции {{position}} ничего не найдено",
|
"ERROR": "На позиции {{position}} ничего не найдено",
|
||||||
"NO_PREV_SONG": "Вы не можете перейти назад, для этого используйте команду `back`!"
|
"NO_PREV_SONG": "Вы не можете перейти назад, для этого используйте команду `back`!"
|
||||||
}
|
}
|
4
package-lock.json
generated
4
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "jaba",
|
"name": "jaba",
|
||||||
"version": "4.1",
|
"version": "4.1.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "jaba",
|
"name": "jaba",
|
||||||
"version": "4.1",
|
"version": "4.1.1",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discord-player/extractor": "^3.0.2",
|
"@discord-player/extractor": "^3.0.2",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "jaba",
|
"name": "jaba",
|
||||||
"version": "4.1",
|
"version": "4.1.1",
|
||||||
"description": "My Discord Bot",
|
"description": "My Discord Bot",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|
Loading…
Reference in a new issue