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",
|
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
||||||
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
|
"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": {
|
"fs.realpath": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
@ -1209,6 +1199,18 @@
|
|||||||
"tough-cookie": "~2.4.3",
|
"tough-cookie": "~2.4.3",
|
||||||
"tunnel-agent": "^0.6.0",
|
"tunnel-agent": "^0.6.0",
|
||||||
"uuid": "^3.3.2"
|
"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": {
|
"request-promise": {
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
const IRC = require('irc-framework')
|
const IRC = require('irc-framework')
|
||||||
const bot = new IRC.Client()
|
const bot = new IRC.Client()
|
||||||
|
|
||||||
const {
|
const { searchTrack, requestTrack, deleteTrack } = require('./spotify')
|
||||||
getPlaylist,
|
const { getCurrentTrack, skipTrack, reset } = require('./mpc-commands')
|
||||||
getCurrentTrack,
|
const { getMyPlaylist } = require('./linx-commands')
|
||||||
skipTrack,
|
|
||||||
reset,
|
|
||||||
} = require('./mpc-commands')
|
|
||||||
const { searchTrack, requestTrack } = require('./spotify')
|
|
||||||
const chalk = require('chalk')
|
const chalk = require('chalk')
|
||||||
|
|
||||||
const owners = ['notnull']
|
const owners = ['notnull']
|
||||||
@ -37,8 +33,9 @@ bot.matchMessage(/^!part/, event => handlePart(event))
|
|||||||
bot.matchMessage(/^!quit/, event => handleQuit(event))
|
bot.matchMessage(/^!quit/, event => handleQuit(event))
|
||||||
|
|
||||||
/** RADIO COMMANDS**/
|
/** RADIO COMMANDS**/
|
||||||
bot.matchMessage(/^!playlist/, event => sendPlaylist(event))
|
bot.matchMessage(/^!playlist/, event => getMyPlaylist(event, bot))
|
||||||
bot.matchMessage(/^!request/, event => requestTrack(event))
|
bot.matchMessage(/^!request/, event => requestTrack(event))
|
||||||
|
bot.matchMessage(/^!delete/, event => deleteTrack(event))
|
||||||
bot.matchMessage(/^!search/, event => searchTrack(event))
|
bot.matchMessage(/^!search/, event => searchTrack(event))
|
||||||
bot.matchMessage(/^!skip/, event => sendSkipTrack(event))
|
bot.matchMessage(/^!skip/, event => sendSkipTrack(event))
|
||||||
bot.matchMessage(/^!help/, event => sendHelp(event))
|
bot.matchMessage(/^!help/, event => sendHelp(event))
|
||||||
@ -63,12 +60,6 @@ const handleReset = event => {
|
|||||||
if (!owners.includes(event.nick)) return
|
if (!owners.includes(event.nick)) return
|
||||||
reset(event)
|
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 sendHelp = event => {
|
||||||
const help = [
|
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)
|
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 = {
|
module.exports = {
|
||||||
getPlaylist,
|
getPlaylist,
|
||||||
getCurrentTrack,
|
getCurrentTrack,
|
||||||
skipTrack,
|
skipTrack,
|
||||||
insertTrack,
|
insertTrack,
|
||||||
|
removeTrack,
|
||||||
reset,
|
reset,
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
const Spotify = require('node-spotify-api')
|
const Spotify = require('node-spotify-api')
|
||||||
const chalk = require('chalk')
|
const chalk = require('chalk')
|
||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
const { insertTrack } = require('./mpc-commands')
|
const { insertTrack, removeTrack } = require('./mpc-commands')
|
||||||
|
|
||||||
let request = ''
|
let request = ''
|
||||||
const handleSpam = require('./handleSpam')
|
const handleSpam = require('./handleSpam')
|
||||||
@ -72,26 +72,47 @@ const requestTrack = event => {
|
|||||||
printTrackData(trackName, artistName, albumName, uri)
|
printTrackData(trackName, artistName, albumName, uri)
|
||||||
const { error } = insertTrack(uri)
|
const { error } = insertTrack(uri)
|
||||||
if (error) return event.reply('Something went wrong.')
|
if (error) return event.reply('Something went wrong.')
|
||||||
const request = `'${trackName}' by ${artistName}`
|
const request = `"${trackName}" artist "${artistName}"`
|
||||||
addToPlaylist(event.nick, `${uri} # ${request}`)
|
addToPlaylist(event.nick, `${uri} # ${request}`)
|
||||||
event.reply(`Requested ${request}`)
|
event.reply(`Requested ${request}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// const printQuery = query => {
|
const deleteTrack = event => {
|
||||||
// console.log(chalk.red('\n*******************************************\n'))
|
console.log('Deleting', event.message)
|
||||||
// console.log('Sending the following query to Spotify:')
|
let pattern = /^!delete ["“](.+?)["”]( artist ["“](.+?)["”])?/
|
||||||
// console.log(query)
|
let match = event.message.match(pattern)
|
||||||
// console.log(chalk.red('\n*******************************************\n'))
|
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 => {
|
// const printTrackNames = items => {
|
||||||
// console.log(chalk.yellow('\n*******************************************\n'))
|
// console.log(chalk.yellow('\n*******************************************\n'))
|
||||||
// console.log('Search returned the following tracks:')
|
// console.log('Search returned the following tracks:')
|
||||||
// items.map(i => console.log(`'${i.name}' by ${i.artists[0].name}`))
|
// items.map(i => console.log(`'${i.name}' by ${i.artists[0].name}`))
|
||||||
// console.log(chalk.yellow('\n*******************************************\n'))
|
// 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'))
|
console.log(chalk.blue('\n*******************************************\n'))
|
||||||
|
if (message) console.log(message)
|
||||||
console.log('name:', name)
|
console.log('name:', name)
|
||||||
console.log('artist:', artist)
|
console.log('artist:', artist)
|
||||||
console.log('album:', albumName)
|
console.log('album:', albumName)
|
||||||
@ -99,4 +120,4 @@ const printTrackData = (name, artist, albumName, uri) => {
|
|||||||
console.log(chalk.blue('\n*******************************************\n'))
|
console.log(chalk.blue('\n*******************************************\n'))
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { searchTrack, requestTrack }
|
module.exports = { searchTrack, requestTrack, deleteTrack }
|
||||||
|
Loading…
Reference in New Issue
Block a user