lyrics.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. const { MessageEmbed } = require("discord.js");
  2. const { TrackUtils } = require("erela.js");
  3. const lyricsFinder = require("lyrics-finder");
  4. const _ = require("lodash");
  5. module.exports = {
  6. name: "lyrics",
  7. description: "Search lyrics for any song",
  8. usage: "[Song Name]",
  9. permissions: {
  10. channel: ["VIEW_CHANNEL", "SEND_MESSAGES", "EMBED_LINKS"],
  11. member: [],
  12. },
  13. aliases: ["ly"],
  14. /**
  15. *
  16. * @param {import("../structures/DiscordMusicBot")} client
  17. * @param {import("discord.js").Message} message
  18. * @param {string[]} args
  19. * @param {*} param3
  20. */
  21. run: async (client, message, args, { GuildDB }) => {
  22. let player = await client.Manager.get(message.guild.id);
  23. let SongTitle = args.join(" ");
  24. if (!args[0] && !player)
  25. return message.channel.send("❌ | **Nothing is playing right now...**");
  26. if (!args[0]) SongTitle = player.queue.current.title;
  27. if (!args[0]) SongURL = player.queue.current.uri;
  28. let lyrics = await lyricsFinder(SongTitle);
  29. if (!lyrics)
  30. return message.channel.send(`**No lyrics found for -** \`${SongTitle}\``);
  31. lyrics = lyrics.split("\n"); //spliting into lines
  32. let SplitedLyrics = _.chunk(lyrics, 45); //45 lines each page
  33. let Pages = SplitedLyrics.map((ly) => {
  34. let em = new MessageEmbed()
  35. .setAuthor(SongTitle + " — Lyrics", client.config.IconURL)
  36. .setColor("RANDOM")
  37. .setDescription(ly.join("\n"));
  38. if (args.join(" ") !== SongTitle)
  39. em.setThumbnail(player.queue.current.displayThumbnail());
  40. return em;
  41. });
  42. if (!Pages.length || Pages.length === 1)
  43. return message.channel.send(Pages[0]);
  44. else return client.Pagination(message, Pages);
  45. },
  46. SlashCommand: {
  47. options: [
  48. {
  49. name: "song",
  50. value: "song",
  51. type: 3,
  52. description: "Get the lyrics of a song",
  53. required: false,
  54. },
  55. ],
  56. /**
  57. *
  58. * @param {import("../structures/DiscordMusicBot")} client
  59. * @param {import("discord.js").Message} message
  60. * @param {string[]} args
  61. * @param {*} param3
  62. */
  63. run: async (client, interaction, args, { GuildDB }) => {
  64. let player = await client.Manager.get(interaction.guild_id);
  65. let SongTitle = interaction.data.options[0].value;
  66. if (!SongTitle && !player)
  67. return interaction.send("Nothing is playing right now...");
  68. if (!SongTitle) SongTitle = player.queue.current.title;
  69. let lyrics = await lyricsFinder(SongTitle);
  70. if (!lyrics) return interaction.send("No lyrics found for " + SongTitle);
  71. lyrics = lyrics.split("\n"); //spliting into lines
  72. let SplitedLyrics = _.chunk(lyrics, 45); //45 lines each page
  73. let Pages = SplitedLyrics.map((ly) => {
  74. let em = new MessageEmbed()
  75. .setAuthor(SongTitle + " — Lyrics", client.config.IconURL)
  76. .setColor("RANDOM")
  77. .setDescription(ly.join("\n"));
  78. if (SongTitle !== SongTitle)
  79. em.setThumbnail(player.queue.current.displayThumbnail());
  80. return em;
  81. });
  82. return interaction.send(Pages[0]);
  83. },
  84. },
  85. };