93 lines
2.9 KiB
JavaScript
93 lines
2.9 KiB
JavaScript
const IRC = require('irc-framework')
|
|
const bot = new IRC.Client()
|
|
|
|
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']
|
|
const autojoin = ['#anarchybots']
|
|
|
|
const host = process.env.HOST || 'localhost'
|
|
const port = process.env.PORT || 6667
|
|
const nick = process.env.NICK || 'radiobot'
|
|
|
|
console.log(chalk.magenta('\n***********************************\n'))
|
|
console.log(chalk.magenta(`Connecting to ${host}\n`))
|
|
console.log(chalk.magenta('***********************************\n'))
|
|
|
|
bot.connect({ host, port, nick })
|
|
|
|
bot.on('message', event => logEvent(event))
|
|
bot.on('connected', () => autojoin.map(c => bot.join(c)))
|
|
|
|
bot.on('socket close', () => console.log('bot has disconnected.'))
|
|
|
|
bot.matchMessage(/^!hello/, event => event.reply('Hi!'))
|
|
|
|
/** ADMIN COMMANDS **/
|
|
bot.matchMessage(/^!reset/, event => handleReset(event))
|
|
bot.matchMessage(/^!join/, event => handleJoin(event))
|
|
bot.matchMessage(/^!part/, event => handlePart(event))
|
|
bot.matchMessage(/^!quit/, event => handleQuit(event))
|
|
|
|
/** RADIO COMMANDS**/
|
|
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))
|
|
bot.matchMessage(/^!np/, event => sendCurrentTrack(event))
|
|
|
|
const handleJoin = event => {
|
|
if (!owners.includes(event.nick)) return
|
|
bot.join(event.message.split(' ')[1])
|
|
}
|
|
|
|
const handlePart = event => {
|
|
if (!owners.includes(event.nick)) return
|
|
bot.part(event.message.split(' ')[1])
|
|
}
|
|
|
|
const handleQuit = event => {
|
|
if (!owners.includes(event.nick)) return
|
|
bot.quit(["You'll cowards, don't even smoke crack."])
|
|
}
|
|
|
|
const handleReset = event => {
|
|
if (!owners.includes(event.nick)) return
|
|
reset(event)
|
|
}
|
|
|
|
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 { error, track } = getCurrentTrack()
|
|
if (error) return event.reply('Something went wrong.')
|
|
if (track.length === 0) return event.reply('Nothing is currently playing.')
|
|
event.reply(track)
|
|
}
|
|
|
|
const sendSkipTrack = event => {
|
|
const { error, skip } = skipTrack()
|
|
if (error) return event.reply('Something went wrong.')
|
|
event.reply(`Track skipped: ${skip}`)
|
|
}
|
|
|
|
const logEvent = event => {
|
|
if (event.type === 'notice') console.log(event.message)
|
|
}
|
|
|
|
module.exports = bot
|