diff --git a/README.md b/README.md index 4819e57e..41fd1e3c 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ Xiao is a Discord bot coded in JavaScript with ## Commands -Total: 354 +Total: 355 ### Utility: @@ -243,6 +243,7 @@ Total: 354 * **kickstarter:** Searches Kickstarter for your query. * **know-your-meme:** Searches Know Your Meme for your query. * **league-of-legends:** Responds with information on a League of Legends champion. +* **lyrics:** Responds with lyrics to a song. * **manga:** Searches AniList for your query, getting manga results. * **map:** Responds with a map of a specific location. * **mayo-clinic:** Searches Mayo Clinic for your query. @@ -546,6 +547,8 @@ here. * horoscope ([Horoscope Data](https://astrology.tv/horoscope/daily/)) - [Axis Order Bot](https://www.reddit.com/r/axisorderbot/wiki/index) * axis-cult (Prayer Data) +- [AZLyrics](https://www.azlyrics.com/) + * lyrics (Lyrics Data) - [Bob Ross](https://www.bobross.com/) * bob-ross (Himself) - [Bowserinator](https://github.com/Bowserinator/) diff --git a/commands/search/lyrics.js b/commands/search/lyrics.js new file mode 100644 index 00000000..76d0a7f5 --- /dev/null +++ b/commands/search/lyrics.js @@ -0,0 +1,60 @@ +const Command = require('../../structures/Command'); +const request = require('node-superfetch'); +const { shorten } = require('../../util/Util'); +// eslint-disable-next-line max-len +const top = ''; +const bottom = ''; +const lyricRegex = new RegExp(`${top}(.+)${bottom}`); + +module.exports = class LyricsCommand extends Command { + constructor(client) { + super(client, { + name: 'lyrics', + aliases: ['az-lyrics'], + group: 'search', + memberName: 'lyrics', + description: 'Responds with lyrics to a song.', + credit: [ + { + name: 'AZLyrics', + url: 'https://www.azlyrics.com/', + reason: 'Lyrics Data' + } + ], + args: [ + { + key: 'artist', + prompt: 'What artist would you like to get the lyrics of?', + type: 'string', + parse: artist => artist.replace(/[^A-Za-z0-9]+/, '') + }, + { + key: 'song', + prompt: 'What song would you like to get the lyrics of?', + type: 'string', + parse: song => song.replace(/[^A-Za-z0-9]+/, '') + } + ] + }); + } + + async run(msg, { artist, song }) { + try { + const lyrics = await this.getLyrics(artist, song); + const url = `https://www.azlyrics.com/lyrics/${artist}/${song}.html`; + return msg.say(`${shorten(lyrics, 1750)}\n\n**Read the Rest:** ${url}`); + } catch (err) { + if (err.code === 404) return msg.say('Could not find any results.'); + return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); + } + } + + async getLyrics(artist, song) { + const { text } = await request.get(`https://www.azlyrics.com/lyrics/${artist}/${song}.html`); + const lyrics = text.match(lyricRegex)[1]; + return lyrics + .replace(/
/g, '\n') + .replace(/<\/?div>/g, '') + .trim(); + } +}; diff --git a/package.json b/package.json index 8de037ee..9fc3192c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "110.1.5", + "version": "110.2.0", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": {