From 054d9322f6a10f304abcddf6a8945fccface1f8f Mon Sep 17 00:00:00 2001 From: LucasB25 <50886682+LucasB25@users.noreply.github.com> Date: Tue, 10 Sep 2024 18:26:26 +0200 Subject: [PATCH] update --- package.json | 4 +- src/commands/music/Lyrics.ts | 151 +++++++++++++++----------- src/events/client/VoiceStateUpdate.ts | 2 +- src/structures/Context.ts | 2 +- 4 files changed, 91 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index bed452de1..e51fe0ee8 100644 --- a/package.json +++ b/package.json @@ -46,14 +46,14 @@ "@top-gg/sdk": "^3.1.6", "discord.js": "^14.16.1", "dotenv": "^16.4.5", + "genius-lyrics-api": "^3.2.1", "i18n": "^0.15.1", "node-system-stats": "^1.3.0", "shoukaku": "github:shipgirlproject/Shoukaku#master", "signale": "^1.4.0", "topgg-autoposter": "^2.0.2", "tslib": "^2.7.0", - "undici": "^6.19.8", - "genius-lyrics-api": "^3.2.1" + "undici": "^6.19.8" }, "signale": { "displayScope": true, diff --git a/src/commands/music/Lyrics.ts b/src/commands/music/Lyrics.ts index 5dc6324d1..d24c2dc5e 100644 --- a/src/commands/music/Lyrics.ts +++ b/src/commands/music/Lyrics.ts @@ -1,6 +1,6 @@ import { Command, type Context, type Lavamusic } from "../../structures/index.js"; -import { getLyrics } from 'genius-lyrics-api'; -import { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, ComponentType } from 'discord.js'; +import { getLyrics } from "genius-lyrics-api"; +import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ComponentType } from "discord.js"; export default class Lyrics extends Command { constructor(client: Lavamusic) { @@ -34,28 +34,27 @@ export default class Lyrics extends Command { public async run(client: Lavamusic, ctx: Context): Promise { const player = client.queue.get(ctx.guild!.id); - const embed = new EmbedBuilder(); - - if (!player || !player.isPlaying) { + const embed = this.client.embed(); + + if (!(player && !player.isPlaying)) { return await ctx.sendMessage({ embeds: [embed.setColor(client.color.red).setDescription(ctx.locale("cmd.lyrics.errors.no_playing"))], }); } - + const currentTrack = player.current; - const trackTitle = currentTrack.info.title.replace(/\[.*?\]/g, '').trim(); - const artistName = currentTrack.info.author.replace(/\[.*?\]/g, '').trim(); + const trackTitle = currentTrack.info.title.replace(/\[.*?\]/g, "").trim(); + const artistName = currentTrack.info.author.replace(/\[.*?\]/g, "").trim(); const trackUrl = currentTrack.info.uri; const artworkUrl = currentTrack.info.artworkUrl; - // Send initial "Searching for lyrics" message - const searchMessage = await ctx.sendDeferMessage(ctx.locale("cmd.lyrics.searching", { trackTitle })) + await ctx.sendDeferMessage(ctx.locale("cmd.lyrics.searching", { trackTitle })); const options = { apiKey: client.config.lyricsApi, title: trackTitle, artist: artistName, - optimizeQuery: true + optimizeQuery: true, }; try { @@ -64,92 +63,105 @@ export default class Lyrics extends Command { const lyricsPages = this.paginateLyrics(lyrics); let currentPage = 0; - const row = new ActionRowBuilder() - .addComponents( - new ButtonBuilder() - .setCustomId('prev') - .setEmoji(this.client.emoji.page.back) - .setStyle(ButtonStyle.Secondary) - .setDisabled(true), - new ButtonBuilder() - .setCustomId('stop') - .setEmoji(this.client.emoji.page.cancel) - .setStyle(ButtonStyle.Danger), - new ButtonBuilder() - .setCustomId('next') - .setEmoji(this.client.emoji.page.next) - .setStyle(ButtonStyle.Secondary) - .setDisabled(lyricsPages.length <= 1) - ); - - // Edit the initial message to include lyrics - await searchMessage.edit({ - embeds: [embed.setColor(client.color.main).setDescription(ctx.locale("cmd.lyrics.lyrics_track", { trackTitle, trackUrl, lyrics: lyricsPages[currentPage] })).setThumbnail(artworkUrl).setTimestamp()], - components: [row] + const row = new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId("prev") + .setEmoji(this.client.emoji.page.back) + .setStyle(ButtonStyle.Secondary) + .setDisabled(true), + new ButtonBuilder().setCustomId("stop").setEmoji(this.client.emoji.page.cancel).setStyle(ButtonStyle.Danger), + new ButtonBuilder() + .setCustomId("next") + .setEmoji(this.client.emoji.page.next) + .setStyle(ButtonStyle.Secondary) + .setDisabled(lyricsPages.length <= 1), + ); + + await ctx.editMessage({ + embeds: [ + embed + .setColor(client.color.main) + .setDescription( + ctx.locale("cmd.lyrics.lyrics_track", { trackTitle, trackUrl, lyrics: lyricsPages[currentPage] }), + ) + .setThumbnail(artworkUrl) + .setTimestamp(), + ], + components: [row], }); const filter = (interaction) => interaction.user.id === ctx.author.id; - const collector = searchMessage.createMessageComponentCollector({ filter, componentType: ComponentType.Button, time: 60000 }); + const collector = ctx.channel.createMessageComponentCollector({ + filter, + componentType: ComponentType.Button, + time: 60000, + }); - collector.on('collect', async (interaction) => { - if (interaction.customId === 'prev') { + collector.on("collect", async (interaction) => { + if (interaction.customId === "prev") { currentPage--; - } else if (interaction.customId === 'next') { + } else if (interaction.customId === "next") { currentPage++; - } else if (interaction.customId === 'stop') { + } else if (interaction.customId === "stop") { collector.stop(); return interaction.update({ components: [] }); } await interaction.update({ - embeds: [embed.setDescription(ctx.locale("cmd.lyrics.lyrics_track", { trackTitle, trackUrl, lyrics: lyricsPages[currentPage] })).setThumbnail(artworkUrl).setTimestamp()], - components: [ - new ActionRowBuilder() - .addComponents( - new ButtonBuilder() - .setCustomId('prev') - .setEmoji(this.client.emoji.page.back) - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === 0), - new ButtonBuilder() - .setCustomId('stop') - .setEmoji(this.client.emoji.page.cancel) - .setStyle(ButtonStyle.Danger), - new ButtonBuilder() - .setCustomId('next') - .setEmoji(this.client.emoji.page.next) - .setStyle(ButtonStyle.Secondary) - .setDisabled(currentPage === lyricsPages.length - 1) + embeds: [ + embed + .setDescription( + ctx.locale("cmd.lyrics.lyrics_track", { trackTitle, trackUrl, lyrics: lyricsPages[currentPage] }), ) - ] + .setThumbnail(artworkUrl) + .setTimestamp(), + ], + components: [ + new ActionRowBuilder().addComponents( + new ButtonBuilder() + .setCustomId("prev") + .setEmoji(this.client.emoji.page.back) + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === 0), + new ButtonBuilder() + .setCustomId("stop") + .setEmoji(this.client.emoji.page.cancel) + .setStyle(ButtonStyle.Danger), + new ButtonBuilder() + .setCustomId("next") + .setEmoji(this.client.emoji.page.next) + .setStyle(ButtonStyle.Secondary) + .setDisabled(currentPage === lyricsPages.length - 1), + ), + ], }); }); - collector.on('end', () => { - searchMessage.edit({ components: [] }); + collector.on("end", () => { + ctx.editMessage({ components: [] }); }); } else { - await searchMessage.edit({ + await ctx.editMessage({ embeds: [embed.setColor(client.color.red).setDescription(ctx.locale("cmd.lyrics.errors.no_results"))], }); } } catch (error) { console.error(error); - await searchMessage.edit({ + await ctx.editMessage({ embeds: [embed.setColor(client.color.red).setDescription(ctx.locale("cmd.lyrics.errors.lyrics_error"))], }); } } paginateLyrics(lyrics) { - const lines = lyrics.split('\n'); + const lines = lyrics.split("\n"); const pages = []; - let page = ''; + let page = ""; for (const line of lines) { if (page.length + line.length > 2048) { pages.push(page); - page = ''; + page = ""; } page += `${line}\n`; } @@ -158,3 +170,14 @@ export default class Lyrics extends Command { return pages; } } + +/** + * Project: lavamusic + * Author: Appu + * Main Contributor: LucasB25 + * Company: Coders + * Copyright (c) 2024. All rights reserved. + * This code is the property of Coder and may not be reproduced or + * modified without permission. For more information, contact us at + * https://discord.gg/ns8CTk9J3e + */ diff --git a/src/events/client/VoiceStateUpdate.ts b/src/events/client/VoiceStateUpdate.ts index e057eecb4..80c2029d2 100644 --- a/src/events/client/VoiceStateUpdate.ts +++ b/src/events/client/VoiceStateUpdate.ts @@ -86,4 +86,4 @@ export default class VoiceStateUpdate extends Event { * This code is the property of Coder and may not be reproduced or * modified without permission. For more information, contact us at * https://discord.gg/ns8CTk9J3e - */ \ No newline at end of file + */ diff --git a/src/structures/Context.ts b/src/structures/Context.ts index 074eaa1ee..40b44144f 100644 --- a/src/structures/Context.ts +++ b/src/structures/Context.ts @@ -44,7 +44,7 @@ export default class Context { this.message = ctx instanceof Message ? ctx : null; if (ctx.channel && ctx.channel.type !== ChannelType.GroupDM) { - this.channel = ctx.channel + this.channel = ctx.channel; } else { this.channel = null; }