add ability to delete tracks
This commit is contained in:
parent
aec3083b42
commit
8362ef0659
22
package-lock.json
generated
22
package-lock.json
generated
@ -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": {
|
||||
|
@ -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
16
src/linx-commands.js
Normal 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 }
|
@ -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,
|
||||
}
|
||||
|
@ -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 }
|
||||
|
Loading…
Reference in New Issue
Block a user