Compare commits
No commits in common. "8362ef0659244c07e5f9e357dc27acfa8b432854" and "4718d523d949a7c3da128f01f83342ed7201e7db" have entirely different histories.
8362ef0659
...
4718d523d9
22
package-lock.json
generated
22
package-lock.json
generated
@ -689,6 +689,16 @@
|
|||||||
"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",
|
||||||
@ -1199,18 +1209,6 @@
|
|||||||
"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,9 +1,13 @@
|
|||||||
const IRC = require('irc-framework')
|
const IRC = require('irc-framework')
|
||||||
const bot = new IRC.Client()
|
const bot = new IRC.Client()
|
||||||
|
|
||||||
const { searchTrack, requestTrack, deleteTrack } = require('./spotify')
|
const {
|
||||||
const { getCurrentTrack, skipTrack, reset } = require('./mpc-commands')
|
getPlaylist,
|
||||||
const { getMyPlaylist } = require('./linx-commands')
|
getCurrentTrack,
|
||||||
|
skipTrack,
|
||||||
|
reset,
|
||||||
|
} = require('./mpc-commands')
|
||||||
|
const { searchTrack, requestTrack } = require('./spotify')
|
||||||
const chalk = require('chalk')
|
const chalk = require('chalk')
|
||||||
|
|
||||||
const owners = ['notnull']
|
const owners = ['notnull']
|
||||||
@ -33,9 +37,8 @@ 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 => getMyPlaylist(event, bot))
|
bot.matchMessage(/^!playlist/, event => sendPlaylist(event))
|
||||||
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))
|
||||||
@ -60,6 +63,12 @@ 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 = [
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
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,32 +79,10 @@ 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, removeTrack } = require('./mpc-commands')
|
const { insertTrack } = require('./mpc-commands')
|
||||||
|
|
||||||
let request = ''
|
let request = ''
|
||||||
const handleSpam = require('./handleSpam')
|
const handleSpam = require('./handleSpam')
|
||||||
@ -32,7 +32,7 @@ const searchTrack = event => {
|
|||||||
let match = event.message.match(pattern)
|
let match = event.message.match(pattern)
|
||||||
if (!match)
|
if (!match)
|
||||||
return event.reply(
|
return event.reply(
|
||||||
'Use !search "track name" artist "artist name" (artist and artist name optional)'
|
'Incorrect syntax. Use !search "track name" artist "artist name" (artist and artist name optional)'
|
||||||
)
|
)
|
||||||
|
|
||||||
let query = match[1]
|
let query = match[1]
|
||||||
@ -57,7 +57,7 @@ const requestTrack = event => {
|
|||||||
let match = event.message.match(pattern)
|
let match = event.message.match(pattern)
|
||||||
if (!match)
|
if (!match)
|
||||||
return event.reply(
|
return event.reply(
|
||||||
'Use !request "track name" artist "artist name" (artist and artist name optional)'
|
'Incorrect syntax. Use !request "track name" artist "artist name" (artist and artist name optional)'
|
||||||
)
|
)
|
||||||
|
|
||||||
let query = match[1]
|
let query = match[1]
|
||||||
@ -72,47 +72,26 @@ 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}" artist "${artistName}"`
|
const request = `'${trackName}' by ${artistName}`
|
||||||
addToPlaylist(event.nick, `${uri} # ${request}`)
|
addToPlaylist(event.nick, `${uri} # ${request}`)
|
||||||
event.reply(`Requested ${request}`)
|
event.reply(`Requested ${request}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const deleteTrack = event => {
|
// const printQuery = query => {
|
||||||
console.log('Deleting', event.message)
|
// console.log(chalk.red('\n*******************************************\n'))
|
||||||
let pattern = /^!delete ["“](.+?)["”]( artist ["“](.+?)["”])?/
|
// console.log('Sending the following query to Spotify:')
|
||||||
let match = event.message.match(pattern)
|
// console.log(query)
|
||||||
if (!match)
|
// console.log(chalk.red('\n*******************************************\n'))
|
||||||
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, message) => {
|
const printTrackData = (name, artist, albumName, uri) => {
|
||||||
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)
|
||||||
@ -120,4 +99,4 @@ const printTrackData = (name, artist, albumName, uri, message) => {
|
|||||||
console.log(chalk.blue('\n*******************************************\n'))
|
console.log(chalk.blue('\n*******************************************\n'))
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { searchTrack, requestTrack, deleteTrack }
|
module.exports = { searchTrack, requestTrack }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user