Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
32a9db64de |
@ -9,7 +9,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"env": {
|
"env": {
|
||||||
"node": true,
|
"node": true
|
||||||
"es6": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,6 +1,3 @@
|
|||||||
node_modules
|
node_modules
|
||||||
old
|
old
|
||||||
.env
|
.env
|
||||||
playlists/*
|
|
||||||
|
|
||||||
test
|
|
||||||
|
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": {
|
||||||
|
@ -4,8 +4,7 @@
|
|||||||
"description": "a bot",
|
"description": "a bot",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ./src",
|
"start": "node ./src"
|
||||||
"dev": "nodemon ./src"
|
|
||||||
},
|
},
|
||||||
"author": "notnull",
|
"author": "notnull",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
const phrases = [
|
|
||||||
'Did you know? Zhachev is a twat.',
|
|
||||||
'Zhachev is a poor lonely baby who has been stalking this IRC for over a year. anti-civ 4 lyfe!',
|
|
||||||
"Zhachev could be blowing up transformers, but instead he's wasting time stalking us on IRC.",
|
|
||||||
]
|
|
||||||
|
|
||||||
let spam = false
|
|
||||||
|
|
||||||
const resetSpam = () => {
|
|
||||||
spam = false
|
|
||||||
console.log('reset spam counter.')
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleSpam = event => {
|
|
||||||
if (spam === true) return
|
|
||||||
console.log('spam detected. setting spam counter.')
|
|
||||||
spam = true
|
|
||||||
setTimeout(resetSpam, 30000)
|
|
||||||
const phrase = phrases[Math.floor(Math.random() * phrases.length)]
|
|
||||||
return event.reply(phrase)
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = handleSpam
|
|
@ -1,17 +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 { getPlaylist, getCurrentTrack, skipTrack } = require('./mpc-commands')
|
||||||
const { getCurrentTrack, skipTrack, reset, poll } = require('./mpc-commands')
|
const { searchTrack, requestTrack } = require('./spotify')
|
||||||
const { getMyPlaylist } = require('./linx-commands')
|
|
||||||
const chalk = require('chalk')
|
const chalk = require('chalk')
|
||||||
|
|
||||||
const owners = ['notnull']
|
const owners = ['notnull']
|
||||||
const helpers = ['notnull', 'rfa', 'substack']
|
|
||||||
|
|
||||||
const autojoin = ['#anarchybots']
|
const autojoin = ['#anarchybots']
|
||||||
|
|
||||||
setInterval(poll, 60000)
|
|
||||||
const host = process.env.HOST || 'localhost'
|
const host = process.env.HOST || 'localhost'
|
||||||
const port = process.env.PORT || 6667
|
const port = process.env.PORT || 6667
|
||||||
const nick = process.env.NICK || 'radiobot'
|
const nick = process.env.NICK || 'radiobot'
|
||||||
@ -30,18 +26,15 @@ bot.on('socket close', () => console.log('bot has disconnected.'))
|
|||||||
bot.matchMessage(/^!hello/, event => event.reply('Hi!'))
|
bot.matchMessage(/^!hello/, event => event.reply('Hi!'))
|
||||||
|
|
||||||
/** ADMIN COMMANDS **/
|
/** ADMIN COMMANDS **/
|
||||||
bot.matchMessage(/^!reset/, event => handleReset(event))
|
|
||||||
bot.matchMessage(/^!join/, event => handleJoin(event))
|
bot.matchMessage(/^!join/, event => handleJoin(event))
|
||||||
bot.matchMessage(/^!part/, event => handlePart(event))
|
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(/^!np/, event => sendCurrentTrack(event))
|
bot.matchMessage(/^!np/, event => sendCurrentTrack(event))
|
||||||
|
|
||||||
const handleJoin = event => {
|
const handleJoin = event => {
|
||||||
@ -59,20 +52,11 @@ const handleQuit = event => {
|
|||||||
bot.quit(["You'll cowards, don't even smoke crack."])
|
bot.quit(["You'll cowards, don't even smoke crack."])
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleReset = event => {
|
const sendPlaylist = event => {
|
||||||
if (!helpers.includes(event.nick)) return
|
const { error, playlist } = getPlaylist()
|
||||||
reset(event)
|
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 = [
|
|
||||||
'to search: !search "track name" artist "artist name" (artist and artist name optional)',
|
|
||||||
'to request: !request "track name" artist "artist name" (artist and artist name optional)',
|
|
||||||
'to skip current track: !skip',
|
|
||||||
"to view what's currently playing: !np",
|
|
||||||
'to view five upcoming tracks: !playlist',
|
|
||||||
]
|
|
||||||
help.map(h => bot.say(event.nick, h))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const sendCurrentTrack = event => {
|
const sendCurrentTrack = event => {
|
||||||
|
@ -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 }
|
|
@ -1,22 +1,10 @@
|
|||||||
const { spawnSync } = require('child_process')
|
const { spawnSync } = require('child_process')
|
||||||
const fs = require('fs')
|
|
||||||
|
|
||||||
let playing = null
|
|
||||||
|
|
||||||
const getPlaylist = () => {
|
const getPlaylist = () => {
|
||||||
const { stderr, stdout } = spawnSync('mpc', ['playlist'])
|
const { stderr, stdout } = spawnSync('mpc', ['playlist'])
|
||||||
return { error: stderr.toString(), playlist: stdout.toString() }
|
return { error: stderr.toString(), playlist: stdout.toString() }
|
||||||
}
|
}
|
||||||
|
|
||||||
const poll = () => {
|
|
||||||
const { stdout } = spawnSync('mpc', ['status'])
|
|
||||||
const nowPlaying = stdout.toString()
|
|
||||||
if (playing === nowPlaying) {
|
|
||||||
console.log('Song stopped playing. Skipping\n', nowPlaying)
|
|
||||||
spawnSync('mpc', ['next'])
|
|
||||||
} else playing = nowPlaying
|
|
||||||
}
|
|
||||||
|
|
||||||
const getCurrentTrack = () => {
|
const getCurrentTrack = () => {
|
||||||
const { stderr, stdout } = spawnSync('mpc', ['current'])
|
const { stderr, stdout } = spawnSync('mpc', ['current'])
|
||||||
return { error: stderr.toString(), track: stdout.toString() }
|
return { error: stderr.toString(), track: stdout.toString() }
|
||||||
@ -29,95 +17,8 @@ const skipTrack = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const insertTrack = spotifyURI => {
|
const insertTrack = spotifyURI => {
|
||||||
console.log('inserting track:', JSON.stringify(spotifyURI))
|
|
||||||
const { stderr, stdout } = spawnSync('mpc', ['insert', spotifyURI])
|
const { stderr, stdout } = spawnSync('mpc', ['insert', spotifyURI])
|
||||||
console.log(stderr.toString(), stdout.toString())
|
console.log(stderr.toString(), stdout.toString())
|
||||||
return { error: stderr.toString(), insert: stdout.toString() }
|
return { error: stderr.toString(), insert: stdout.toString() }
|
||||||
}
|
}
|
||||||
|
module.exports = { getPlaylist, getCurrentTrack, skipTrack, insertTrack }
|
||||||
const insertTrackAsync = spotifyURI => {
|
|
||||||
console.log('inserting track:', spotifyURI)
|
|
||||||
const promise = new Promise((resolve, reject) => {
|
|
||||||
const { stdout, error } = spawnSync('mpc', ['insert', spotifyURI])
|
|
||||||
if (error) reject(error.message)
|
|
||||||
resolve({ track: stdout.toString() })
|
|
||||||
})
|
|
||||||
return promise
|
|
||||||
}
|
|
||||||
|
|
||||||
const reset = event => {
|
|
||||||
clearAllPlaylists(event)
|
|
||||||
addAllPlaylists(event)
|
|
||||||
}
|
|
||||||
|
|
||||||
const clearAllPlaylists = event => {
|
|
||||||
const { error } = spawnSync('mpc', ['clear'])
|
|
||||||
if (error) return handleError(error, event)
|
|
||||||
}
|
|
||||||
|
|
||||||
const addAllPlaylists = async event => {
|
|
||||||
try {
|
|
||||||
const files = fs.readdirSync('./playlists')
|
|
||||||
const tracks = readPlaylists(files)
|
|
||||||
await Promise.all(
|
|
||||||
tracks.map(t => insertTrackAsync(t.split(' # ')[0]))
|
|
||||||
).then(() => {
|
|
||||||
shuffleAllPlaylists()
|
|
||||||
play()
|
|
||||||
return event.reply('Successfully reset playlists.')
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
return handleError(e, event)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const readPlaylists = files =>
|
|
||||||
files
|
|
||||||
.map(f => fs.readFileSync('./playlists/' + f, 'utf-8').split('\n'))
|
|
||||||
.reduce((a, b) => a.concat(b))
|
|
||||||
|
|
||||||
const handleError = (err, event) => {
|
|
||||||
console.log(err)
|
|
||||||
return event.reply('Something went wrong.')
|
|
||||||
}
|
|
||||||
|
|
||||||
const shuffleAllPlaylists = event => {
|
|
||||||
const { error } = spawnSync('mpc', ['shuffle'])
|
|
||||||
if (error) return handleError(error, event)
|
|
||||||
}
|
|
||||||
|
|
||||||
const play = event => {
|
|
||||||
const { error } = spawnSync('mpc', ['play'])
|
|
||||||
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,
|
|
||||||
poll,
|
|
||||||
}
|
|
||||||
|
@ -1,10 +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 = ''
|
|
||||||
const handleSpam = require('./handleSpam')
|
|
||||||
|
|
||||||
const CLIENT_ID = process.env.CLIENT_ID
|
const CLIENT_ID = process.env.CLIENT_ID
|
||||||
const CLIENT_SECRET = process.env.CLIENT_SECRET
|
const CLIENT_SECRET = process.env.CLIENT_SECRET
|
||||||
@ -14,30 +11,30 @@ const spotify = new Spotify({
|
|||||||
secret: CLIENT_SECRET,
|
secret: CLIENT_SECRET,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const addToPlaylist = (nick, string) => {
|
||||||
|
require('fs').appendFileSync(`playlists/${nick}`, string)
|
||||||
|
}
|
||||||
|
|
||||||
const parseTrackData = tracks => {
|
const parseTrackData = tracks => {
|
||||||
const { items } = tracks
|
const { items } = tracks
|
||||||
//printTrackNames(items)
|
printTrackNames(items)
|
||||||
const { album, artists, uri, name } = items[0]
|
const { album, artists, uri, name } = items[0]
|
||||||
const artist = artists[0].name
|
const artist = artists[0].name
|
||||||
const albumName = album.name
|
const albumName = album.name
|
||||||
return { trackName: name, artistName: artist, albumName, uri }
|
return { trackName: name, artistName: artist, albumName, uri }
|
||||||
}
|
}
|
||||||
|
|
||||||
const addToPlaylist = (nick, string) => {
|
|
||||||
require('fs').appendFileSync(`playlists/${nick}`, string + '\n')
|
|
||||||
}
|
|
||||||
|
|
||||||
const searchTrack = event => {
|
const searchTrack = event => {
|
||||||
let pattern = /^!search ["“](.+?)["”]( artist ["“](.+?)["”])?/
|
let pattern = /^!search "(.+?)"( artist "(.+?)")?/
|
||||||
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]
|
||||||
if (match[3]) query += ` artist:${match[3]}`
|
if (match[3]) query += ` artist:${match[3]}`
|
||||||
//printQuery(query)
|
printQuery(query)
|
||||||
spotify.search({ type: 'track', query }).then(data => {
|
spotify.search({ type: 'track', query }).then(data => {
|
||||||
if (!data || !data.tracks) return event.reply('Something went wrong.')
|
if (!data || !data.tracks) return event.reply('Something went wrong.')
|
||||||
if (data.tracks.total === 0) return event.reply('No results.')
|
if (data.tracks.total === 0) return event.reply('No results.')
|
||||||
@ -50,19 +47,17 @@ const searchTrack = event => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const requestTrack = event => {
|
const requestTrack = event => {
|
||||||
if (event.message === request) return handleSpam(event)
|
let pattern = /^!request "(.+?)"( artist "(.+?)")?/
|
||||||
|
|
||||||
request = event.message
|
|
||||||
let pattern = /^!request ["“](.+?)["”]( artist ["“](.+?)["”])?/
|
|
||||||
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]
|
||||||
if (match[3]) query += ` artist:${match[3]}`
|
if (match[3]) query += ` artist:${match[3]}`
|
||||||
//printQuery(query)
|
printQuery(query)
|
||||||
|
addToPlaylist(event.nick, query)
|
||||||
spotify.search({ type: 'track', query }).then(data => {
|
spotify.search({ type: 'track', query }).then(data => {
|
||||||
if (!data || !data.tracks) return event.reply('Something went wrong.')
|
if (!data || !data.tracks) return event.reply('Something went wrong.')
|
||||||
if (data.tracks.total === 0) return event.reply('No results.')
|
if (data.tracks.total === 0) return event.reply('No results.')
|
||||||
@ -72,29 +67,7 @@ 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}"`
|
event.reply(`Requested '${trackName}' by ${artistName}`)
|
||||||
addToPlaylist(event.nick, `${uri} # ${request}`)
|
|
||||||
event.reply(`Requested ${request}`)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,15 +77,14 @@ const printQuery = query => {
|
|||||||
console.log(query)
|
console.log(query)
|
||||||
console.log(chalk.red('\n*******************************************\n'))
|
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 +92,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