Skip to content

Commit cae79fe

Browse files
authored
Update 5.4.0
1 parent 7312c5b commit cae79fe

File tree

10 files changed

+653
-15
lines changed

10 files changed

+653
-15
lines changed

commands/Music/Nowplaying.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const { Database } = require("st.db");
44
const GSetup = new Database("./settings/models/setup.json", { databaseInObject: true });
55

66
module.exports = {
7-
name: ["music", "nowplaying"],
7+
name: ["nowplaying"],
88
description: "Display the song currently playing.",
99
category: "Music",
1010
run: async (client, interaction) => {

commands/Music/Queue.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const { EmbedBuilder, ApplicationCommandOptionType } = require("discord.js");
22
const { QueuePage } = require('../../structures/PageQueue.js');
33

44
module.exports = {
5-
name: ["music", "queue"],
5+
name: ["queue"],
66
description: "Show the queue of songs.",
77
category: "Music",
88
options: [
@@ -26,8 +26,6 @@ module.exports = {
2626
const pagesNum = Math.ceil(queue.songs.length / 10);
2727
if(pagesNum === 0) pagesNum = 1;
2828

29-
const qduration = queue.formattedDuration;
30-
3129
const songStrings = [];
3230
for (let i = 1; i < queue.songs.length; i++) {
3331
const song = queue.songs[i];
@@ -49,7 +47,7 @@ module.exports = {
4947
}
5048

5149
if (!args) {
52-
if (pages.length == pagesNum && queue.songs.length > 10) QueuePage(client, interaction, pages, 60000, queue.songs.length, qduration);
50+
if (pages.length == pagesNum && queue.songs.length > 10) QueuePage(client, interaction, pages, 60000, queue.songs.length, queue.formattedDuration);
5351
else return interaction.editReply({ embeds: [pages[0]] });
5452
}
5553
else {

commands/Music/Search.js

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
const { PermissionsBitField, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require("discord.js");
2+
const { Database } = require("st.db");
3+
const ytsr = require("@distube/ytsr");
4+
5+
const GSetup = new Database("./settings/models/setup.json", { databaseInObject: true });
6+
7+
module.exports = {
8+
name: ["search"],
9+
description: "Search song and play music.",
10+
category: "Music",
11+
options: [
12+
{
13+
name: "search",
14+
type: ApplicationCommandOptionType.String,
15+
description: "The song to play.",
16+
required: true
17+
}
18+
],
19+
run: async (client, interaction) => {
20+
const string = interaction.options.getString("search");
21+
22+
const db = await GSetup.get(interaction.guild.id);
23+
if (db.setup_enable === true) return interaction.reply("Command is disable already have song request channel!");
24+
25+
await interaction.reply(`🔍 **Searching...** \`${string}\``);
26+
27+
const message = await interaction.fetchReply();
28+
await client.createPlay(interaction, message.id);
29+
30+
const { channel } = interaction.member.voice;
31+
if (!channel) return interaction.editReply("You need to be in voice channel.")
32+
if (!channel.permissionsFor(interaction.guild.members.me).has(PermissionsBitField.Flags.Connect)) return interaction.editReply(`I don't have perm \`CONNECT\` in ${channel.name} to join voice!`);
33+
if (!channel.permissionsFor(interaction.guild.members.me).has(PermissionsBitField.Flags.Speak)) return interaction.editReply(`I don't have perm \`SPEAK\` in ${channel.name} to join voice!`);
34+
35+
const row = new ActionRowBuilder()
36+
.addComponents(
37+
new ButtonBuilder()
38+
.setCustomId("one")
39+
.setEmoji("1️⃣")
40+
.setStyle(ButtonStyle.Secondary)
41+
)
42+
.addComponents(
43+
new ButtonBuilder()
44+
.setCustomId("two")
45+
.setEmoji("2️⃣")
46+
.setStyle(ButtonStyle.Secondary)
47+
)
48+
.addComponents(
49+
new ButtonBuilder()
50+
.setCustomId("three")
51+
.setEmoji("3️⃣")
52+
.setStyle(ButtonStyle.Secondary)
53+
)
54+
.addComponents(
55+
new ButtonBuilder()
56+
.setCustomId("four")
57+
.setEmoji("4️⃣")
58+
.setStyle(ButtonStyle.Secondary)
59+
)
60+
.addComponents(
61+
new ButtonBuilder()
62+
.setCustomId("five")
63+
.setEmoji("5️⃣")
64+
.setStyle(ButtonStyle.Secondary)
65+
)
66+
67+
const options = {
68+
member: interaction.member,
69+
textChannel: interaction.channel,
70+
interaction,
71+
}
72+
73+
const res = await ytsr(string, { safeSearch: true, limit: 5 });
74+
75+
let index = 1;
76+
const result = res.items.slice(0, 5).map(x => `**(${index++}.) [${x.name}](${x.url})** Author: \`${x.author}\``).join("\n")
77+
78+
const embed = new EmbedBuilder()
79+
.setAuthor({ name: `Song Selection...`, iconURL: interaction.guild.iconURL({ dynamic: true }) })
80+
.setColor(client.color)
81+
.setDescription(result)
82+
.setFooter({ text: `Please response in 30s` })
83+
84+
await message.edit({ content: " ", embeds: [embed], components: [row] });
85+
86+
const collector = interaction.channel.createMessageComponentCollector({ filter: (m) => m.user.id === interaction.user.id, time: 30000, max: 1 });
87+
88+
collector.on('collect', async (interaction) => {
89+
const id = interaction.customId;
90+
const loader = new EmbedBuilder()
91+
.setDescription("**Loading please wait....**")
92+
93+
94+
if(id === "one") {
95+
await message.edit({ embeds: [loader], components: [] });
96+
await client.distube.play(interaction.member.voice.channel, res.items[0].url, options);
97+
} else if(id === "two") {
98+
await message.edit({ embeds: [loader], components: [] });
99+
await client.distube.play(interaction.member.voice.channel, res.items[1].url, options);
100+
} else if(id === "three") {
101+
await message.edit({ embeds: [loader], components: [] });
102+
await client.distube.play(interaction.member.voice.channel, res.items[2].url, options);
103+
} else if(id === "four") {
104+
await message.edit({ embeds: [loader], components: [] });
105+
await client.distube.play(interaction.member.voice.channel, res.items[3].url, options);
106+
} else if(id === "five") {
107+
await message.edit({ embeds: [loader], components: [] });
108+
await client.distube.play(interaction.member.voice.channel, res.items[4].url, options);
109+
}
110+
});
111+
112+
collector.on('end', async (collected, reason) => {
113+
if(reason === "time") {
114+
message.edit({ content: `No Response`, embeds: [], components: [] });
115+
}
116+
});
117+
}
118+
}

commands/Music/SearchSkip.js

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
const { PermissionsBitField, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require("discord.js");
2+
const { Database } = require("st.db");
3+
const ytsr = require("@distube/ytsr");
4+
5+
const GSetup = new Database("./settings/models/setup.json", { databaseInObject: true });
6+
7+
module.exports = {
8+
name: ["music", "searchskip"],
9+
description: "Search and skip to the song.",
10+
category: "Music",
11+
options: [
12+
{
13+
name: "search",
14+
type: ApplicationCommandOptionType.String,
15+
description: "The song to play.",
16+
required: true
17+
}
18+
],
19+
run: async (client, interaction) => {
20+
const string = interaction.options.getString("search");
21+
22+
const db = await GSetup.get(interaction.guild.id);
23+
if (db.setup_enable === true) return interaction.reply("Command is disable already have song request channel!");
24+
25+
await interaction.reply(`🔍 **Searching...** \`${string}\``);
26+
27+
const message = await interaction.fetchReply();
28+
await client.createPlay(interaction, message.id);
29+
30+
const { channel } = interaction.member.voice;
31+
if (!channel) return interaction.editReply("You need to be in voice channel.")
32+
if (!channel.permissionsFor(interaction.guild.members.me).has(PermissionsBitField.Flags.Connect)) return interaction.editReply(`I don't have perm \`CONNECT\` in ${channel.name} to join voice!`);
33+
if (!channel.permissionsFor(interaction.guild.members.me).has(PermissionsBitField.Flags.Speak)) return interaction.editReply(`I don't have perm \`SPEAK\` in ${channel.name} to join voice!`);
34+
35+
const row = new ActionRowBuilder()
36+
.addComponents(
37+
new ButtonBuilder()
38+
.setCustomId("one")
39+
.setEmoji("1️⃣")
40+
.setStyle(ButtonStyle.Secondary)
41+
)
42+
.addComponents(
43+
new ButtonBuilder()
44+
.setCustomId("two")
45+
.setEmoji("2️⃣")
46+
.setStyle(ButtonStyle.Secondary)
47+
)
48+
.addComponents(
49+
new ButtonBuilder()
50+
.setCustomId("three")
51+
.setEmoji("3️⃣")
52+
.setStyle(ButtonStyle.Secondary)
53+
)
54+
.addComponents(
55+
new ButtonBuilder()
56+
.setCustomId("four")
57+
.setEmoji("4️⃣")
58+
.setStyle(ButtonStyle.Secondary)
59+
)
60+
.addComponents(
61+
new ButtonBuilder()
62+
.setCustomId("five")
63+
.setEmoji("5️⃣")
64+
.setStyle(ButtonStyle.Secondary)
65+
)
66+
67+
const options = {
68+
member: interaction.member,
69+
textChannel: interaction.channel,
70+
interaction,
71+
skip: true
72+
}
73+
74+
const res = await ytsr(string, { safeSearch: true, limit: 5 });
75+
76+
let index = 1;
77+
const result = res.items.slice(0, 5).map(x => `**(${index++}.) [${x.name}](${x.url})** Author: \`${x.author}\``).join("\n")
78+
79+
const embed = new EmbedBuilder()
80+
.setAuthor({ name: `Song Selection...`, iconURL: interaction.guild.iconURL({ dynamic: true }) })
81+
.setColor(client.color)
82+
.setDescription(result)
83+
.setFooter({ text: `Please response in 30s` })
84+
85+
await message.edit({ content: " ", embeds: [embed], components: [row] });
86+
87+
const collector = interaction.channel.createMessageComponentCollector({ filter: (m) => m.user.id === interaction.user.id, time: 30000, max: 1 });
88+
89+
collector.on('collect', async (interaction) => {
90+
const id = interaction.customId;
91+
const loader = new EmbedBuilder()
92+
.setDescription("**Loading please wait....**")
93+
94+
95+
if(id === "one") {
96+
await message.edit({ embeds: [loader], components: [] });
97+
await client.distube.play(interaction.member.voice.channel, res.items[0].url, options);
98+
} else if(id === "two") {
99+
await message.edit({ embeds: [loader], components: [] });
100+
await client.distube.play(interaction.member.voice.channel, res.items[1].url, options);
101+
} else if(id === "three") {
102+
await message.edit({ embeds: [loader], components: [] });
103+
await client.distube.play(interaction.member.voice.channel, res.items[2].url, options);
104+
} else if(id === "four") {
105+
await message.edit({ embeds: [loader], components: [] });
106+
await client.distube.play(interaction.member.voice.channel, res.items[3].url, options);
107+
} else if(id === "five") {
108+
await message.edit({ embeds: [loader], components: [] });
109+
await client.distube.play(interaction.member.voice.channel, res.items[4].url, options);
110+
}
111+
});
112+
113+
collector.on('end', async (collected, reason) => {
114+
if(reason === "time") {
115+
message.edit({ content: `No Response`, embeds: [], components: [] });
116+
}
117+
});
118+
}
119+
}

commands/Music/SearchTop.js

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
const { PermissionsBitField, ApplicationCommandOptionType, ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require("discord.js");
2+
const { Database } = require("st.db");
3+
const ytsr = require("@distube/ytsr");
4+
5+
const GSetup = new Database("./settings/models/setup.json", { databaseInObject: true });
6+
7+
module.exports = {
8+
name: ["music", "searchtop"],
9+
description: "Search and queue song to the top.",
10+
category: "Music",
11+
options: [
12+
{
13+
name: "search",
14+
type: ApplicationCommandOptionType.String,
15+
description: "The song to play.",
16+
required: true
17+
}
18+
],
19+
run: async (client, interaction) => {
20+
const string = interaction.options.getString("search");
21+
22+
const db = await GSetup.get(interaction.guild.id);
23+
if (db.setup_enable === true) return interaction.reply("Command is disable already have song request channel!");
24+
25+
await interaction.reply(`🔍 **Searching...** \`${string}\``);
26+
27+
const message = await interaction.fetchReply();
28+
await client.createPlay(interaction, message.id);
29+
30+
const { channel } = interaction.member.voice;
31+
if (!channel) return interaction.editReply("You need to be in voice channel.")
32+
if (!channel.permissionsFor(interaction.guild.members.me).has(PermissionsBitField.Flags.Connect)) return interaction.editReply(`I don't have perm \`CONNECT\` in ${channel.name} to join voice!`);
33+
if (!channel.permissionsFor(interaction.guild.members.me).has(PermissionsBitField.Flags.Speak)) return interaction.editReply(`I don't have perm \`SPEAK\` in ${channel.name} to join voice!`);
34+
35+
const row = new ActionRowBuilder()
36+
.addComponents(
37+
new ButtonBuilder()
38+
.setCustomId("one")
39+
.setEmoji("1️⃣")
40+
.setStyle(ButtonStyle.Secondary)
41+
)
42+
.addComponents(
43+
new ButtonBuilder()
44+
.setCustomId("two")
45+
.setEmoji("2️⃣")
46+
.setStyle(ButtonStyle.Secondary)
47+
)
48+
.addComponents(
49+
new ButtonBuilder()
50+
.setCustomId("three")
51+
.setEmoji("3️⃣")
52+
.setStyle(ButtonStyle.Secondary)
53+
)
54+
.addComponents(
55+
new ButtonBuilder()
56+
.setCustomId("four")
57+
.setEmoji("4️⃣")
58+
.setStyle(ButtonStyle.Secondary)
59+
)
60+
.addComponents(
61+
new ButtonBuilder()
62+
.setCustomId("five")
63+
.setEmoji("5️⃣")
64+
.setStyle(ButtonStyle.Secondary)
65+
)
66+
67+
const options = {
68+
member: interaction.member,
69+
textChannel: interaction.channel,
70+
interaction,
71+
position: 1
72+
}
73+
74+
const res = await ytsr(string, { safeSearch: true, limit: 5 });
75+
76+
let index = 1;
77+
const result = res.items.slice(0, 5).map(x => `**(${index++}.) [${x.name}](${x.url})** Author: \`${x.author}\``).join("\n")
78+
79+
const embed = new EmbedBuilder()
80+
.setAuthor({ name: `Song Selection...`, iconURL: interaction.guild.iconURL({ dynamic: true }) })
81+
.setColor(client.color)
82+
.setDescription(result)
83+
.setFooter({ text: `Please response in 30s` })
84+
85+
await message.edit({ content: " ", embeds: [embed], components: [row] });
86+
87+
const collector = interaction.channel.createMessageComponentCollector({ filter: (m) => m.user.id === interaction.user.id, time: 30000, max: 1 });
88+
89+
collector.on('collect', async (interaction) => {
90+
const id = interaction.customId;
91+
const loader = new EmbedBuilder()
92+
.setDescription("**Loading please wait....**")
93+
94+
95+
if(id === "one") {
96+
await message.edit({ embeds: [loader], components: [] });
97+
await client.distube.play(interaction.member.voice.channel, res.items[0].url, options);
98+
} else if(id === "two") {
99+
await message.edit({ embeds: [loader], components: [] });
100+
await client.distube.play(interaction.member.voice.channel, res.items[1].url, options);
101+
} else if(id === "three") {
102+
await message.edit({ embeds: [loader], components: [] });
103+
await client.distube.play(interaction.member.voice.channel, res.items[2].url, options);
104+
} else if(id === "four") {
105+
await message.edit({ embeds: [loader], components: [] });
106+
await client.distube.play(interaction.member.voice.channel, res.items[3].url, options);
107+
} else if(id === "five") {
108+
await message.edit({ embeds: [loader], components: [] });
109+
await client.distube.play(interaction.member.voice.channel, res.items[4].url, options);
110+
}
111+
});
112+
113+
collector.on('end', async (collected, reason) => {
114+
if(reason === "time") {
115+
message.edit({ content: `No Response`, embeds: [], components: [] });
116+
}
117+
});
118+
}
119+
}

0 commit comments

Comments
 (0)