const Spotify = require('node-spotify-api') const chalk = require('chalk') require('dotenv').config() const { insertTrack } = require('./mpc-commands') let request = '' const handleSpam = require('./handleSpam') const CLIENT_ID = process.env.CLIENT_ID const CLIENT_SECRET = process.env.CLIENT_SECRET const spotify = new Spotify({ id: CLIENT_ID, secret: CLIENT_SECRET, }) const parseTrackData = tracks => { const { items } = tracks //printTrackNames(items) const { album, artists, uri, name } = items[0] const artist = artists[0].name const albumName = album.name return { trackName: name, artistName: artist, albumName, uri } } const addToPlaylist = (nick, string) => { require('fs').appendFileSync(`playlists/${nick}`, string) } const searchTrack = event => { let pattern = /^!search ["“](.+?)["”]( artist ["“](.+?)["”])?/ let match = event.message.match(pattern) if (!match) return event.reply( 'Incorrect syntax. Use !search "track name" artist "artist name" (artist and artist name optional)' ) let query = match[1] if (match[3]) query += ` artist:${match[3]}` //printQuery(query) spotify.search({ type: 'track', query }).then(data => { if (!data || !data.tracks) return event.reply('Something went wrong.') if (data.tracks.total === 0) return event.reply('No results.') const { trackName, artistName, albumName, uri } = parseTrackData( data.tracks ) printTrackData(trackName, artistName, albumName, uri) event.reply(`'${trackName}' by ${artistName} on album ${albumName}`) }) } const requestTrack = event => { if (event.message === request) return handleSpam(event) request = event.message let pattern = /^!request ["“](.+?)["”]( artist ["“](.+?)["”])?/ let match = event.message.match(pattern) if (!match) return event.reply( 'Incorrect syntax. Use !request "track name" artist "artist name" (artist and artist name optional)' ) let query = match[1] if (match[3]) query += ` artist:${match[3]}` //printQuery(query) spotify.search({ type: 'track', query }).then(data => { if (!data || !data.tracks) return event.reply('Something went wrong.') if (data.tracks.total === 0) return event.reply('No results.') const { trackName, artistName, albumName, uri } = parseTrackData( data.tracks ) printTrackData(trackName, artistName, albumName, uri) const { error } = insertTrack(uri) if (error) return event.reply('Something went wrong.') const request = `'${trackName}' by ${artistName}` addToPlaylist(event.nick, `${uri} # ${request}`) event.reply(`Requested ${request}`) }) } // const printQuery = query => { // console.log(chalk.red('\n*******************************************\n')) // console.log('Sending the following query to Spotify:') // console.log(query) // console.log(chalk.red('\n*******************************************\n')) // } // const printTrackNames = items => { // console.log(chalk.yellow('\n*******************************************\n')) // console.log('Search returned the following tracks:') // items.map(i => console.log(`'${i.name}' by ${i.artists[0].name}`)) // console.log(chalk.yellow('\n*******************************************\n')) // } const printTrackData = (name, artist, albumName, uri) => { console.log(chalk.blue('\n*******************************************\n')) console.log('name:', name) console.log('artist:', artist) console.log('album:', albumName) console.log('uri:', uri) console.log(chalk.blue('\n*******************************************\n')) } module.exports = { searchTrack, requestTrack }