diff --git a/main.js b/main.js index a93a16b..ee5c360 100755 --- a/main.js +++ b/main.js @@ -1,23 +1,31 @@ +// Import modules const { Client } = require('discord.js'); const fs = require('fs'); const path = require('path'); const tokens = require('./tokens.json'); +// Set up Discord client const client = new Client(); -const sfxFilePath = path.join(__dirname, 'sfx'); -const allowedChannels = /bot|alttp-alerts/; -let playOptions = {volume: 0.25, passes: tokens.passes}; +// Set up SFX +const sfxFilePath = path.join(__dirname, 'sfx'); +const allowedSfxChannels = new RegExp(tokens.allowedSfxChannels); +let playOptions = {volume: tokens.sfxVolume, passes: tokens.passes}; let playing = false; -// read in sfx directory, filenames are the commands -let sfxList = fs.readdirSync(sfxFilePath); -sfxList.forEach(function(el, index, a) { - a[index] = el.split('.')[0]; +// Read in sfx directory, filenames are the commands +let sfxList = readSfxDirectory(sfxFilePath); +// Watch directory for changes and update the list +fs.watch(sfxFilePath, (eventType, filename) => { + if (eventType === 'rename') { + sfxList = readSfxDirectory(sfxFilePath); + } }); +// Set up the native commands to handle const commands = { - 'x': (msg) => { + 'sfx': (msg) => { + if (!allowedSfxChannels.test(msg.channel.name)) return; let sfx = msg.content.split(' ')[1]; if (sfx == '' || sfx === undefined) return msg.channel.send('```'+sfxList.join(', ')+'```'); @@ -30,51 +38,56 @@ const commands = { } else if (fs.existsSync(path.join(sfxFilePath, sfx + '.wav'))) { sfxPath = path.join(sfxFilePath, sfx + '.wav'); } else { - return msg.channel.send('This sound effect does not exist!'); + return msg.reply('This sound effect does not exist!'); } - if (!msg.guild.voiceConnection) return commands.xjoin(msg).then(() => commands.x(msg)); + if (!msg.guild.voiceConnection) return joinVoiceChannel(msg).then(() => commands.sfx(msg)); playing = true; - (function play(song) { - console.log(song); - const dispatcher = msg.guild.voiceConnection.playFile(song, playOptions); + (function play(sfxFile) { + const dispatcher = msg.guild.voiceConnection.playFile(sfxFile, playOptions); dispatcher.on('end', reason => { - console.log('end: ' + reason) - playing = false; - msg.guild.voiceConnection.disconnect(); - }) - .on('error', error => { - console.log('error: ' + error); - playing = false; - msg.guild.voiceConnection.disconnect(); - }) - .on('start', () => {console.log('started');}); + //console.log('end: ' + reason) + playing = false; + msg.guild.voiceConnection.disconnect(); + }) + .on('error', error => { + //console.log('error: ' + error); + playing = false; + msg.guild.voiceConnection.disconnect(); + }) + .on('start', () => {}); })(sfxPath); }, - 'xjoin': (msg) => { - return new Promise((resolve, reject) => { - const voiceChannel = msg.member.voiceChannel; - if (!voiceChannel || voiceChannel.type !== 'voice') return msg.reply('I couldn\'t connect to your voice channel...'); - voiceChannel.join().then(connection => resolve(connection)).catch(err => reject(err)); - }); - }, - 'xhelp': (msg) => { - let tosend = ['```xl', tokens.prefix + 'x {sfx}: "Plays the requested sound effect in your current voice channel"', '```']; - msg.channel.sendMessage(tosend.join('\n')); - }, - 'xreboot': (msg) => { + 'reboot': (msg) => { if (msg.author.id == tokens.adminID) process.exit(); //Requires a node module like Forever to work. } }; +// Wait for discord to be ready, handle messages client.on('ready', () => { - console.log('ready!'); -}); - -client.on('message', msg => { - if (!allowedChannels.test(msg.channel.name) || !msg.content.startsWith(tokens.prefix)) return; + console.log(`${tokens.botName} is connected and ready`); +}).on('message', msg => { + if (!msg.content.startsWith(tokens.prefix)) return; let cmd = msg.content.toLowerCase().slice(tokens.prefix.length).split(' ')[0]; if (commands.hasOwnProperty(cmd)) commands[cmd](msg); }); -client.login(tokens.d_token); \ No newline at end of file +client.login(tokens.d_token); + +function readSfxDirectory(path) +{ + let sfxList = fs.readdirSync(sfxFilePath); + sfxList.forEach(function(el, index, a) { + a[index] = el.split('.')[0]; + }); + return sfxList; +} + +function joinVoiceChannel(msg) +{ + return new Promise((resolve, reject) => { + const voiceChannel = msg.member.voiceChannel; + if (!voiceChannel || voiceChannel.type !== 'voice') return msg.reply('I couldn\'t connect to your voice channel...'); + voiceChannel.join().then(connection => resolve(connection)).catch(err => reject(err)); + }); +} \ No newline at end of file diff --git a/sfx/eheh.mp3 b/sfx/eheh.mp3 new file mode 100755 index 0000000..cb0dc18 Binary files /dev/null and b/sfx/eheh.mp3 differ diff --git a/sfx/fine.mp3 b/sfx/fine.mp3 new file mode 100755 index 0000000..0650632 Binary files /dev/null and b/sfx/fine.mp3 differ