add ability to delete tracks

This commit is contained in:
notnull 2019-12-25 06:35:18 -05:00
parent aec3083b42
commit 8362ef0659
5 changed files with 86 additions and 34 deletions

22
package-lock.json generated
View File

@ -689,16 +689,6 @@
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -1209,6 +1199,18 @@
"tough-cookie": "~2.4.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"dependencies": {
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
}
}
},
"request-promise": {

View File

@ -1,13 +1,9 @@
const IRC = require('irc-framework')
const bot = new IRC.Client()
const {
getPlaylist,
getCurrentTrack,
skipTrack,
reset,
} = require('./mpc-commands')
const { searchTrack, requestTrack } = require('./spotify')
const { searchTrack, requestTrack, deleteTrack } = require('./spotify')
const { getCurrentTrack, skipTrack, reset } = require('./mpc-commands')
const { getMyPlaylist } = require('./linx-commands')
const chalk = require('chalk')
const owners = ['notnull']
@ -37,8 +33,9 @@ bot.matchMessage(/^!part/, event => handlePart(event))
bot.matchMessage(/^!quit/, event => handleQuit(event))
/** RADIO COMMANDS**/
bot.matchMessage(/^!playlist/, event => sendPlaylist(event))
bot.matchMessage(/^!playlist/, event => getMyPlaylist(event, bot))
bot.matchMessage(/^!request/, event => requestTrack(event))
bot.matchMessage(/^!delete/, event => deleteTrack(event))
bot.matchMessage(/^!search/, event => searchTrack(event))
bot.matchMessage(/^!skip/, event => sendSkipTrack(event))
bot.matchMessage(/^!help/, event => sendHelp(event))
@ -63,12 +60,6 @@ const handleReset = event => {
if (!owners.includes(event.nick)) return
reset(event)
}
const sendPlaylist = event => {
const { error, playlist } = getPlaylist()
if (error) return event.reply('Something went wrong.')
const splitPlaylist = playlist.split('\n').slice(0, 5)
splitPlaylist.map(s => bot.say(event.nick, s))
}
const sendHelp = event => {
const help = [

16
src/linx-commands.js Normal file
View File

@ -0,0 +1,16 @@
const axios = require('axios')
const fs = require('fs')
const getMyPlaylist = (event, bot) => {
fs.readFile(`./playlists/${event.nick}`, 'utf-8', (err, playlist) => {
if (err) return event.reply("You don't have a playlist.")
const config = { headers: { 'Linx-Randomize': 'yes' } }
axios
.put('https://irc.anarchyplanet.org/img/upload', playlist, config)
.then(res => {
bot.say(event.nick, res.data)
})
})
}
module.exports = { getMyPlaylist }

View File

@ -79,10 +79,32 @@ const play = event => {
if (error) return handleError(error, event)
}
const removeTrack = (trackName, artistName, uri, event) => {
console.log('removing track', uri, event.nick)
fs.readFile('./playlists/' + event.nick, 'utf-8', (err, playlist) => {
console.log('err', err, 'playlist', playlist)
if (err) return event.reply("You don't have a playlist.")
const match = playlist.split('\n').find(p => p.match(new RegExp(uri)))
if (!match) return event.reply("This track wasn't found in your playlist.")
const filteredPlaylist = playlist.split('\n').filter(t => t !== match)
fs.writeFile(
`./playlists/${'notnull'}`,
filteredPlaylist.join('\n'),
err => {
if (err) return handleError(err)
return event.reply(
`${trackName} by ${artistName} was successfully deleted from your playlist.`
)
}
)
})
}
module.exports = {
getPlaylist,
getCurrentTrack,
skipTrack,
insertTrack,
removeTrack,
reset,
}

View File

@ -1,7 +1,7 @@
const Spotify = require('node-spotify-api')
const chalk = require('chalk')
require('dotenv').config()
const { insertTrack } = require('./mpc-commands')
const { insertTrack, removeTrack } = require('./mpc-commands')
let request = ''
const handleSpam = require('./handleSpam')
@ -72,26 +72,47 @@ const requestTrack = event => {
printTrackData(trackName, artistName, albumName, uri)
const { error } = insertTrack(uri)
if (error) return event.reply('Something went wrong.')
const request = `'${trackName}' by ${artistName}`
const request = `"${trackName}" artist "${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 deleteTrack = event => {
console.log('Deleting', event.message)
let pattern = /^!delete ["“](.+?)["”]( artist ["“](.+?)["”])?/
let match = event.message.match(pattern)
if (!match)
return event.reply(
'Use !delete "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('Not found.')
const { trackName, artistName, uri } = parseTrackData(data.tracks)
removeTrack(trackName, artistName, uri, event)
})
}
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) => {
const printTrackData = (name, artist, albumName, uri, message) => {
console.log(chalk.blue('\n*******************************************\n'))
if (message) console.log(message)
console.log('name:', name)
console.log('artist:', artist)
console.log('album:', albumName)
@ -99,4 +120,4 @@ const printTrackData = (name, artist, albumName, uri) => {
console.log(chalk.blue('\n*******************************************\n'))
}
module.exports = { searchTrack, requestTrack }
module.exports = { searchTrack, requestTrack, deleteTrack }