summaryrefslogtreecommitdiff
path: root/commands
diff options
context:
space:
mode:
authors1n <[email protected]>2020-04-07 10:40:25 -0700
committerGitHub <[email protected]>2020-04-07 10:40:25 -0700
commit67e11c6747ea02b61d1b0604cf650ed03f294e01 (patch)
tree67f050cc81dea4b9b21f0d0349ecbdb263ecf221 /commands
parentadd yt test, 1.3.0 (diff)
parentfinal test push before master (diff)
downloads5nical-67e11c6747ea02b61d1b0604cf650ed03f294e01.tar.xz
s5nical-67e11c6747ea02b61d1b0604cf650ed03f294e01.zip
Merge pull request #1 from 8cy/test
major codebase refactor, v1.3.0
Diffstat (limited to 'commands')
-rw-r--r--commands/8ball.js19
-rw-r--r--commands/abee.js25
-rw-r--r--commands/botstatus.js15
-rw-r--r--commands/clear.js46
-rw-r--r--commands/commands.js32
-rw-r--r--commands/dm.js66
-rw-r--r--commands/emoji.js10
-rw-r--r--commands/fart.js80
-rw-r--r--commands/help.js37
-rw-r--r--commands/join.js15
-rw-r--r--commands/leave.js12
-rw-r--r--commands/membercount.js8
-rw-r--r--commands/ping.js21
-rw-r--r--commands/psycho.js25
-rw-r--r--commands/quote.js18
-rw-r--r--commands/reboot.js10
-rw-r--r--commands/say.js11
-rw-r--r--commands/server.js26
-rw-r--r--commands/squeak.js20
-rw-r--r--commands/uhhhh.js20
-rw-r--r--commands/wahoo.js20
21 files changed, 536 insertions, 0 deletions
diff --git a/commands/8ball.js b/commands/8ball.js
new file mode 100644
index 0000000..e865176
--- /dev/null
+++ b/commands/8ball.js
@@ -0,0 +1,19 @@
+const Discord = require('discord.js');
+
+module.exports = {
+ name: '8ball',
+ aliases: ['ball', '8b'],
+ description: '',
+ execute(msg) {
+ r = ['yes~ uwu', 'no.', 'yes!', 'no!', 'what, no.', 'yes.', 'maybe.', 'perhaps.', 'try again.', 'i\'m not sure.'];
+
+ var s = r[Math.floor(Math.random() * r.length)];
+
+ emb = new Discord.RichEmbed()
+
+ .setAuthor('the 8-ball says', 'https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/8-Ball_Pool.svg/500px-8-Ball_Pool.svg.png')
+ .setDescription('`' + s + '`');
+
+ msg.channel.send(RichEmbed = emb);
+ }
+}; \ No newline at end of file
diff --git a/commands/abee.js b/commands/abee.js
new file mode 100644
index 0000000..f46a06b
--- /dev/null
+++ b/commands/abee.js
@@ -0,0 +1,25 @@
+const ytdl = require('ytdl-core');
+
+module.exports = {
+ name: 'abee',
+ description: '',
+ async execute(msg, args, bot) {
+ if (msg.member.voiceChannel && !msg.guild.voiceConnection) {
+ const connection = await msg.member.voiceChannel.join();
+ const stream = ytdl('https://www.youtube.com/watch?v=lvdnhWhQBdo', {
+ filter: 'audioonly'
+ });
+ const dispatcher = connection.playStream(stream, {
+ volume: 0.5
+ });
+
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (msg.guild.voiceConnection) {
+ msg.reply('i\'m already playing that lol');
+ } else {
+ msg.reply('you need to join a voice channel first silly');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/botstatus.js b/commands/botstatus.js
new file mode 100644
index 0000000..6401571
--- /dev/null
+++ b/commands/botstatus.js
@@ -0,0 +1,15 @@
+// TODO: bot status
+
+module.exports = {
+ name: 'botstatus',
+ aliases: ['status', 'bs'],
+ description: '',
+ async execute(msg, args, bot) {
+ if (msg.member.hasPermission('KICK_MEMBERS')) {
+ m = args.join(' ');
+ bot.user.setActivity(m);
+ } else {
+ msg.reply('insufficent perms bruh');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/clear.js b/commands/clear.js
new file mode 100644
index 0000000..fe8e46f
--- /dev/null
+++ b/commands/clear.js
@@ -0,0 +1,46 @@
+module.exports = {
+ name: 'clear',
+ aliases: ['delete', 'del', 'c'],
+ description: '',
+ async execute(msg, args, bot) {
+ if (msg.member.hasPermission('MANAGE_MESSAGES')) {
+ if (!args) {
+ msg.reply('you haven\'t specified an amount of messages which should be deleted.').then(deleteNotificationMessage => {
+ deleteNotificationMessage.delete(1000);
+ });
+ } else if (isNaN(args)) {
+ msg.reply('the amount parameter isn\'t a number.').then(deleteNotificationMessage => {
+ deleteNotificationMessage.delete(1000);
+ });
+ } else if (args > 100) {
+ msg.reply('you can\'t delete more than 100 messages at once.').then(deleteNotificationMessage => {
+ deleteNotificationMessage.delete(1000);
+ });
+ } else if (args < 1) {
+ msg.reply('you have to delete at least 1 message.').then(deleteNotificationMessage => {
+ deleteNotificationMessage.delete(1000);
+ });
+ }
+ /*else if (msg.createdTimestamp > 1209600) {
+ msg.reply('due to discord rules, bots can only bulk delete messages that are under 14 days old :(')
+ } */
+ else {
+ var clearAmount = parseInt(args[0]) + 1;
+ // It took me so long to figure out why this was not really working. It would delete but an insane amount at a time.
+ // I realized that because it was getting parsed as a string, it would just add 1 to it so if I tried to delete 1
+ // message, it would delete 11 lol. Fixed by parsing as integer THEN adding one. 02:30 2020/04/03/2020
+
+ await msg.channel.fetchMessages({
+ limit: clearAmount
+ }).then(messages => { // I am on v11 discord.js
+ msg.channel.bulkDelete(messages);
+ });
+ msg.reply('it\'s been deleted ~uwu').then(deleteNotificationMessage => {
+ deleteNotificationMessage.delete(1000);
+ });
+ }
+ } else {
+ msg.reply('insufficent perms bruh');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/commands.js b/commands/commands.js
new file mode 100644
index 0000000..47af2e6
--- /dev/null
+++ b/commands/commands.js
@@ -0,0 +1,32 @@
+const Discord = require('discord.js');
+
+module.exports = {
+ name: 'commands',
+ description: '',
+ execute(msg, args, bot) {
+ let emb = new Discord.RichEmbed()
+
+ .setAuthor('s5nical\'s commands', `${msg.guild.iconURL}`)
+ .setThumbnail(`${msg.guild.iconURL}`)
+ .setDescription(`to view the commands in each group use:\n\`s5n!commands <group>\``)
+ .addField(`:shield: moderation`, '13 commands.', true)
+ .addField(`:robot: automation`, '5 commands.', true)
+ .addField(`:gem: features`, '8 commands.', true)
+ .addField(`:lock: permissions`, '10 commands.', true)
+ .addField(`:mag_right: search`, '14 commands.', true)
+ .addField(`:wrench: utlity`, '20 commands.', true)
+ .addField(`:information_source: information`, '6 commands.', true)
+ .addField(`:smirk: fun`, '17 commands.', true)
+ .addField(`:moneybag: economy`, '8 commands.', true)
+ .addField(`:game_die: gambling`, '3 commands.', true)
+ .addField(`:smiley: profiles`, '4 commands.', true)
+ .addField(`:hammer_pick: skills`, '4 commands.', true)
+ .addField(`:frame_photo: image`, '3 commands.', true)
+ .addField(`:blue_heart: reaction`, '8 commands.', true)
+ .addField(`:chart_with_upwards_trend: counter`, '9 commands.', true)
+ .addField(`:sailboat: ship`, '2 commands.', true)
+ .setColor(0xF97DAE);
+
+ msg.channel.send(RichEmbed = emb);
+ }
+}; \ No newline at end of file
diff --git a/commands/dm.js b/commands/dm.js
new file mode 100644
index 0000000..fcaeb0d
--- /dev/null
+++ b/commands/dm.js
@@ -0,0 +1,66 @@
+module.exports = {
+ name: 'dm',
+ description: '',
+ execute(msg, args, bot) {
+ if (msg.author) { // TODO: fix discord not evaluating args[1]
+ if (!msg.mentions.users.first() && !args[1]) {
+ msg.reply('you haven\'t specified a user or a message.');
+ } else if (!args[1]) {
+ msg.reply('you haven\'t specified anything to send.');
+ } else if (!msg.mentions.users.first()) {
+ msg.reply('you haven\'t specified anyone to send a dm to.');
+ } else {
+ var sendTo = msg.mentions.users.first().id;
+ var d = new Date(msg.createdTimestamp);
+
+ msg.guild.fetchMember(sendTo, false).then(messageUser => {
+ messageUser.send(args[0])
+
+ let emb = new Discord.RichEmbed()
+
+ //.setDescription(`to view the commands in each group use:\n\`s5n!commands <group>\``)
+ .addField(`message`, args[1], true)
+ .addField(`recipient`, args[0], true)
+ .addField(`time sent`, d)
+ .setColor(0xF97DAE);
+
+ msg.channel.send(RichEmbed = emb);
+ });
+ }
+
+ // This shit took about an hour and a half to debug because I couldn't figure out how to convert the first arguement into
+ // a user id. After getting help from discord.js Discord I fixed it for about 30 seconds at 21:26 and then I broke it again instantlly
+ // after. Then I tried to fix everything and I almost broke everything again but I realized it was broken because I did s5n!dm instead
+ // of s5n!test and I hadn't ported the code over from test to. 2020/04/02, 21:34
+ //where sendTo and d went
+ //args[0] = args[0].id
+ //msg.reply(args[0]);
+ // args[0];
+
+ // msg.reply(typeof args[0]) // for debugging
+
+ // const collector = new Discord.MessageCollector(msg.channel, m => m.author.id === msg.author.id, {
+ // time: 5000
+ // });
+ // msg.reply('timed out', 5000)
+ // //console.log(collector)
+
+ // collector.on('collect', message => {
+ // var messageText = message.content;
+
+ // if (msg.member.message) {
+ // msg.reply('received')
+ // }
+ // })
+
+ // msg.reply('what would you like to say?');
+ // if (msg.member.lastMessage) {
+ // var messageText = msg.member.lastMessage.content;
+ // }
+
+ // where send function went
+ } else {
+ msg.reply('insufficent perms bruh');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/emoji.js b/commands/emoji.js
new file mode 100644
index 0000000..5724895
--- /dev/null
+++ b/commands/emoji.js
@@ -0,0 +1,10 @@
+const emoji = require('emoji-random');
+
+module.exports = {
+ name: 'emoji',
+ aliases: ['moji'],
+ description: '',
+ execute(msg, args, bot) {
+ msg.reply(emoji.random());
+ }
+}; \ No newline at end of file
diff --git a/commands/fart.js b/commands/fart.js
new file mode 100644
index 0000000..de62889
--- /dev/null
+++ b/commands/fart.js
@@ -0,0 +1,80 @@
+module.exports = {
+ name: 'fart',
+ description: '',
+ async execute(msg, args, bot) {
+ if (msg.member.voiceChannel && !msg.guild.voiceConnection) {
+ const connection = await msg.member.voiceChannel.join();
+ var fartNum = Math.floor((Math.random() * 8) + 1);
+
+ if (fartNum == 1) {
+ msg.reply('you got fart 1, courtesy of Sin');
+ const dispatcher = connection.playFile('./assets/audio/farts/1.mp3', {
+ volume: 0.5
+ });
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (fartNum == 2) {
+ msg.reply('you got fart 2, courtesy of Sin');
+ const dispatcher = connection.playFile('./assets/audio/farts/2.mp3', {
+ volume: 0.5
+ });
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (fartNum == 3) {
+ msg.reply('you got fart 3, courtesy of Sin');
+ const dispatcher = connection.playFile('./assets/audio/farts/3.mp3', {
+ volume: 0.5
+ });
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (fartNum == 4) {
+ msg.reply('you got fart 4, courtesy of Sin');
+ const dispatcher = connection.playFile('./assets/audio/farts/4.mp3', {
+ volume: 0.5
+ });
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (fartNum == 5) {
+ msg.reply('you got fart 5, courtesy of Sin');
+ const dispatcher = connection.playFile('./assets/audio/farts/5.mp3', {
+ volume: 0.5
+ });
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (fartNum == 6) {
+ msg.reply('you got fart 6, courtesy of nick');
+ const dispatcher = connection.playFile('./assets/audio/farts/6.mp3', {
+ volume: 0.5
+ });
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (fartNum == 7) {
+ msg.reply('you got fart 7, courtesy of nick');
+ const dispatcher = connection.playFile('./assets/audio/farts/7.mp3', {
+ volume: 0.5
+ });
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (fartNum == 8) {
+ msg.reply('you got fart 8, courtesy of nick');
+ const dispatcher = connection.playFile('./assets/audio/farts/8.mp3', {
+ volume: 0.5
+ });
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ }
+ } else if (msg.guild.voiceConnection) {
+ msg.reply('i\'m already playing that lol');
+ } else {
+ msg.reply('you need to join a voice channel first silly');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/help.js b/commands/help.js
new file mode 100644
index 0000000..b963301
--- /dev/null
+++ b/commands/help.js
@@ -0,0 +1,37 @@
+const Discord = require('discord.js');
+
+module.exports = {
+ name: 'help',
+ description: '',
+ execute(msg, args, bot) {
+ if (!args.length) {
+ let emb = new Discord.RichEmbed()
+
+ .setThumbnail(`${msg.guild.iconURL}`)
+ .setDescription(`
+ **command list**\nlink not yet set lol\n\n**categories list:**\n\`s5n!help <commands category>\`\n\n**full list**\n\`s5n!commands\`
+ `)
+ .setColor(0xF97DAE);
+
+ msg.channel.send(RichEmbed = emb);
+ } else if (args[0] == 'quotes' || args[0] == 'quote') {
+ let emb = new Discord.RichEmbed()
+
+ .setTitle('quotes -> quote command: (server only)')
+ .setThumbnail(`${msg.guild.iconURL}`)
+ .setDescription(`says random quote from adventure time`)
+ .addField('details', `says random quote from adventure time
+no argument: says a quote from any of the adventure time characters.
+finn: says a quote from finn from adventure time.
+jake: says a quote from jake from adventure time.
+ice-king: says a quote from ice king from adventure time.`, false)
+ .addField(`format`, `\`s5n!quote [finn | jake | ice-king]\``, true)
+ .addField('examples', `\`s5n!quote\` - says a random quote any of the adventure time characters
+\`s5n!quote finn\` - says a quote from finn from adventure time`, false)
+ .setFooter('<> - required, | - either/or, {} - optional')
+ .setColor(0xF97DAE);
+
+ msg.channel.send(RichEmbed = emb);
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/join.js b/commands/join.js
new file mode 100644
index 0000000..b07e6c7
--- /dev/null
+++ b/commands/join.js
@@ -0,0 +1,15 @@
+module.exports = {
+ name: 'join',
+ aliases: ['j'],
+ description: '',
+ execute(msg, args, bot) {
+ if (!msg.guild.voiceConnection && msg.member.voiceChannel) {
+ msg.member.voiceChannel.join();
+ msg.reply('succesfully joined voice channel');
+ } else if (msg.guild.voiceConnection) {
+ msg.reply('i\'m already in voice channel');
+ } else if (!msg.member.voiceChannel) {
+ msg.reply('you\'re not in a voice channel');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/leave.js b/commands/leave.js
new file mode 100644
index 0000000..6965069
--- /dev/null
+++ b/commands/leave.js
@@ -0,0 +1,12 @@
+module.exports = {
+ name: 'leave',
+ description: '',
+ execute(msg, args, bot) {
+ if (msg.guild.voiceConnection) {
+ msg.guild.voiceConnection.disconnect();
+ msg.reply('succesfully left voice channel');
+ } else {
+ msg.reply('i\'m not in a voice channel');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/membercount.js b/commands/membercount.js
new file mode 100644
index 0000000..8edc030
--- /dev/null
+++ b/commands/membercount.js
@@ -0,0 +1,8 @@
+module.exports = {
+ name: 'membercount',
+ aliases: ['memberc', 'mcount', 'mc'],
+ description: '',
+ execute(msg, args, bot) {
+ msg.reply(`there are **${msg.guild.memberCount}** members in **${msg.guild.name}**`);
+ }
+}; \ No newline at end of file
diff --git a/commands/ping.js b/commands/ping.js
new file mode 100644
index 0000000..7837180
--- /dev/null
+++ b/commands/ping.js
@@ -0,0 +1,21 @@
+const Discord = require('discord.js');
+
+module.exports = {
+ name: 'ping',
+ description: '',
+ execute(msg, args, bot) {
+ const t = Date.now();
+
+ msg.channel.send('plz wait..').then(m => {
+ m.edit(`** **`);
+
+ const n = Date.now();
+ let emb = new Discord.RichEmbed()
+
+ .setDescription(`pong! s5nical's is \`${n - t}ms\`. heartbeat \`${bot.ping}ms\`.`)
+ .setColor(0xF97DAE);
+
+ msg.channel.send(RichEmbed = emb);
+ });
+ }
+}; \ No newline at end of file
diff --git a/commands/psycho.js b/commands/psycho.js
new file mode 100644
index 0000000..9ecc8a1
--- /dev/null
+++ b/commands/psycho.js
@@ -0,0 +1,25 @@
+const ytdl = require('ytdl-core');
+
+module.exports = {
+ name: 'psycho',
+ description: '',
+ async execute(msg, args, bot) {
+ if (msg.member.voiceChannel && !msg.guild.voiceConnection) {
+ const connection = await msg.member.voiceChannel.join();
+ const stream = ytdl('https://www.youtube.com/watch?v=fnd_HSmAODs', {
+ filter: 'audioonly'
+ });
+ const dispatcher = connection.playStream(stream, {
+ volume: 0.5
+ });
+
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (msg.guild.voiceConnection) {
+ msg.reply('i\'m already playing that lol');
+ } else {
+ msg.reply('you need to join a voice channel first silly');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/quote.js b/commands/quote.js
new file mode 100644
index 0000000..133c9eb
--- /dev/null
+++ b/commands/quote.js
@@ -0,0 +1,18 @@
+const atquotes = require('at-quotes');
+
+module.exports = {
+ name: 'quote',
+ aliases: ['quotes'],
+ description: '',
+ execute(msg, args, bot) {
+ if (!args.length) {
+ msg.reply(atquotes.getQuote());
+ } else if (args[0] == 'finn') {
+ msg.reply(atquotes.getFinnQuote());
+ } else if (args[0] == 'jake') {
+ msg.reply(atquotes.getJakeQuote());
+ } else if (args[0] == 'ice-king') {
+ msg.reply(atquotes.getIceKingQuote());
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/reboot.js b/commands/reboot.js
new file mode 100644
index 0000000..f5ec9eb
--- /dev/null
+++ b/commands/reboot.js
@@ -0,0 +1,10 @@
+module.exports = {
+ name: 'reboot',
+ aliases: ['r'],
+ description: '',
+ execute(msg, args, bot) {
+ msg.member.voiceChannel.join();
+ msg.member.voiceChannel.leave();
+ msg.reply('reboot finished lol');
+ }
+}; \ No newline at end of file
diff --git a/commands/say.js b/commands/say.js
new file mode 100644
index 0000000..a27558f
--- /dev/null
+++ b/commands/say.js
@@ -0,0 +1,11 @@
+module.exports = {
+ name: 'say',
+ description: '',
+ execute(msg, args, bot) {
+ if (msg.member.hasPermission('KICK_MEMBERS')) {
+ m = args.join(' ');
+ msg.channel.send(m);
+ msg.delete();
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/server.js b/commands/server.js
new file mode 100644
index 0000000..220857d
--- /dev/null
+++ b/commands/server.js
@@ -0,0 +1,26 @@
+const Discord = require('discord.js');
+
+module.exports = {
+ name: 'server',
+ aliases: ['serverinfo'],
+ description: '',
+ execute(msg) {
+ var o = msg.guild.members.filter(m => m.presence.status === 'online').size;
+
+ emb = new Discord.RichEmbed()
+
+ .setAuthor(`${msg.guild.name} - ${msg.guild.id}`, `${msg.guild.iconURL}`, `https://discordapp.com/channels/${msg.guild.id}/${msg.guild.id}`)
+ .setDescription(`here\'s all the information on \`${msg.guild.name}\``)
+ .setThumbnail(`${msg.guild.iconURL}`)
+ .addField('owner', `${msg.guild.owner}`, false)
+ .addField(`members [${msg.guild.memberCount}]`, `${o} members are online.`, true)
+ .addField('region', `${msg.guild.region}`, true)
+ .addField('text channels', `${msg.guild.channels.filter(c => c.type === 'text').size}`, true)
+ .addField('voice channels', `${msg.guild.channels.filter(c => c.type === 'voice').size}`, true)
+ .addField('guild created', `${msg.guild.createdAt}`, false)
+ .addField('s5nical joined', `${msg.guild.members.get('695107550403756192').joinedAt}`)
+ .setColor(0xF97DAE);
+
+ msg.channel.send(RichEmbed = emb);
+ }
+}; \ No newline at end of file
diff --git a/commands/squeak.js b/commands/squeak.js
new file mode 100644
index 0000000..a1c4046
--- /dev/null
+++ b/commands/squeak.js
@@ -0,0 +1,20 @@
+module.exports = {
+ name: 'squeak',
+ description: '',
+ async execute(msg, args, bot) {
+ if (msg.member.voiceChannel && !msg.guild.voiceConnection) {
+ const connection = await msg.member.voiceChannel.join();
+ const dispatcher = connection.playFile('./assets/audio/squeak.wav', {
+ volume: 0.2
+ });
+
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (msg.guild.voiceConnection) {
+ msg.reply('i\'m already playing that lol');
+ } else {
+ msg.reply('you need to join a voice channel first silly');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/uhhhh.js b/commands/uhhhh.js
new file mode 100644
index 0000000..3c84d8d
--- /dev/null
+++ b/commands/uhhhh.js
@@ -0,0 +1,20 @@
+module.exports = {
+ name: 'uhhhh',
+ description: '',
+ async execute(msg, args, bot) {
+ if (msg.member.voiceChannel && !msg.guild.voiceConnection) {
+ const connection = await msg.member.voiceChannel.join();
+ const dispatcher = connection.playFile('./assets/audio/uhhhh.wav', {
+ volume: 0.5
+ });
+
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (msg.guild.voiceConnection) {
+ msg.reply('i\'m already playing that lol');
+ } else {
+ msg.reply('you need to join a voice channel first silly');
+ }
+ }
+}; \ No newline at end of file
diff --git a/commands/wahoo.js b/commands/wahoo.js
new file mode 100644
index 0000000..4745874
--- /dev/null
+++ b/commands/wahoo.js
@@ -0,0 +1,20 @@
+module.exports = {
+ name: 'wahoo',
+ description: '',
+ async execute(msg, args, bot) {
+ if (msg.member.voiceChannel && !msg.guild.voiceConnection) {
+ const connection = await msg.member.voiceChannel.join();
+ const dispatcher = connection.playFile('./assets/audio/wahoo.mp3', {
+ volume: 1.0
+ });
+
+ dispatcher.on('end', () => {
+ msg.member.voiceChannel.leave();
+ });
+ } else if (msg.guild.voiceConnection) {
+ msg.reply('i\'m already playing that lol');
+ } else {
+ msg.reply('you need to join a voice channel first silly');
+ }
+ }
+}; \ No newline at end of file