Repository: TheOdinProject/odin-bot-v2
Pull request #222 (2022-03-18 19:49:17)

update bot command prefix
This commit:
- Updates the bot prefix for commands to be `!`


Patch:
diff --git a/botCommands/bootcamps.js b/botCommands/bootcamps.js
index 2bb4f3b..eaae9c8 100644
--- a/botCommands/bootcamps.js
+++ b/botCommands/bootcamps.js
@@ -1,7 +1,7 @@
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/bootcamps(?!\S)/,
+  regex: /(?<!\S)!bootcamps(?!\S)/,
   cb: () => 'Friends don\'t let friends commit to bootcamps without being informed.  https://twitter.com/lzsthw/status/1212284566431576069',
 };
 
diff --git a/botCommands/callbacks.js b/botCommands/callbacks.js
index 327b2e4..fea5078 100644
--- a/botCommands/callbacks.js
+++ b/botCommands/callbacks.js
@@ -1,7 +1,7 @@
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/callbacks(?!\S)/,
+  regex: /(?<!\S)!callbacks(?!\S)/,
   cb: () => '**DID SOMEONE SAY CALLBACKS?: https://briggs.dev/blog/understanding-callbacks**',
 };
 
diff --git a/botCommands/carlosQuote.js b/botCommands/carlosQuote.js
index 258c259..b7b6e89 100644
--- a/botCommands/carlosQuote.js
+++ b/botCommands/carlosQuote.js
@@ -1,7 +1,7 @@
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/cqg(?!\S)/,
+  regex: /(?<!\S)!cqg(?!\S)/,
   cb: () => `**Here is a great quote about "Asking Questions in the TOP Discord"**
     "Here's my take on asking questions here:
     Naturally, we welcome them. But we will hold you accountable when you ask a question that is easily researched. Not because we think you're a jerk. But because independent research is so critical to your continued learning.
diff --git a/botCommands/debug.js b/botCommands/debug.js
index 98c4f22..d61bc28 100644
--- a/botCommands/debug.js
+++ b/botCommands/debug.js
@@ -2,7 +2,7 @@ const Discord = require('discord.js');
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/debug(?!\S)/,
+  regex: /(?<!\S)!debug(?!\S)/,
   cb: () => {
     const template = new Discord.MessageEmbed()
       .setColor('#cc9543')
diff --git a/botCommands/faq.js b/botCommands/faq.js
index 3ba2892..7442415 100644
--- a/botCommands/faq.js
+++ b/botCommands/faq.js
@@ -2,7 +2,7 @@ const Discord = require('discord.js');
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/faq(?!\S)/,
+  regex: /(?<!\S)!faq(?!\S)/,
   cb: async ({ mentions }) => {
     let users = '';
     const mentionedUsers = Array.from(mentions.users.values());
diff --git a/botCommands/help.js b/botCommands/help.js
index e883cab..5c85c9b 100644
--- a/botCommands/help.js
+++ b/botCommands/help.js
@@ -2,7 +2,7 @@ const Discord = require('discord.js');
 const { registerBotCommand } = require('../botEngine.js');
 
 const help = {
-  regex: /(?<!\S)\/help(?!\S)/,
+  regex: /(?<!\S)!help(?!\S)/,
   cb: () => {
     const helpEmbed = new Discord.MessageEmbed()
       .setColor('#cc9543')
@@ -15,7 +15,7 @@ const help = {
       )
       .addField(
         'Leaderboard',
-        'View the points leaderboard with `/leaderboard`. \n\n Modify it with `n=` and `start=` i.e. `/leaderboard n=25 start=30`.',
+        'View the points leaderboard with `!leaderboard`. \n\n Modify it with `n=` and `start=` i.e. `!leaderboard n=25 start=30`.',
         true,
       )
       .addField(
@@ -29,7 +29,7 @@ const help = {
 };
 
 const code = {
-  regex: /(?<!\S)\/code(?!\S)/,
+  regex: /(?<!\S)!code(?!\S)/,
   cb: ({ mentions }) => {
     let users = '';
     if (mentions.users) {
@@ -48,7 +48,7 @@ const code = {
       .addField(
         'Sharing Code on Discord',
         `To write multiple lines of code with language syntax highlighting, use three backticks (<https://i.stack.imgur.com/ETTnT.jpg>), followed by the language.
-      
+
 \\\`\\\`\\\`js
 [Put your JavaScript Code here!]
 \\\`\\\`\\\`
diff --git a/botCommands/mv.js b/botCommands/mv.js
index 70ec98f..e26149f 100644
--- a/botCommands/mv.js
+++ b/botCommands/mv.js
@@ -1,7 +1,7 @@
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/mv(?!\S)/,
+  regex: /(?<!\S)!mv(?!\S)/,
   cb: () => "Microverse is using The Odin Project's licensed content without permission. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/781170792095809547",
 };
 
diff --git a/botCommands/notes.js b/botCommands/notes.js
index 7e8702f..a847d44 100644
--- a/botCommands/notes.js
+++ b/botCommands/notes.js
@@ -1,7 +1,7 @@
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/notes(?!\S)/,
+  regex: /(?<!\S)!notes(?!\S)/,
   cb: () => 'To note, or not to note, that is the question. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/768161823366578176',
 };
 
diff --git a/botCommands/points.js b/botCommands/points.js
index 5039dc8..89d652a 100644
--- a/botCommands/points.js
+++ b/botCommands/points.js
@@ -194,7 +194,7 @@ const awardPoints = {
 registerBotCommand(awardPoints.regex, awardPoints.cb);
 
 const points = {
-  regex: /(?<!\S)\/points(?!\S)/,
+  regex: /(?<!\S)!points(?!\S)/,
   async cb({
     content, author, client, channel, guild,
   }) {
@@ -209,7 +209,7 @@ const points = {
         if (userPoints) {
           const username = guild.members.cache
             .get(userPoints.discord_id)
-            .displayName.replace(/\//g, '\\/');
+            .displayName.replace(/!/g, '!');
           channel.send(`${username} has ${userPoints.points} points!`);
         }
       } catch (err) {
@@ -222,7 +222,7 @@ const points = {
 registerBotCommand(points.regex, points.cb);
 
 const leaderboard = {
-  regex: /(?<!\S)\/leaderboard(?!\S)/,
+  regex: /(?<!\S)!leaderboard(?!\S)/,
   async cb({ guild, content }) {
     try {
       const sEquals = content
@@ -246,7 +246,7 @@ const leaderboard = {
         if (user) {
           const member = guild.members.cache.get(user.discord_id);
           const username = member
-            ? member.displayName.replace(/\//g, '\\/')
+            ? member.displayName.replace(/!/g, '!')
             : undefined;
           if (username) {
             if (i === 0) {
diff --git a/botCommands/shrug.js b/botCommands/shrug.js
index bf6b2e6..e45051b 100644
--- a/botCommands/shrug.js
+++ b/botCommands/shrug.js
@@ -1,7 +1,7 @@
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/[shurg]{5}(?!\S)/,
+  regex: /(?<!\S)![shurg]{5}(?!\S)/,
   cb: ({ content }) => {
     function onlyUnique(value, index, self) {
       return self.indexOf(value) === index;
diff --git a/botCommands/simpleCommands.js b/botCommands/simpleCommands.js
index 017d7a7..081cf68 100644
--- a/botCommands/simpleCommands.js
+++ b/botCommands/simpleCommands.js
@@ -2,25 +2,25 @@ const Discord = require('discord.js');
 const { registerBotCommand } = require('../botEngine.js');
 
 const hug = {
-  regex: /(?<!\S)\/hug(?!\S)/,
+  regex: /(?<!\S)!hug(?!\S)/,
   cb: () => '⊂(´・ω・｀⊂)',
 };
 registerBotCommand(hug.regex, hug.cb);
 
 const smart = {
-  regex: /(?<!\S)\/smart(?!\S)/,
+  regex: /(?<!\S)!smart(?!\S)/,
   cb: () => String.raw`f(ಠ‿↼)z`,
 };
 registerBotCommand(smart.regex, smart.cb);
 
 const lenny = {
-  regex: /(?<!\S)\/lenny(?!\S)/,
+  regex: /(?<!\S)!lenny(?!\S)/,
   cb: () => String.raw`( ͡° ͜ʖ ͡°)`,
 };
 registerBotCommand(lenny.regex, lenny.cb);
 
 const fu = {
-  regex: /(?<!\S)\/fu(?!\S)/,
+  regex: /(?<!\S)!fu(?!\S)/,
   cb: async (message) => {
     await message.reply('http://media.riffsy.com/images/636a97aa416ad674eb2b72d4a6e9ad6c/tenor.gif');
     return null;
@@ -29,7 +29,7 @@ const fu = {
 registerBotCommand(fu.regex, fu.cb);
 
 const question = {
-  regex: /(?<!\S)\/question(?!\S)/,
+  regex: /(?<!\S)!question(?!\S)/,
   cb: () => {
     const questionEmbed = new Discord.MessageEmbed()
       .setColor('#cc9543')
@@ -42,7 +42,7 @@ const question = {
 registerBotCommand(question.regex, question.cb);
 
 const data = {
-  regex: /(?<!\S)\/data(?!\S)/,
+  regex: /(?<!\S)!data(?!\S)/,
   cb: () => {
     const dataEmbed = new Discord.MessageEmbed()
       .setTitle('Don’t ask to ask!')
@@ -51,18 +51,18 @@ const data = {
       // this weird formating is needed because of some indentation on mobile
       .setDescription(`
 Instead of asking if anyone can help you, ask your question outright so people can help you!
-      
+
 **Bad**: "Hey, does anyone know how to set CSS styles with Javascript?"
-    
-**Good**: 
+
+**Good**:
 "Hey, I'm having trouble setting CSS styles via Javascript.
-  
-Here's my code: 
+
+Here's my code:
 \`\`\`Code snippet\`\`\`\
-  
+
 And here is the error I'm receiving:
 \`Cannot set attribute 'style' of null\` "
-  
+
 **https://www.dontasktoask.com/**
         `);
 
@@ -72,39 +72,39 @@ And here is the error I'm receiving:
 registerBotCommand(data.regex, data.cb);
 
 const google = {
-  regex: /\B\/google\s+.+/,
+  regex: /\B!google\s+.+/,
   cb: ({ content }) => {
     const transform = (transformContent) => {
       const query = transformContent.split(' ').map(encodeURIComponent).join('+');
       return `**This query might help you find what you're looking for >** <https://google.com/search?q=${query}>`;
     };
 
-    const query = content.match(/\B\/google\s+(.+)/)[1];
+    const query = content.match(/\B!google\s+(.+)/)[1];
     return `${transform(query)}`;
   },
 };
 registerBotCommand(google.regex, google.cb);
 
 const dab = {
-  regex: /(?<!\S)\/dab(?!\S)/,
+  regex: /(?<!\S)!dab(?!\S)/,
   cb: () => 'https://tenor.com/view/bettywhite-dab-gif-5044603',
 };
 registerBotCommand(dab.regex, dab.cb);
 
 const motivate = {
-  regex: /(?<!\S)\/motivate(?!\S)/,
+  regex: /(?<!\S)!motivate(?!\S)/,
   cb: () => 'Don\'t give up! https://www.youtube.com/watch?v=KxGRhd_iWuE',
 };
 registerBotCommand(motivate.regex, motivate.cb);
 
 const justDoIt = {
-  regex: /(?<!\S)\/justdoit(?!\S)/,
+  regex: /(?<!\S)!justdoit(?!\S)/,
   cb: () => 'What are you waiting for?! https://www.youtube.com/watch?v=ZXsQAXx_ao0',
 };
 registerBotCommand(justDoIt.regex, justDoIt.cb);
 
 const xy = {
-  regex: /(?<!\S)\/xy(?!\S)/,
+  regex: /(?<!\S)!xy(?!\S)/,
   cb: () => 'What problem are you *really* trying to solve? Check out this article to help others better understand your question: <https://xyproblem.info/>',
 };
 registerBotCommand(xy.regex, xy.cb);
diff --git a/botCommands/time.js b/botCommands/time.js
index 5f3b9a2..c3a4e6f 100644
--- a/botCommands/time.js
+++ b/botCommands/time.js
@@ -1,7 +1,7 @@
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/time(?!\S)/,
+  regex: /(?<!\S)!time(?!\S)/,
   cb: async ({ mentions }) => {
     let users = '';
     const mentionedUsers = Array.from(mentions.users.values());
diff --git a/botCommands/top.js b/botCommands/top.js
index ebf5d9b..90e182c 100644
--- a/botCommands/top.js
+++ b/botCommands/top.js
@@ -1,7 +1,7 @@
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/top(?!\S)/,
+  regex: /(?<!\S)!top(?!\S)/,
   cb: () => 'The Odin Project. Your Career in Web Development Starts Here. <https://www.theodinproject.com> ',
 };
 
diff --git a/botCommands/windows.js b/botCommands/windows.js
index 4ba3b23..1852d29 100644
--- a/botCommands/windows.js
+++ b/botCommands/windows.js
@@ -2,13 +2,13 @@ const Discord = require('discord.js');
 const { registerBotCommand } = require('../botEngine.js');
 
 const command = {
-  regex: /(?<!\S)\/windows(?!\S)/,
+  regex: /(?<!\S)!windows(?!\S)/,
   cb: () => {
     const windowsEmbed = new Discord.MessageEmbed()
       .setColor('#cc9543')
       .setTitle('Windows')
       .setDescription('**The Odin Project does not support Windows, WSL, or any OS outside of our recommendations**. We are happy to assist with any questions about installing a VM or dual booting Linux. <https://www.theodinproject.com/courses/foundations/lessons/installation-overview#os-options>')
-      .setURL('https://www.theodinproject.com/courses/foundations/lessons/installation-overview#os-options');
+      .setURL('https://www.theodinproject.com/paths/foundations/courses/foundations/lessons/installation-overview#os-options');
 
     return { embeds: [windowsEmbed] };
   },


Test patch:
diff --git a/botCommands/__snapshots__/bootcamps.test.js.snap b/botCommands/__snapshots__/bootcamps.test.js.snap
index be78332..4eb0120 100644
--- a/botCommands/__snapshots__/bootcamps.test.js.snap
+++ b/botCommands/__snapshots__/bootcamps.test.js.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/bootcamps callback returns correct output 1`] = `"Friends don't let friends commit to bootcamps without being informed.  https://twitter.com/lzsthw/status/1212284566431576069"`;
+exports[`!bootcamps callback returns correct output 1`] = `"Friends don't let friends commit to bootcamps without being informed.  https://twitter.com/lzsthw/status/1212284566431576069"`;
diff --git a/botCommands/__snapshots__/callbacks.test.js.snap b/botCommands/__snapshots__/callbacks.test.js.snap
index 5436d4e..e831ee1 100644
--- a/botCommands/__snapshots__/callbacks.test.js.snap
+++ b/botCommands/__snapshots__/callbacks.test.js.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/callbacks callback should return the correct output 1`] = `"**DID SOMEONE SAY CALLBACKS?: https://briggs.dev/blog/understanding-callbacks**"`;
+exports[`!callbacks callback should return the correct output 1`] = `"**DID SOMEONE SAY CALLBACKS?: https://briggs.dev/blog/understanding-callbacks**"`;
diff --git a/botCommands/__snapshots__/carlosQuote.test.js.snap b/botCommands/__snapshots__/carlosQuote.test.js.snap
index 57c6ca7..e5252b2 100644
--- a/botCommands/__snapshots__/carlosQuote.test.js.snap
+++ b/botCommands/__snapshots__/carlosQuote.test.js.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/cqg snapshot should return the correct output 1`] = `
+exports[`!cqg snapshot should return the correct output 1`] = `
 "**Here is a great quote about \\"Asking Questions in the TOP Discord\\"**
     \\"Here's my take on asking questions here:
     Naturally, we welcome them. But we will hold you accountable when you ask a question that is easily researched. Not because we think you're a jerk. But because independent research is so critical to your continued learning.
diff --git a/botCommands/__snapshots__/debug.test.js.snap b/botCommands/__snapshots__/debug.test.js.snap
index 3a6596d..bcd70d4 100644
--- a/botCommands/__snapshots__/debug.test.js.snap
+++ b/botCommands/__snapshots__/debug.test.js.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/debug callback should return the correct output 1`] = `
+exports[`!debug callback should return the correct output 1`] = `
 Object {
   "embeds": Array [
     Object {
diff --git a/botCommands/__snapshots__/help.test.js.snap b/botCommands/__snapshots__/help.test.js.snap
index cdc84ff..31d1419 100644
--- a/botCommands/__snapshots__/help.test.js.snap
+++ b/botCommands/__snapshots__/help.test.js.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/code snapshot returns correct output 1`] = `
+exports[`!code snapshot returns correct output 1`] = `
 Object {
   "embeds": Array [
     Object {
@@ -12,7 +12,7 @@ Object {
           "inline": false,
           "name": "Sharing Code on Discord",
           "value": "To write multiple lines of code with language syntax highlighting, use three backticks (<https://i.stack.imgur.com/ETTnT.jpg>), followed by the language.
-      
+
 \\\\\`\\\\\`\\\\\`js
 [Put your JavaScript Code here!]
 \\\\\`\\\\\`\\\\\`
@@ -50,7 +50,7 @@ For \`inline code\` use one backtick (no syntax highlighting):
 }
 `;
 
-exports[`/code snapshot returns correct output 2`] = `
+exports[`!code snapshot returns correct output 2`] = `
 Object {
   "embeds": Array [
     Object {
@@ -62,7 +62,7 @@ Object {
           "inline": false,
           "name": "Sharing Code on Discord",
           "value": "To write multiple lines of code with language syntax highlighting, use three backticks (<https://i.stack.imgur.com/ETTnT.jpg>), followed by the language.
-      
+
 \\\\\`\\\\\`\\\\\`js
 [Put your JavaScript Code here!]
 \\\\\`\\\\\`\\\\\`
@@ -100,7 +100,7 @@ For \`inline code\` use one backtick (no syntax highlighting):
 }
 `;
 
-exports[`/code snapshot returns correct output 3`] = `
+exports[`!code snapshot returns correct output 3`] = `
 Object {
   "embeds": Array [
     Object {
@@ -112,7 +112,7 @@ Object {
           "inline": false,
           "name": "Sharing Code on Discord",
           "value": "To write multiple lines of code with language syntax highlighting, use three backticks (<https://i.stack.imgur.com/ETTnT.jpg>), followed by the language.
-      
+
 \\\\\`\\\\\`\\\\\`js
 [Put your JavaScript Code here!]
 \\\\\`\\\\\`\\\\\`
@@ -150,7 +150,7 @@ For \`inline code\` use one backtick (no syntax highlighting):
 }
 `;
 
-exports[`/code snapshot returns correct output 4`] = `
+exports[`!code snapshot returns correct output 4`] = `
 Object {
   "embeds": Array [
     Object {
@@ -162,7 +162,7 @@ Object {
           "inline": false,
           "name": "Sharing Code on Discord",
           "value": "To write multiple lines of code with language syntax highlighting, use three backticks (<https://i.stack.imgur.com/ETTnT.jpg>), followed by the language.
-      
+
 \\\\\`\\\\\`\\\\\`js
 [Put your JavaScript Code here!]
 \\\\\`\\\\\`\\\\\`
@@ -200,7 +200,7 @@ For \`inline code\` use one backtick (no syntax highlighting):
 }
 `;
 
-exports[`/help snapshot should return the correct output 1`] = `
+exports[`!help snapshot should return the correct output 1`] = `
 Object {
   "embeds": Array [
     Object {
@@ -219,9 +219,9 @@ Object {
         Object {
           "inline": true,
           "name": "Leaderboard",
-          "value": "View the points leaderboard with \`/leaderboard\`. 
+          "value": "View the points leaderboard with \`!leaderboard\`. 
 
- Modify it with \`n=\` and \`start=\` i.e. \`/leaderboard n=25 start=30\`.",
+ Modify it with \`n=\` and \`start=\` i.e. \`!leaderboard n=25 start=30\`.",
         },
         Object {
           "inline": true,
diff --git a/botCommands/__snapshots__/mv.test.js.snap b/botCommands/__snapshots__/mv.test.js.snap
index 5494476..8046a8f 100644
--- a/botCommands/__snapshots__/mv.test.js.snap
+++ b/botCommands/__snapshots__/mv.test.js.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/mv callback returns correct output 1`] = `"Microverse is using The Odin Project's licensed content without permission. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/781170792095809547"`;
+exports[`!mv callback returns correct output 1`] = `"Microverse is using The Odin Project's licensed content without permission. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/781170792095809547"`;
diff --git a/botCommands/__snapshots__/notes.test.js.snap b/botCommands/__snapshots__/notes.test.js.snap
index d9b8377..5bde297 100644
--- a/botCommands/__snapshots__/notes.test.js.snap
+++ b/botCommands/__snapshots__/notes.test.js.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/notes callback returns correct output 1`] = `"To note, or not to note, that is the question. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/768161823366578176"`;
+exports[`!notes callback returns correct output 1`] = `"To note, or not to note, that is the question. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/768161823366578176"`;
diff --git a/botCommands/__snapshots__/points.test.js.snap b/botCommands/__snapshots__/points.test.js.snap
index c6ff073..840878b 100644
--- a/botCommands/__snapshots__/points.test.js.snap
+++ b/botCommands/__snapshots__/points.test.js.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/leaderboard callback returns correct output 1`] = `
+exports[`!leaderboard callback returns correct output 1`] = `
 "**leaderboard** 
 1 - user100 [1000 points] :tada: 
 2 - user101 [999 points] 
@@ -10,7 +10,7 @@ exports[`/leaderboard callback returns correct output 1`] = `
 "
 `;
 
-exports[`/leaderboard callback returns correct output 2`] = `
+exports[`!leaderboard callback returns correct output 2`] = `
 "**leaderboard** 
 1 - user100 [1000 points] :tada: 
 2 - user101 [999 points] 
@@ -18,14 +18,14 @@ exports[`/leaderboard callback returns correct output 2`] = `
 "
 `;
 
-exports[`/leaderboard callback returns correct output 3`] = `
+exports[`!leaderboard callback returns correct output 3`] = `
 "**leaderboard** 
 3 - user102 [998 points] 
 4 - user103 [997 points] 
 "
 `;
 
-exports[`/leaderboard callback returns correct output 4`] = `
+exports[`!leaderboard callback returns correct output 4`] = `
 "**leaderboard** 
 3 - user102 [998 points] 
 4 - user103 [997 points] 
@@ -33,24 +33,24 @@ exports[`/leaderboard callback returns correct output 4`] = `
 "
 `;
 
-exports[`/leaderboard callback returns correct output 5`] = `
+exports[`!leaderboard callback returns correct output 5`] = `
 "**leaderboard** 
 1 - user100 [1000 points] :tada: 
 2 - user101 [999 points] 
 "
 `;
 
-exports[`/leaderboard callback returns correct output 6`] = `
+exports[`!leaderboard callback returns correct output 6`] = `
 "**leaderboard** 
 "
 `;
 
-exports[`/leaderboard callback returns correct output 7`] = `
+exports[`!leaderboard callback returns correct output 7`] = `
 "**leaderboard** 
 "
 `;
 
-exports[`/leaderboard callback returns correct output 8`] = `
+exports[`!leaderboard callback returns correct output 8`] = `
 "**leaderboard** 
 "
 `;
diff --git a/botCommands/__snapshots__/shrug.test.js.snap b/botCommands/__snapshots__/shrug.test.js.snap
index ca0d22c..9b7e6d7 100644
--- a/botCommands/__snapshots__/shrug.test.js.snap
+++ b/botCommands/__snapshots__/shrug.test.js.snap
@@ -1,241 +1,241 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/shrug callback returns correct output 1`] = `"¯\\\\_(ツ)_/¯"`;
+exports[`!shrug callback returns correct output 1`] = `"¯\\\\_(ツ)_/¯"`;
 
-exports[`/shrug callback returns correct output 2`] = `"_(¯\\\\ツ)_/¯"`;
+exports[`!shrug callback returns correct output 2`] = `"_(¯\\\\ツ)_/¯"`;
 
-exports[`/shrug callback returns correct output 3`] = `"ツ¯\\\\_()_/¯"`;
+exports[`!shrug callback returns correct output 3`] = `"ツ¯\\\\_()_/¯"`;
 
-exports[`/shrug callback returns correct output 4`] = `"¯\\\\ツ_()_/¯"`;
+exports[`!shrug callback returns correct output 4`] = `"¯\\\\ツ_()_/¯"`;
 
-exports[`/shrug callback returns correct output 5`] = `"_(ツ¯\\\\)_/¯"`;
+exports[`!shrug callback returns correct output 5`] = `"_(ツ¯\\\\)_/¯"`;
 
-exports[`/shrug callback returns correct output 6`] = `"ツ_(¯\\\\)_/¯"`;
+exports[`!shrug callback returns correct output 6`] = `"ツ_(¯\\\\)_/¯"`;
 
-exports[`/shrug callback returns correct output 7`] = `")__(¯\\\\ツ/¯"`;
+exports[`!shrug callback returns correct output 7`] = `")__(¯\\\\ツ/¯"`;
 
-exports[`/shrug callback returns correct output 8`] = `"_()_¯\\\\ツ/¯"`;
+exports[`!shrug callback returns correct output 8`] = `"_()_¯\\\\ツ/¯"`;
 
-exports[`/shrug callback returns correct output 9`] = `"¯\\\\)__(ツ/¯"`;
+exports[`!shrug callback returns correct output 9`] = `"¯\\\\)__(ツ/¯"`;
 
-exports[`/shrug callback returns correct output 10`] = `")_¯\\\\_(ツ/¯"`;
+exports[`!shrug callback returns correct output 10`] = `")_¯\\\\_(ツ/¯"`;
 
-exports[`/shrug callback returns correct output 11`] = `"_(¯\\\\)_ツ/¯"`;
+exports[`!shrug callback returns correct output 11`] = `"_(¯\\\\)_ツ/¯"`;
 
-exports[`/shrug callback returns correct output 12`] = `"¯\\\\_()_ツ/¯"`;
+exports[`!shrug callback returns correct output 12`] = `"¯\\\\_()_ツ/¯"`;
 
-exports[`/shrug callback returns correct output 13`] = `"¯\\\\ツ)__(/¯"`;
+exports[`!shrug callback returns correct output 13`] = `"¯\\\\ツ)__(/¯"`;
 
-exports[`/shrug callback returns correct output 14`] = `"ツ¯\\\\)__(/¯"`;
+exports[`!shrug callback returns correct output 14`] = `"ツ¯\\\\)__(/¯"`;
 
-exports[`/shrug callback returns correct output 15`] = `")_¯\\\\ツ_(/¯"`;
+exports[`!shrug callback returns correct output 15`] = `")_¯\\\\ツ_(/¯"`;
 
-exports[`/shrug callback returns correct output 16`] = `"¯\\\\)_ツ_(/¯"`;
+exports[`!shrug callback returns correct output 16`] = `"¯\\\\)_ツ_(/¯"`;
 
-exports[`/shrug callback returns correct output 17`] = `"ツ)_¯\\\\_(/¯"`;
+exports[`!shrug callback returns correct output 17`] = `"ツ)_¯\\\\_(/¯"`;
 
-exports[`/shrug callback returns correct output 18`] = `")_ツ¯\\\\_(/¯"`;
+exports[`!shrug callback returns correct output 18`] = `")_ツ¯\\\\_(/¯"`;
 
-exports[`/shrug callback returns correct output 19`] = `")_ツ_(¯\\\\/¯"`;
+exports[`!shrug callback returns correct output 19`] = `")_ツ_(¯\\\\/¯"`;
 
-exports[`/shrug callback returns correct output 20`] = `"ツ)__(¯\\\\/¯"`;
+exports[`!shrug callback returns correct output 20`] = `"ツ)__(¯\\\\/¯"`;
 
-exports[`/shrug callback returns correct output 21`] = `"_()_ツ¯\\\\/¯"`;
+exports[`!shrug callback returns correct output 21`] = `"_()_ツ¯\\\\/¯"`;
 
-exports[`/shrug callback returns correct output 22`] = `")__(ツ¯\\\\/¯"`;
+exports[`!shrug callback returns correct output 22`] = `")__(ツ¯\\\\/¯"`;
 
-exports[`/shrug callback returns correct output 23`] = `"ツ_()_¯\\\\/¯"`;
+exports[`!shrug callback returns correct output 23`] = `"ツ_()_¯\\\\/¯"`;
 
-exports[`/shrug callback returns correct output 24`] = `"_(ツ)_¯\\\\/¯"`;
+exports[`!shrug callback returns correct output 24`] = `"_(ツ)_¯\\\\/¯"`;
 
-exports[`/shrug callback returns correct output 25`] = `"/¯ツ)_¯\\\\_("`;
+exports[`!shrug callback returns correct output 25`] = `"/¯ツ)_¯\\\\_("`;
 
-exports[`/shrug callback returns correct output 26`] = `"ツ/¯)_¯\\\\_("`;
+exports[`!shrug callback returns correct output 26`] = `"ツ/¯)_¯\\\\_("`;
 
-exports[`/shrug callback returns correct output 27`] = `")_/¯ツ¯\\\\_("`;
+exports[`!shrug callback returns correct output 27`] = `")_/¯ツ¯\\\\_("`;
 
-exports[`/shrug callback returns correct output 28`] = `"/¯)_ツ¯\\\\_("`;
+exports[`!shrug callback returns correct output 28`] = `"/¯)_ツ¯\\\\_("`;
 
-exports[`/shrug callback returns correct output 29`] = `"ツ)_/¯¯\\\\_("`;
+exports[`!shrug callback returns correct output 29`] = `"ツ)_/¯¯\\\\_("`;
 
-exports[`/shrug callback returns correct output 30`] = `")_ツ/¯¯\\\\_("`;
+exports[`!shrug callback returns correct output 30`] = `")_ツ/¯¯\\\\_("`;
 
-exports[`/shrug callback returns correct output 31`] = `"¯\\\\ツ/¯)__("`;
+exports[`!shrug callback returns correct output 31`] = `"¯\\\\ツ/¯)__("`;
 
-exports[`/shrug callback returns correct output 32`] = `"ツ¯\\\\/¯)__("`;
+exports[`!shrug callback returns correct output 32`] = `"ツ¯\\\\/¯)__("`;
 
-exports[`/shrug callback returns correct output 33`] = `"/¯¯\\\\ツ)__("`;
+exports[`!shrug callback returns correct output 33`] = `"/¯¯\\\\ツ)__("`;
 
-exports[`/shrug callback returns correct output 34`] = `"¯\\\\/¯ツ)__("`;
+exports[`!shrug callback returns correct output 34`] = `"¯\\\\/¯ツ)__("`;
 
-exports[`/shrug callback returns correct output 35`] = `"ツ/¯¯\\\\)__("`;
+exports[`!shrug callback returns correct output 35`] = `"ツ/¯¯\\\\)__("`;
 
-exports[`/shrug callback returns correct output 36`] = `"/¯ツ¯\\\\)__("`;
+exports[`!shrug callback returns correct output 36`] = `"/¯ツ¯\\\\)__("`;
 
-exports[`/shrug callback returns correct output 37`] = `"/¯)_¯\\\\ツ_("`;
+exports[`!shrug callback returns correct output 37`] = `"/¯)_¯\\\\ツ_("`;
 
-exports[`/shrug callback returns correct output 38`] = `")_/¯¯\\\\ツ_("`;
+exports[`!shrug callback returns correct output 38`] = `")_/¯¯\\\\ツ_("`;
 
-exports[`/shrug callback returns correct output 39`] = `"¯\\\\/¯)_ツ_("`;
+exports[`!shrug callback returns correct output 39`] = `"¯\\\\/¯)_ツ_("`;
 
-exports[`/shrug callback returns correct output 40`] = `"/¯¯\\\\)_ツ_("`;
+exports[`!shrug callback returns correct output 40`] = `"/¯¯\\\\)_ツ_("`;
 
-exports[`/shrug callback returns correct output 41`] = `")_¯\\\\/¯ツ_("`;
+exports[`!shrug callback returns correct output 41`] = `")_¯\\\\/¯ツ_("`;
 
-exports[`/shrug callback returns correct output 42`] = `"¯\\\\)_/¯ツ_("`;
+exports[`!shrug callback returns correct output 42`] = `"¯\\\\)_/¯ツ_("`;
 
-exports[`/shrug callback returns correct output 43`] = `"¯\\\\)_ツ/¯_("`;
+exports[`!shrug callback returns correct output 43`] = `"¯\\\\)_ツ/¯_("`;
 
-exports[`/shrug callback returns correct output 44`] = `")_¯\\\\ツ/¯_("`;
+exports[`!shrug callback returns correct output 44`] = `")_¯\\\\ツ/¯_("`;
 
-exports[`/shrug callback returns correct output 45`] = `"ツ¯\\\\)_/¯_("`;
+exports[`!shrug callback returns correct output 45`] = `"ツ¯\\\\)_/¯_("`;
 
-exports[`/shrug callback returns correct output 46`] = `"¯\\\\ツ)_/¯_("`;
+exports[`!shrug callback returns correct output 46`] = `"¯\\\\ツ)_/¯_("`;
 
-exports[`/shrug callback returns correct output 47`] = `")_ツ¯\\\\/¯_("`;
+exports[`!shrug callback returns correct output 47`] = `")_ツ¯\\\\/¯_("`;
 
-exports[`/shrug callback returns correct output 48`] = `"ツ)_¯\\\\/¯_("`;
+exports[`!shrug callback returns correct output 48`] = `"ツ)_¯\\\\/¯_("`;
 
-exports[`/shrug callback returns correct output 49`] = `"_()_¯\\\\/¯ツ"`;
+exports[`!shrug callback returns correct output 49`] = `"_()_¯\\\\/¯ツ"`;
 
-exports[`/shrug callback returns correct output 50`] = `")__(¯\\\\/¯ツ"`;
+exports[`!shrug callback returns correct output 50`] = `")__(¯\\\\/¯ツ"`;
 
-exports[`/shrug callback returns correct output 51`] = `"¯\\\\_()_/¯ツ"`;
+exports[`!shrug callback returns correct output 51`] = `"¯\\\\_()_/¯ツ"`;
 
-exports[`/shrug callback returns correct output 52`] = `"_(¯\\\\)_/¯ツ"`;
+exports[`!shrug callback returns correct output 52`] = `"_(¯\\\\)_/¯ツ"`;
 
-exports[`/shrug callback returns correct output 53`] = `")_¯\\\\_(/¯ツ"`;
+exports[`!shrug callback returns correct output 53`] = `")_¯\\\\_(/¯ツ"`;
 
-exports[`/shrug callback returns correct output 54`] = `"¯\\\\)__(/¯ツ"`;
+exports[`!shrug callback returns correct output 54`] = `"¯\\\\)__(/¯ツ"`;
 
-exports[`/shrug callback returns correct output 55`] = `"/¯)__(¯\\\\ツ"`;
+exports[`!shrug callback returns correct output 55`] = `"/¯)__(¯\\\\ツ"`;
 
-exports[`/shrug callback returns correct output 56`] = `")_/¯_(¯\\\\ツ"`;
+exports[`!shrug callback returns correct output 56`] = `")_/¯_(¯\\\\ツ"`;
 
-exports[`/shrug callback returns correct output 57`] = `"_(/¯)_¯\\\\ツ"`;
+exports[`!shrug callback returns correct output 57`] = `"_(/¯)_¯\\\\ツ"`;
 
-exports[`/shrug callback returns correct output 58`] = `"/¯_()_¯\\\\ツ"`;
+exports[`!shrug callback returns correct output 58`] = `"/¯_()_¯\\\\ツ"`;
 
-exports[`/shrug callback returns correct output 59`] = `")__(/¯¯\\\\ツ"`;
+exports[`!shrug callback returns correct output 59`] = `")__(/¯¯\\\\ツ"`;
 
-exports[`/shrug callback returns correct output 60`] = `"_()_/¯¯\\\\ツ"`;
+exports[`!shrug callback returns correct output 60`] = `"_()_/¯¯\\\\ツ"`;
 
-exports[`/shrug callback returns correct output 61`] = `"_(¯\\\\/¯)_ツ"`;
+exports[`!shrug callback returns correct output 61`] = `"_(¯\\\\/¯)_ツ"`;
 
-exports[`/shrug callback returns correct output 62`] = `"¯\\\\_(/¯)_ツ"`;
+exports[`!shrug callback returns correct output 62`] = `"¯\\\\_(/¯)_ツ"`;
 
-exports[`/shrug callback returns correct output 63`] = `"/¯_(¯\\\\)_ツ"`;
+exports[`!shrug callback returns correct output 63`] = `"/¯_(¯\\\\)_ツ"`;
 
-exports[`/shrug callback returns correct output 64`] = `"_(/¯¯\\\\)_ツ"`;
+exports[`!shrug callback returns correct output 64`] = `"_(/¯¯\\\\)_ツ"`;
 
-exports[`/shrug callback returns correct output 65`] = `"¯\\\\/¯_()_ツ"`;
+exports[`!shrug callback returns correct output 65`] = `"¯\\\\/¯_()_ツ"`;
 
-exports[`/shrug callback returns correct output 66`] = `"/¯¯\\\\_()_ツ"`;
+exports[`!shrug callback returns correct output 66`] = `"/¯¯\\\\_()_ツ"`;
 
-exports[`/shrug callback returns correct output 67`] = `"/¯¯\\\\)__(ツ"`;
+exports[`!shrug callback returns correct output 67`] = `"/¯¯\\\\)__(ツ"`;
 
-exports[`/shrug callback returns correct output 68`] = `"¯\\\\/¯)__(ツ"`;
+exports[`!shrug callback returns correct output 68`] = `"¯\\\\/¯)__(ツ"`;
 
-exports[`/shrug callback returns correct output 69`] = `")_/¯¯\\\\_(ツ"`;
+exports[`!shrug callback returns correct output 69`] = `")_/¯¯\\\\_(ツ"`;
 
-exports[`/shrug callback returns correct output 70`] = `"/¯)_¯\\\\_(ツ"`;
+exports[`!shrug callback returns correct output 70`] = `"/¯)_¯\\\\_(ツ"`;
 
-exports[`/shrug callback returns correct output 71`] = `"¯\\\\)_/¯_(ツ"`;
+exports[`!shrug callback returns correct output 71`] = `"¯\\\\)_/¯_(ツ"`;
 
-exports[`/shrug callback returns correct output 72`] = `")_¯\\\\/¯_(ツ"`;
+exports[`!shrug callback returns correct output 72`] = `")_¯\\\\/¯_(ツ"`;
 
-exports[`/shrug callback returns correct output 73`] = `"ツ¯\\\\/¯_()_"`;
+exports[`!shrug callback returns correct output 73`] = `"ツ¯\\\\/¯_()_"`;
 
-exports[`/shrug callback returns correct output 74`] = `"¯\\\\ツ/¯_()_"`;
+exports[`!shrug callback returns correct output 74`] = `"¯\\\\ツ/¯_()_"`;
 
-exports[`/shrug callback returns correct output 75`] = `"/¯ツ¯\\\\_()_"`;
+exports[`!shrug callback returns correct output 75`] = `"/¯ツ¯\\\\_()_"`;
 
-exports[`/shrug callback returns correct output 76`] = `"ツ/¯¯\\\\_()_"`;
+exports[`!shrug callback returns correct output 76`] = `"ツ/¯¯\\\\_()_"`;
 
-exports[`/shrug callback returns correct output 77`] = `"¯\\\\/¯ツ_()_"`;
+exports[`!shrug callback returns correct output 77`] = `"¯\\\\/¯ツ_()_"`;
 
-exports[`/shrug callback returns correct output 78`] = `"/¯¯\\\\ツ_()_"`;
+exports[`!shrug callback returns correct output 78`] = `"/¯¯\\\\ツ_()_"`;
 
-exports[`/shrug callback returns correct output 79`] = `"_(¯\\\\ツ/¯)_"`;
+exports[`!shrug callback returns correct output 79`] = `"_(¯\\\\ツ/¯)_"`;
 
-exports[`/shrug callback returns correct output 80`] = `"¯\\\\_(ツ/¯)_"`;
+exports[`!shrug callback returns correct output 80`] = `"¯\\\\_(ツ/¯)_"`;
 
-exports[`/shrug callback returns correct output 81`] = `"ツ_(¯\\\\/¯)_"`;
+exports[`!shrug callback returns correct output 81`] = `"ツ_(¯\\\\/¯)_"`;
 
-exports[`/shrug callback returns correct output 82`] = `"_(ツ¯\\\\/¯)_"`;
+exports[`!shrug callback returns correct output 82`] = `"_(ツ¯\\\\/¯)_"`;
 
-exports[`/shrug callback returns correct output 83`] = `"¯\\\\ツ_(/¯)_"`;
+exports[`!shrug callback returns correct output 83`] = `"¯\\\\ツ_(/¯)_"`;
 
-exports[`/shrug callback returns correct output 84`] = `"ツ¯\\\\_(/¯)_"`;
+exports[`!shrug callback returns correct output 84`] = `"ツ¯\\\\_(/¯)_"`;
 
-exports[`/shrug callback returns correct output 85`] = `"ツ/¯_(¯\\\\)_"`;
+exports[`!shrug callback returns correct output 85`] = `"ツ/¯_(¯\\\\)_"`;
 
-exports[`/shrug callback returns correct output 86`] = `"/¯ツ_(¯\\\\)_"`;
+exports[`!shrug callback returns correct output 86`] = `"/¯ツ_(¯\\\\)_"`;
 
-exports[`/shrug callback returns correct output 87`] = `"_(ツ/¯¯\\\\)_"`;
+exports[`!shrug callback returns correct output 87`] = `"_(ツ/¯¯\\\\)_"`;
 
-exports[`/shrug callback returns correct output 88`] = `"ツ_(/¯¯\\\\)_"`;
+exports[`!shrug callback returns correct output 88`] = `"ツ_(/¯¯\\\\)_"`;
 
-exports[`/shrug callback returns correct output 89`] = `"/¯_(ツ¯\\\\)_"`;
+exports[`!shrug callback returns correct output 89`] = `"/¯_(ツ¯\\\\)_"`;
 
-exports[`/shrug callback returns correct output 90`] = `"_(/¯ツ¯\\\\)_"`;
+exports[`!shrug callback returns correct output 90`] = `"_(/¯ツ¯\\\\)_"`;
 
-exports[`/shrug callback returns correct output 91`] = `"_(/¯¯\\\\ツ)_"`;
+exports[`!shrug callback returns correct output 91`] = `"_(/¯¯\\\\ツ)_"`;
 
-exports[`/shrug callback returns correct output 92`] = `"/¯_(¯\\\\ツ)_"`;
+exports[`!shrug callback returns correct output 92`] = `"/¯_(¯\\\\ツ)_"`;
 
-exports[`/shrug callback returns correct output 93`] = `"¯\\\\_(/¯ツ)_"`;
+exports[`!shrug callback returns correct output 93`] = `"¯\\\\_(/¯ツ)_"`;
 
-exports[`/shrug callback returns correct output 94`] = `"_(¯\\\\/¯ツ)_"`;
+exports[`!shrug callback returns correct output 94`] = `"_(¯\\\\/¯ツ)_"`;
 
-exports[`/shrug callback returns correct output 95`] = `"/¯¯\\\\_(ツ)_"`;
+exports[`!shrug callback returns correct output 95`] = `"/¯¯\\\\_(ツ)_"`;
 
-exports[`/shrug callback returns correct output 96`] = `"¯\\\\/¯_(ツ)_"`;
+exports[`!shrug callback returns correct output 96`] = `"¯\\\\/¯_(ツ)_"`;
 
-exports[`/shrug callback returns correct output 97`] = `")_/¯_(ツ¯\\\\"`;
+exports[`!shrug callback returns correct output 97`] = `")_/¯_(ツ¯\\\\"`;
 
-exports[`/shrug callback returns correct output 98`] = `"/¯)__(ツ¯\\\\"`;
+exports[`!shrug callback returns correct output 98`] = `"/¯)__(ツ¯\\\\"`;
 
-exports[`/shrug callback returns correct output 99`] = `"_()_/¯ツ¯\\\\"`;
+exports[`!shrug callback returns correct output 99`] = `"_()_/¯ツ¯\\\\"`;
 
-exports[`/shrug callback returns correct output 100`] = `")__(/¯ツ¯\\\\"`;
+exports[`!shrug callback returns correct output 100`] = `")__(/¯ツ¯\\\\"`;
 
-exports[`/shrug callback returns correct output 101`] = `"/¯_()_ツ¯\\\\"`;
+exports[`!shrug callback returns correct output 101`] = `"/¯_()_ツ¯\\\\"`;
 
-exports[`/shrug callback returns correct output 102`] = `"_(/¯)_ツ¯\\\\"`;
+exports[`!shrug callback returns correct output 102`] = `"_(/¯)_ツ¯\\\\"`;
 
-exports[`/shrug callback returns correct output 103`] = `"ツ/¯)__(¯\\\\"`;
+exports[`!shrug callback returns correct output 103`] = `"ツ/¯)__(¯\\\\"`;
 
-exports[`/shrug callback returns correct output 104`] = `"/¯ツ)__(¯\\\\"`;
+exports[`!shrug callback returns correct output 104`] = `"/¯ツ)__(¯\\\\"`;
 
-exports[`/shrug callback returns correct output 105`] = `")_ツ/¯_(¯\\\\"`;
+exports[`!shrug callback returns correct output 105`] = `")_ツ/¯_(¯\\\\"`;
 
-exports[`/shrug callback returns correct output 106`] = `"ツ)_/¯_(¯\\\\"`;
+exports[`!shrug callback returns correct output 106`] = `"ツ)_/¯_(¯\\\\"`;
 
-exports[`/shrug callback returns correct output 107`] = `"/¯)_ツ_(¯\\\\"`;
+exports[`!shrug callback returns correct output 107`] = `"/¯)_ツ_(¯\\\\"`;
 
-exports[`/shrug callback returns correct output 108`] = `")_/¯ツ_(¯\\\\"`;
+exports[`!shrug callback returns correct output 108`] = `")_/¯ツ_(¯\\\\"`;
 
-exports[`/shrug callback returns correct output 109`] = `")__(ツ/¯¯\\\\"`;
+exports[`!shrug callback returns correct output 109`] = `")__(ツ/¯¯\\\\"`;
 
-exports[`/shrug callback returns correct output 110`] = `"_()_ツ/¯¯\\\\"`;
+exports[`!shrug callback returns correct output 110`] = `"_()_ツ/¯¯\\\\"`;
 
-exports[`/shrug callback returns correct output 111`] = `"ツ)__(/¯¯\\\\"`;
+exports[`!shrug callback returns correct output 111`] = `"ツ)__(/¯¯\\\\"`;
 
-exports[`/shrug callback returns correct output 112`] = `")_ツ_(/¯¯\\\\"`;
+exports[`!shrug callback returns correct output 112`] = `")_ツ_(/¯¯\\\\"`;
 
-exports[`/shrug callback returns correct output 113`] = `"_(ツ)_/¯¯\\\\"`;
+exports[`!shrug callback returns correct output 113`] = `"_(ツ)_/¯¯\\\\"`;
 
-exports[`/shrug callback returns correct output 114`] = `"ツ_()_/¯¯\\\\"`;
+exports[`!shrug callback returns correct output 114`] = `"ツ_()_/¯¯\\\\"`;
 
-exports[`/shrug callback returns correct output 115`] = `"ツ_(/¯)_¯\\\\"`;
+exports[`!shrug callback returns correct output 115`] = `"ツ_(/¯)_¯\\\\"`;
 
-exports[`/shrug callback returns correct output 116`] = `"_(ツ/¯)_¯\\\\"`;
+exports[`!shrug callback returns correct output 116`] = `"_(ツ/¯)_¯\\\\"`;
 
-exports[`/shrug callback returns correct output 117`] = `"/¯ツ_()_¯\\\\"`;
+exports[`!shrug callback returns correct output 117`] = `"/¯ツ_()_¯\\\\"`;
 
-exports[`/shrug callback returns correct output 118`] = `"ツ/¯_()_¯\\\\"`;
+exports[`!shrug callback returns correct output 118`] = `"ツ/¯_()_¯\\\\"`;
 
-exports[`/shrug callback returns correct output 119`] = `"_(/¯ツ)_¯\\\\"`;
+exports[`!shrug callback returns correct output 119`] = `"_(/¯ツ)_¯\\\\"`;
 
-exports[`/shrug callback returns correct output 120`] = `"/¯_(ツ)_¯\\\\"`;
+exports[`!shrug callback returns correct output 120`] = `"/¯_(ツ)_¯\\\\"`;
diff --git a/botCommands/__snapshots__/simpleCommands.test.js.snap b/botCommands/__snapshots__/simpleCommands.test.js.snap
index c777859..d1edb2d 100644
--- a/botCommands/__snapshots__/simpleCommands.test.js.snap
+++ b/botCommands/__snapshots__/simpleCommands.test.js.snap
@@ -1,8 +1,8 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/dab callback returns correct output 1`] = `"https://tenor.com/view/bettywhite-dab-gif-5044603"`;
+exports[`!dab callback returns correct output 1`] = `"https://tenor.com/view/bettywhite-dab-gif-5044603"`;
 
-exports[`/data callback returns correct output 1`] = `
+exports[`!data callback returns correct output 1`] = `
 Object {
   "embeds": Array [
     Object {
@@ -10,17 +10,17 @@ Object {
       "color": 13407555,
       "description": "
 Instead of asking if anyone can help you, ask your question outright so people can help you!
-      
+
 **Bad**: \\"Hey, does anyone know how to set CSS styles with Javascript?\\"
-    
-**Good**: 
+
+**Good**:
 \\"Hey, I'm having trouble setting CSS styles via Javascript.
-  
-Here's my code: 
-\`\`\`Code snippet\`\`\`  
+
+Here's my code:
+\`\`\`Code snippet\`\`\`
 And here is the error I'm receiving:
 \`Cannot set attribute 'style' of null\` \\"
-  
+
 **https://www.dontasktoask.com/**
         ",
       "fields": Array [],
@@ -36,19 +36,19 @@ And here is the error I'm receiving:
 }
 `;
 
-exports[`/fu callback returns correct output 1`] = `"http://media.riffsy.com/images/636a97aa416ad674eb2b72d4a6e9ad6c/tenor.gif"`;
+exports[`!fu callback returns correct output 1`] = `"http:!!media.riffsy.com!images!636a97aa416ad674eb2b72d4a6e9ad6c!tenor.gif"`;
 
-exports[`/google callback returns correct output 1`] = `"**This query might help you find what you're looking for >** <https://google.com/search?q=The+Odin+Project>"`;
+exports[`!google callback returns correct output 1`] = `"**This query might help you find what you're looking for >** <https://google.com/search?q=The+Odin+Project>"`;
 
-exports[`/hug callback returns correct output 1`] = `"⊂(´・ω・｀⊂)"`;
+exports[`!hug callback returns correct output 1`] = `"⊂(´・ω・｀⊂)"`;
 
-exports[`/justdoit callback returns correct output 1`] = `"What are you waiting for?! https://www.youtube.com/watch?v=ZXsQAXx_ao0"`;
+exports[`!justdoit callback returns correct output 1`] = `"What are you waiting for?! https://www.youtube.com/watch?v=ZXsQAXx_ao0"`;
 
-exports[`/lenny callback returns correct output 1`] = `"( ͡° ͜ʖ ͡°)"`;
+exports[`!lenny callback returns correct output 1`] = `"( ͡° ͜ʖ ͡°)"`;
 
-exports[`/motivate callback returns correct output 1`] = `"Don't give up! https://www.youtube.com/watch?v=KxGRhd_iWuE"`;
+exports[`!motivate callback returns correct output 1`] = `"Don't give up! https://www.youtube.com/watch?v=KxGRhd_iWuE"`;
 
-exports[`/question callback returns correct output 1`] = `
+exports[`!question callback returns correct output 1`] = `
 Object {
   "embeds": Array [
     Object {
@@ -68,6 +68,6 @@ Object {
 }
 `;
 
-exports[`/smart callback returns correct output 1`] = `"f(ಠ‿↼)z"`;
+exports[`!smart callback returns correct output 1`] = `"f(ಠ‿↼)z"`;
 
-exports[`/xy callback returns correct output 1`] = `"What problem are you *really* trying to solve? Check out this article to help others better understand your question: <https://xyproblem.info/>"`;
+exports[`!xy callback returns correct output 1`] = `"What problem are you *really* trying to solve? Check out this article to help others better understand your question: <https://xyproblem.info/>"`;
diff --git a/botCommands/__snapshots__/time.test.js.snap b/botCommands/__snapshots__/time.test.js.snap
index 0ee50ec..0da3144 100644
--- a/botCommands/__snapshots__/time.test.js.snap
+++ b/botCommands/__snapshots__/time.test.js.snap
@@ -1,9 +1,9 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/time callback returns correct output 1`] = `"Time is an illusion. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/765633002393829389"`;
+exports[`!time callback returns correct output 1`] = `"Time is an illusion. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/765633002393829389"`;
 
-exports[`/time callback returns correct output 2`] = `"Time is an illusion, <@1>. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/765633002393829389"`;
+exports[`!time callback returns correct output 2`] = `"Time is an illusion, <@1>. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/765633002393829389"`;
 
-exports[`/time callback returns correct output 3`] = `"Time is an illusion <@1> and <@2>. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/765633002393829389"`;
+exports[`!time callback returns correct output 3`] = `"Time is an illusion <@1> and <@2>. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/765633002393829389"`;
 
-exports[`/time callback returns correct output 4`] = `"Time is an illusion <@1>, <@2>, and <@3>. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/765633002393829389"`;
+exports[`!time callback returns correct output 4`] = `"Time is an illusion <@1>, <@2>, and <@3>. Please read this: https://discord.com/channels/505093832157691914/505093832157691916/765633002393829389"`;
diff --git a/botCommands/__snapshots__/top.test.js.snap b/botCommands/__snapshots__/top.test.js.snap
index 063adaa..6927afa 100644
--- a/botCommands/__snapshots__/top.test.js.snap
+++ b/botCommands/__snapshots__/top.test.js.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/top callback returns correct output 1`] = `"The Odin Project. Your Career in Web Development Starts Here. <https://www.theodinproject.com> "`;
+exports[`!top callback returns correct output 1`] = `"The Odin Project. Your Career in Web Development Starts Here. <https://www.theodinproject.com> "`;
diff --git a/botCommands/__snapshots__/windows.test.js.snap b/botCommands/__snapshots__/windows.test.js.snap
index f26e1ab..c904339 100644
--- a/botCommands/__snapshots__/windows.test.js.snap
+++ b/botCommands/__snapshots__/windows.test.js.snap
@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`/windows callback returns correct output 1`] = `
+exports[`!windows callback returns correct output 1`] = `
 Object {
   "embeds": Array [
     Object {
@@ -14,7 +14,7 @@ Object {
       "timestamp": null,
       "title": "Windows",
       "type": "rich",
-      "url": "https://www.theodinproject.com/courses/foundations/lessons/installation-overview#os-options",
+      "url": "https://www.theodinproject.com/paths/foundations/courses/foundations/lessons/installation-overview#os-options",
     },
   ],
 }
diff --git a/botCommands/bootcamps.test.js b/botCommands/bootcamps.test.js
index de73feb..bb724d4 100644
--- a/botCommands/bootcamps.test.js
+++ b/botCommands/bootcamps.test.js
@@ -1,12 +1,12 @@
 const command = require('./bootcamps');
 
-describe('/bootcamps', () => {
+describe('!bootcamps', () => {
   describe('regex', () => {
     it.each([
-      ['/bootcamps'],
-      [' /bootcamps'],
-      ['/bootcamps @odin-bot'],
-      ['@odin-bot /bootcamps'],
+      ['!bootcamps'],
+      [' !bootcamps'],
+      ['!bootcamps @odin-bot'],
+      ['@odin-bot !bootcamps'],
     ])('correct strings trigger the callback', (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
@@ -15,30 +15,30 @@ describe('/bootcamps', () => {
       ['botcamps'],
       ['bootcamps'],
       ['bootcamp'],
-      ['/bootcamp'],
-      ['/bootcmp'],
-      ['/ bootcamps'],
-      ['/abootcamps'],
+      ['!bootcamp'],
+      ['!bootcmp'],
+      ['! bootcamps'],
+      ['!abootcamps'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /bootcamps'],
-      ['Don\'t worry about /bootcamps'],
-      ['Hey @odin-bot, /bootcamps'],
-      ['/@odin-bot ^ /me /bootcamps /tests$*'],
+      ['Check this out! !bootcamps'],
+      ['Don\'t worry about !bootcamps'],
+      ['Hey @odin-bot, !bootcamps'],
+      ['!@odin-bot ^ !me !bootcamps !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/bootcamps'],
-      ['it\'s about/bootcamps'],
-      ['/bootcampsanillusion'],
-      ['/bootcamps/'],
-      ['/bootcamps*'],
-      ['/bootcamps...'],
+      ['@user!bootcamps'],
+      ['it\'s about!bootcamps'],
+      ['!bootcampsanillusion'],
+      ['!bootcamps!'],
+      ['!bootcamps*'],
+      ['!bootcamps...'],
     ])("'%s' - command should be its own word/group - no leading or trailing characters", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
diff --git a/botCommands/callbacks.test.js b/botCommands/callbacks.test.js
index 32d3723..f161675 100644
--- a/botCommands/callbacks.test.js
+++ b/botCommands/callbacks.test.js
@@ -1,50 +1,50 @@
 const command = require('./callbacks');
 
-describe('/callbacks', () => {
+describe('!callbacks', () => {
   it.each([
-    ['/callbacks'],
-    [' /callbacks'],
-    ['/callbacks @odin-bot'],
-    [' /callbacks @odin-bot'],
+    ['!callbacks'],
+    [' !callbacks'],
+    ['!callbacks @odin-bot'],
+    [' !callbacks @odin-bot'],
   ])("'%s' triggers the callback", (string) => {
     expect(command.regex.test(string)).toBeTruthy();
   });
 
   it.each([
-    ['/coolbacks'],
+    ['!coolbacks'],
     ['callbacks'],
-    ['/cllbacks'],
-    ['/callback'],
-    ['/call backs'],
-    ['```function("/call backs", () => {}```'],
-    ['/CallBacks'],
+    ['!cllbacks'],
+    ['!callback'],
+    ['!call backs'],
+    ['```function("!call backs", () => {}```'],
+    ['!CallBacks'],
     [''],
     [' '],
-    ['/ '],
-    ['@odin-bot / callbacks'],
-    ['/call&ba^cks'],
-    ['/callba^cks'],
-    ['@odin-bot/ callbacks'],
+    ['! '],
+    ['@odin-bot ! callbacks'],
+    ['!call&ba^cks'],
+    ['!callba^cks'],
+    ['@odin-bot! callbacks'],
   ])("'%s' does not trigger the callback", (string) => {
     expect(command.regex.test(string)).toBeFalsy();
   });
 
   it.each([
-    ['how about dem /callbacks'],
-    ['i think /callbacks are great'],
-    ['hey @odin-bot, teach me /callbacks'],
-    ['/@odin-bot ^ /me /callbacks /test$*'],
+    ['how about dem !callbacks'],
+    ['i think !callbacks are great'],
+    ['hey @odin-bot, teach me !callbacks'],
+    ['!@odin-bot ^ !me !callbacks !test$*'],
   ])("'%s' - the command can be anywhere in the string", (string) => {
     expect(command.regex.test(string)).toBeTruthy();
   });
 
   it.each([
-    ['@user/callbacks'],
-    ['watchaknowabout/callbacks'],
-    ['/callbackssgrealkdmsfalnd'],
-    ['/callbacks/'],
-    ['/callbacks*'],
-    ['/callbacks...'],
+    ['@user!callbacks'],
+    ['watchaknowabout!callbacks'],
+    ['!callbackssgrealkdmsfalnd'],
+    ['!callbacks!'],
+    ['!callbacks*'],
+    ['!callbacks...'],
   ])(
     "'%s' - command should be its own word/group - no leading or trailing characters",
     (string) => {
@@ -53,7 +53,7 @@ describe('/callbacks', () => {
   );
 });
 
-describe('/callbacks callback', () => {
+describe('!callbacks callback', () => {
   it('should return the correct output', () => {
     expect(command.cb()).toMatchSnapshot();
   });
diff --git a/botCommands/carlosQuote.test.js b/botCommands/carlosQuote.test.js
index 780151b..f60f1b0 100644
--- a/botCommands/carlosQuote.test.js
+++ b/botCommands/carlosQuote.test.js
@@ -1,7 +1,7 @@
 const command = require('./carlosQuote');
 
-describe('/cqg', () => {
-  it.each([['/cqg'], ['/cqg @odin-bot'], ['@odin-bot /cqg']])(
+describe('!cqg', () => {
+  it.each([['!cqg'], ['!cqg @odin-bot'], ['@odin-bot !cqg']])(
     "'%s' triggers the callback",
     (string) => {
       expect(command.regex.test(string)).toBeTruthy();
@@ -10,44 +10,44 @@ describe('/cqg', () => {
 
   it.each([
     ['cqgs'],
-    ['/c q g'],
-    ['/Cqg'],
+    ['!c q g'],
+    ['!Cqg'],
     [''],
     [' '],
-    ['/ '],
-    ['@odin-bot / cqg'],
-    ['/c&q^g*'],
-    ['/cq&^cks|'],
-    ['/cq^g'],
+    ['! '],
+    ['@odin-bot ! cqg'],
+    ['!c&q^g*'],
+    ['!cq&^cks|'],
+    ['!cq^g'],
   ])("'%s' does not trigger the callback", (string) => {
     expect(command.regex.test(string)).toBeFalsy();
   });
 
   it.each([
-    ['how about dem /cqg'],
-    ['i think you should /cqg sometime'],
-    ['hey @odin-bot, teach me /cqg'],
-    ['/@odin-bot ^ /me /cqg /test$*'],
+    ['how about dem !cqg'],
+    ['i think you should !cqg sometime'],
+    ['hey @odin-bot, teach me !cqg'],
+    ['!@odin-bot ^ !me !cqg !test$*'],
   ])("'%s' - the command can be anywhere in the string", (string) => {
     expect(command.regex.test(string)).toBeTruthy();
   });
 
   it.each([
-    ['/cqgsgrealkdmsfalnd'],
-    ['carlos/cqg'],
-    ['/cqg/xx'],
-    ['/cqg*'],
-    ['/cqg...'],
-    ['^_/cqg...'],
+    ['!cqgsgrealkdmsfalnd'],
+    ['carlos!cqg'],
+    ['!cqg!xx'],
+    ['!cqg*'],
+    ['!cqg...'],
+    ['^_!cqg...'],
   ])(
-    "'%s' - command should be its own word/group - no leading or trailing characters",
+    "'%s' - command should be its own word!group - no leading or trailing characters",
     (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     },
   );
 });
 
-describe('/cqg snapshot', () => {
+describe('!cqg snapshot', () => {
   it('should return the correct output', () => {
     expect(command.cb()).toMatchSnapshot();
   });
diff --git a/botCommands/debug.test.js b/botCommands/debug.test.js
index 9266cd0..402687e 100644
--- a/botCommands/debug.test.js
+++ b/botCommands/debug.test.js
@@ -1,51 +1,51 @@
 const command = require('./debug');
 
-describe('/debug', () => {
+describe('!debug', () => {
   describe('regex', () => {
     it.each([
-      ['/debug'],
-      [' /debug'],
-      ['/debug @odin-bot'],
-      [' /debug @odin-bot'],
+      ['!debug'],
+      [' !debug'],
+      ['!debug @odin-bot'],
+      [' !debug @odin-bot'],
     ])("'%s' triggers the callback", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/debog'],
+      ['!debog'],
       ['debugs'],
-      ['/dbug'],
-      ['/de bug'],
-      ['/debugging'],
-      ['```function("/de bug", () => {}```'],
-      ['/Debug'],
+      ['!dbug'],
+      ['!de bug'],
+      ['!debugging'],
+      ['```function("!de bug", () => {}```'],
+      ['!Debug'],
       [''],
       [' '],
-      ['/ '],
-      ['@odin-bot / debug'],
-      ['/de&b^ug'],
-      ['/d^bug'],
-      ['@odin-bot/ debug'],
+      ['! '],
+      ['@odin-bot ! debug'],
+      ['!de&b^ug'],
+      ['!d^bug'],
+      ['@odin-bot! debug'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['how about a flavour of /debug'],
-      ['i think /debug is great'],
-      ['hey @odin-bot, teach me to /debug'],
-      ['/@odin-bot ^ /me /debug /test$*'],
+      ['how about a flavour of !debug'],
+      ['i think !debug is great'],
+      ['hey @odin-bot, teach me to !debug'],
+      ['!@odin-bot ^ !me !debug !test$*'],
     ])("'%s' - the command can be anywhere in the string", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/debug'],
-      ['watchaknowabout/debug'],
-      ['/debugsgrealkdmsfalnd'],
-      ['/debug/'],
-      ['/debug*'],
-      ['/debug...'],
+      ['@user!debug'],
+      ['watchaknowabout!debug'],
+      ['!debugsgrealkdmsfalnd'],
+      ['!debug!'],
+      ['!debug*'],
+      ['!debug...'],
     ])(
       "'%s' - command should be its own word/group - no leading or trailing characters",
       (string) => {
diff --git a/botCommands/faq.test.js b/botCommands/faq.test.js
index c5668c0..b3f8683 100644
--- a/botCommands/faq.test.js
+++ b/botCommands/faq.test.js
@@ -1,8 +1,8 @@
 const command = require('./faq');
 const { generateMentions } = require('./mockData');
 
-describe('/faq', () => {
-  it.each([['/faq'], [' /faq'], ['/faq @odin-bot'], [' /faq @odin-bot']])(
+describe('!faq', () => {
+  it.each([['!faq'], [' !faq'], ['!faq @odin-bot'], [' !faq @odin-bot']])(
     "'%s' triggers the callback",
     (string) => {
       expect(command.regex.test(string)).toBeTruthy();
@@ -10,38 +10,38 @@ describe('/faq', () => {
   );
 
   it.each([
-    ['/fEhq'],
+    ['!fEhq'],
     ['fye'],
-    ['/f'],
-    ['/fq'],
-    ['/f a q'],
-    ['```function("/faq", () => {}```'],
-    ['/FAQ'],
+    ['!f'],
+    ['!fq'],
+    ['!f a q'],
+    ['```function("!faq", () => {}```'],
+    ['!FAQ'],
     [''],
     [' '],
-    ['/ '],
-    ['@odin-bot / faq'],
-    ['/fafaq'],
+    ['! '],
+    ['@odin-bot ! faq'],
+    ['!fafaq'],
   ])("'%s' does not trigger the callback", (string) => {
     expect(command.regex.test(string)).toBeFalsy();
   });
 
   it.each([
-    ['thats a /faq'],
-    ['that gets asked a lot /faq give this a read'],
-    ['hey @odin-bot, /faq'],
-    ['/@odin-bot ^ /me /faq /test$*'],
+    ['thats a !faq'],
+    ['that gets asked a lot !faq give this a read'],
+    ['hey @odin-bot, !faq'],
+    ['!@odin-bot ^ !me !faq !test$*'],
   ])("%s' - the command can be anywhere in the string", (string) => {
     expect(command.regex.test(string)).toBeTruthy();
   });
 
   it.each([
-    ['@user/faq'],
-    ['watchaknowabout/faq'],
-    ['/faqsgrealkdmsfalnd'],
-    ['/faq/'],
-    ['/faq*'],
-    ['/faq...'],
+    ['@user!faq'],
+    ['watchaknowabout!faq'],
+    ['!faqsgrealkdmsfalnd'],
+    ['!faq!'],
+    ['!faq*'],
+    ['!faq...'],
   ])(
     "'%s' - command should be its own word/group - no leading or trailing characters",
     (string) => {
diff --git a/botCommands/help.test.js b/botCommands/help.test.js
index a70d50e..361ad42 100644
--- a/botCommands/help.test.js
+++ b/botCommands/help.test.js
@@ -1,115 +1,115 @@
 const commands = require('./help');
 const { generateMentions } = require('./mockData');
 
-describe('/help', () => {
+describe('!help', () => {
   it.each([
-    ['/help'],
-    [' /help'],
-    ['/help @odin-bot'],
-    ['/help me please'],
-    ['/help @user'],
-    [' /help @user'],
+    ['!help'],
+    [' !help'],
+    ['!help @odin-bot'],
+    ['!help me please'],
+    ['!help @user'],
+    [' !help @user'],
   ])("'%s' triggers the callback", (string) => {
     expect(commands.help.regex.test(string)).toBeTruthy();
   });
 
   it.each([
-    ['/hmadpofdsnja'],
-    ['/halp'],
+    ['!hmadpofdsnja'],
+    ['!halp'],
     ['help'],
-    ['/hlpe'],
-    ['/he lp'],
-    ['/ help'],
-    ['@odin-bot / help'],
-    ['/he&l^p'],
-    ['/h*el&p^'],
-    ['/^help'],
+    ['!hlpe'],
+    ['!he lp'],
+    ['! help'],
+    ['@odin-bot ! help'],
+    ['!he&l^p'],
+    ['!h*el&p^'],
+    ['!^help'],
   ])("'%s' does not trigger the callback", (string) => {
     expect(commands.help.regex.test(string)).toBeFalsy();
   });
 
   it.each([
-    ['send /help'],
-    ['need some /help ?'],
-    ['hey @odin-bot, teach me /help'],
-    ['/@odin-bot ^ /me /help /test$*'],
+    ['send !help'],
+    ['need some !help ?'],
+    ['hey @odin-bot, teach me !help'],
+    ['!@odin-bot ^ !me !help !test$*'],
   ])("'%s' - the command can be anywhere in the string", (string) => {
     expect(commands.help.regex.test(string)).toBeTruthy();
   });
 
   it.each([
-    ['/helpsgrealkdmsfalnd'],
-    ['someone/help'],
-    ['/help/xx'],
-    ['/help*'],
-    ['/help...'],
-    ['^_/help...'],
+    ['!helpsgrealkdmsfalnd'],
+    ['someone!help'],
+    ['!help!xx'],
+    ['!help*'],
+    ['!help...'],
+    ['^_!help...'],
   ])(
-    "'%s' - command should be its own word/group - no leading or trailing characters",
+    "'%s' - command should be its own word!group - no leading or trailing characters",
     (string) => {
       expect(commands.help.regex.test(string)).toBeFalsy();
     },
   );
 });
 
-describe('/help snapshot', () => {
+describe('!help snapshot', () => {
   it('should return the correct output', () => {
     expect(commands.help.cb({})).toMatchSnapshot();
   });
 });
 
-describe('/code', () => {
+describe('!code', () => {
   it.each([
-    ['/code'],
-    [' /code'],
-    ['/code @odin-bot'],
-    [' /code @odin-bot'],
-    ['/code fmdkslafmksa'],
+    ['!code'],
+    [' !code'],
+    ['!code @odin-bot'],
+    [' !code @odin-bot'],
+    ['!code fmdkslafmksa'],
   ])("'%s' triggers the callback", (string) => {
     expect(commands.code.regex.test(string)).toBeTruthy();
   });
 
   it.each([
-    ['/cfdsdnjae'],
-    ['/cood'],
+    ['!cfdsdnjae'],
+    ['!cood'],
     ['code'],
-    ['/cdoe'],
-    ['/co de'],
-    ['/ code'],
-    ['@odin-bot / code'],
-    ['/co&d^e'],
-    ['/c*od&e^'],
-    ['/^code'],
+    ['!cdoe'],
+    ['!co de'],
+    ['! code'],
+    ['@odin-bot ! code'],
+    ['!co&d^e'],
+    ['!c*od&e^'],
+    ['!^code'],
   ])("'%s' does not trigger the callback", (string) => {
     expect(commands.code.regex.test(string)).toBeFalsy();
   });
 
   it.each([
-    ['how to share /code'],
-    ['need some /code ?'],
-    ['hey @odin-bot, teach me to /code'],
-    ['/@odin-bot ^ /me /code /test$*'],
+    ['how to share !code'],
+    ['need some !code ?'],
+    ['hey @odin-bot, teach me to !code'],
+    ['!@odin-bot ^ !me !code !test$*'],
   ])("'%s' - the command can be anywhere in the string", (string) => {
     expect(commands.code.regex.test(string)).toBeTruthy();
   });
 
   it.each([
-    ['/codesgrealkdmsfalnd'],
-    ['someone/code'],
-    ['@odin-bot/code'],
-    ['/code/xx'],
-    ['/code*'],
-    ['/code...'],
-    ['^_/code...'],
+    ['!codesgrealkdmsfalnd'],
+    ['someone!code'],
+    ['@odin-bot!code'],
+    ['!code!xx'],
+    ['!code*'],
+    ['!code...'],
+    ['^_!code...'],
   ])(
-    "'%s' - command should be its own word/group - no leading or trailing characters",
+    "'%s' - command should be its own word!group - no leading or trailing characters",
     (string) => {
       expect(commands.code.regex.test(string)).toBeFalsy();
     },
   );
 });
 
-describe('/code snapshot', () => {
+describe('!code snapshot', () => {
   it('returns correct output', () => {
     expect(commands.code.cb(generateMentions(0))).toMatchSnapshot();
     expect(commands.code.cb(generateMentions(1))).toMatchSnapshot();
diff --git a/botCommands/mv.test.js b/botCommands/mv.test.js
index 8b25a88..bbd38f9 100644
--- a/botCommands/mv.test.js
+++ b/botCommands/mv.test.js
@@ -1,51 +1,51 @@
 const command = require('./mv');
 
-describe('/mv', () => {
+describe('!mv', () => {
   describe('regex', () => {
     it.each([
-      ['/mv'],
-      [' /mv'],
-      ['/mv @odin-bot'],
-      ['@odin-bot /mv'],
+      ['!mv'],
+      [' !mv'],
+      ['!mv @odin-bot'],
+      ['@odin-bot !mv'],
     ])('correct strings trigger the callback', (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/v'],
+      ['!v'],
       ['mv'],
-      ['/m'],
-      ['/mvs'],
-      ['```function("/mv", () => {}```'],
+      ['!m'],
+      ['!mvs'],
+      ['```function("!mv", () => {}```'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / mv'],
-      ['/m&v'],
-      ['/m^v'],
-      ['/mv!'],
-      ['@odin-bot/ mv'],
-      ['https://mv.com'],
+      [' !'],
+      ['@odin-bot ! mv'],
+      ['!m&v'],
+      ['!m^v'],
+      ['!mv!'],
+      ['@odin-bot! mv'],
+      ['https:!!mv.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /mv'],
-      ['Don\'t worry about /mv'],
-      ['Hey @odin-bot, /mv'],
-      ['/@odin-bot ^ /me /mv /tests$*'],
+      ['Check this out! !mv'],
+      ['Don\'t worry about !mv'],
+      ['Hey @odin-bot, !mv'],
+      ['!@odin-bot ^ !me !mv !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/mv'],
-      ['it\'s about/mv'],
-      ['/mvisanillusion'],
-      ['/mv/'],
-      ['/mv*'],
-      ['/mv...'],
+      ['@user!mv'],
+      ['it\'s about!mv'],
+      ['!mvisanillusion'],
+      ['!mv!'],
+      ['!mv*'],
+      ['!mv...'],
     ])("'%s' - command should be its own word/group - no leading or trailing characters", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
diff --git a/botCommands/notes.test.js b/botCommands/notes.test.js
index 93d4162..7674adc 100644
--- a/botCommands/notes.test.js
+++ b/botCommands/notes.test.js
@@ -1,12 +1,12 @@
 const command = require('./notes');
 
-describe('/notes', () => {
+describe('!notes', () => {
   describe('regex', () => {
     it.each([
-      ['/notes'],
-      [' /notes'],
-      ['/notes @odin-bot'],
-      ['@odin-bot /notes'],
+      ['!notes'],
+      [' !notes'],
+      ['!notes @odin-bot'],
+      ['@odin-bot !notes'],
     ])('correct strings trigger the callback', (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
@@ -15,30 +15,30 @@ describe('/notes', () => {
       ['ntoes'],
       ['notes'],
       ['noets'],
-      ['/noets'],
-      ['/ntoes'],
-      ['/ notes'],
-      ['/anotes'],
+      ['!noets'],
+      ['!ntoes'],
+      ['! notes'],
+      ['!anotes'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /notes'],
-      ['Don\'t worry about /notes'],
-      ['Hey @odin-bot, /notes'],
-      ['/@odin-bot ^ /me /notes /tests$*'],
+      ['Check this out! !notes'],
+      ['Don\'t worry about !notes'],
+      ['Hey @odin-bot, !notes'],
+      ['!@odin-bot ^ !me !notes !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/notes'],
-      ['it\'s about/notes'],
-      ['/notesanillusion'],
-      ['/notes/'],
-      ['/notes*'],
-      ['/notes...'],
+      ['@user!notes'],
+      ['it\'s about!notes'],
+      ['!notesanillusion'],
+      ['!notes!'],
+      ['!notes*'],
+      ['!notes...'],
     ])("'%s' - command should be its own word/group - no leading or trailing characters", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
diff --git a/botCommands/points.test.js b/botCommands/points.test.js
index 9d3eed3..9e9701f 100644
--- a/botCommands/points.test.js
+++ b/botCommands/points.test.js
@@ -871,68 +871,68 @@ describe('@user --', () => {
   });
 });
 
-describe('/points', () => {
+describe('!points', () => {
   describe('regex', () => {
     it.each([
-      ['/points <@!123456789>'],
-      ['let me check out my /points <@!123456789>'],
-      ['/points <@!123456789> <@!123456789>-v2'],
-      ['/points'],
+      ['!points <@!123456789>'],
+      ['let me check out my !points <@!123456789>'],
+      ['!points <@!123456789> <@!123456789>-v2'],
+      ['!points'],
     ])('correct strings trigger the callback', (string) => {
       expect(commands.points.regex.test(string)).toBeTruthy();
     });
   });
 });
 
-describe('/leaderboard', () => {
+describe('!leaderboard', () => {
   describe('regex', () => {
     it.each([
-      ['/leaderboard'],
-      ['<@!123456789> /leaderboard'],
-      ['/leaderboard n=10 start=30'],
-      ['/leaderboard n=20 start=50'],
-      ['/leaderboard n=10'],
-      ['/leaderboard start=30'],
+      ['!leaderboard'],
+      ['<@!123456789> !leaderboard'],
+      ['!leaderboard n=10 start=30'],
+      ['!leaderboard n=20 start=50'],
+      ['!leaderboard n=10'],
+      ['!leaderboard start=30'],
     ])('correct strings trigger the callback', (string) => {
       expect(commands.leaderboard.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/leaderboad'],
+      ['!leaderboad'],
       [''],
       [' '],
-      [' /'],
-      ['/lead'],
+      [' !'],
+      ['!lead'],
       ['leaderboard'],
-      ['/le'],
-      ['/leaderboards'],
-      ['```function("/leaderboard", () => {}```'],
-      ['/leader'],
-      ['<@!123456789> / leaderboard'],
-      ['<@!123456789> /leaderbard'],
-      ['/leaderbord n=10 start=30'],
+      ['!le'],
+      ['!leaderboards'],
+      ['```function("!leaderboard", () => {}```'],
+      ['!leader'],
+      ['<@!123456789> ! leaderboard'],
+      ['<@!123456789> !leaderbard'],
+      ['!leaderbord n=10 start=30'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.leaderboard.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /leaderboard'],
-      ["Don't worry about /leaderboard"],
-      ['Hey <@!123456789>, /leaderboard'],
-      ['/<@!123456789> ^ /me /leaderboard /tests$*'],
+      ['Check this out! !leaderboard'],
+      ["Don't worry about !leaderboard"],
+      ['Hey <@!123456789>, !leaderboard'],
+      ['!<@!123456789> ^ !me !leaderboard !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.leaderboard.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/leaderboard'],
-      ["it's about/leaderboard"],
-      ['/leaderboardisanillusion'],
-      ['/leaderboard/'],
-      ['/leaderboard*'],
-      ['/leaderboard...'],
+      ['@user!leaderboard'],
+      ["it's about!leaderboard"],
+      ['!leaderboardisanillusion'],
+      ['!leaderboard!'],
+      ['!leaderboard*'],
+      ['!leaderboard...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.leaderboard.regex.test(string)).toBeFalsy();
       },
@@ -951,49 +951,49 @@ describe('/leaderboard', () => {
       expect(
         await commands.leaderboard.cb({
           guild: Guild(members),
-          content: '/leaderboard n=5 start=1',
+          content: '!leaderboard n=5 start=1',
         }),
       ).toMatchSnapshot();
       expect(
         await commands.leaderboard.cb({
           guild: Guild(members),
-          content: '/leaderboard n=3 start=1',
+          content: '!leaderboard n=3 start=1',
         }),
       ).toMatchSnapshot();
       expect(
         await commands.leaderboard.cb({
           guild: Guild(members),
-          content: '/leaderboard n=2 start=3',
+          content: '!leaderboard n=2 start=3',
         }),
       ).toMatchSnapshot();
       expect(
         await commands.leaderboard.cb({
           guild: Guild(members),
-          content: '/leaderboard start=3',
+          content: '!leaderboard start=3',
         }),
       ).toMatchSnapshot();
       expect(
         await commands.leaderboard.cb({
           guild: Guild(members),
-          content: '/leaderboard n=2',
+          content: '!leaderboard n=2',
         }),
       ).toMatchSnapshot();
       expect(
         await commands.leaderboard.cb({
           guild: Guild(members),
-          content: '/leaderboard n=2 start=wtf',
+          content: '!leaderboard n=2 start=wtf',
         }),
       ).toMatchSnapshot();
       expect(
         await commands.leaderboard.cb({
           guild: Guild(members),
-          content: '/leaderboard n=wtf start=3',
+          content: '!leaderboard n=wtf start=3',
         }),
       ).toMatchSnapshot();
       expect(
         await commands.leaderboard.cb({
           guild: Guild(members),
-          content: '/leaderboard n=25 start=9999',
+          content: '!leaderboard n=25 start=9999',
         }),
       ).toMatchSnapshot();
     });
diff --git a/botCommands/shrug.test.js b/botCommands/shrug.test.js
index b325fd0..bd3055e 100644
--- a/botCommands/shrug.test.js
+++ b/botCommands/shrug.test.js
@@ -1,50 +1,50 @@
 const command = require('./shrug');
 
-describe('/shrug', () => {
+describe('!shrug', () => {
   const permutations = 'SHRUG HSRUG RSHUG SRHUG HRSUG RHSUG UHSRG HUSRG SUHRG USHRG HSURG SHURG SRUHG RSUHG USRHG SURHG RUSHG URSHG URHSG RUHSG HURSG UHRSG RHUSG HRUSG GRUSH RGUSH UGRSH GURSH RUGSH URGSH SRGUH RSGUH GSRUH SGRUH RGSUH GRSUH GUSRH UGSRH SGURH GSURH USGRH SUGRH SURGH USRGH RSUGH SRUGH URSGH RUSGH HUSGR UHSGR SHUGR HSUGR USHGR SUHGR GUHSR UGHSR HGUSR GHUSR UHGSR HUGSR HSGUR SHGUR GHSUR HGSUR SGHUR GSHUR GSUHR SGUHR UGSHR GUSHR SUGHR USGHR RSGHU SRGHU GRSHU RGSHU SGRHU GSRHU HSRGU SHRGU RHSGU HRSGU SRHGU RSHGU RGHSU GRHSU HRGSU RHGSU GHRSU HGRSU HGSRU GHSRU SHGRU HSGRU GSHRU SGHRU UGHRS GUHRS HUGRS UHGRS GHURS HGURS RGUHS GRUHS URGHS RUGHS GURHS UGRHS UHRGS HURGS RUHGS URHGS HRUGS RHUGS RHGUS HRGUS GRHUS RGHUS HGRUS GHRUS';
   const permutationsArr = permutations.split(' ').map((item) => `${item.toLowerCase()}`);
 
   describe('regex', () => {
     it.each(permutationsArr)('correct strings trigger the callback', (string) => {
-      expect(command.regex.test(`/${string}`)).toBeTruthy();
+      expect(command.regex.test(`!${string}`)).toBeTruthy();
     });
 
     it.each([
-      ['/shrugs'],
+      ['!shrugs'],
       ['shrug'],
-      ['/shurgs'],
-      ['/shrg'],
-      ['```function("/shrug", () => {}```'],
-      ['/shurga'],
+      ['!shurgs'],
+      ['!shrg'],
+      ['```function("!shrug", () => {}```'],
+      ['!shurga'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / shrug'],
-      ['/shru&g'],
-      ['/shr^ug'],
-      ['/shrug!'],
-      ['@odin-bot/ shrug'],
-      ['https://shrug.com'],
+      [' !'],
+      ['@odin-bot ! shrug'],
+      ['!shru&g'],
+      ['!shr^ug'],
+      ['!shrug!'],
+      ['@odin-bot! shrug'],
+      ['https:!!shrug.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /shrug'],
-      ['Don\'t worry about /shrug'],
-      ['Hey @odin-bot, /shrug'],
-      ['/@odin-bot ^ /me /shrug /tests$*'],
+      ['Check this out! !shrug'],
+      ['Don\'t worry about !shrug'],
+      ['Hey @odin-bot, !shrug'],
+      ['!@odin-bot ^ !me !shrug !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/shrug'],
-      ['it\'s about/shrug'],
-      ['/shrugisanillusion'],
-      ['/shrug/'],
-      ['/shrug*'],
-      ['/shrug...'],
+      ['@user!shrug'],
+      ['it\'s about!shrug'],
+      ['!shrugisanillusion'],
+      ['!shrug!'],
+      ['!shrug*'],
+      ['!shrug...'],
     ])("'%s' - command should be its own word/group - no leading or trailing characters", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
diff --git a/botCommands/simpleCommands.test.js b/botCommands/simpleCommands.test.js
index 9c5b806..38f37e8 100644
--- a/botCommands/simpleCommands.test.js
+++ b/botCommands/simpleCommands.test.js
@@ -1,8 +1,8 @@
 const commands = require('./simpleCommands');
 
-describe('/hug', () => {
+describe('!hug', () => {
   describe('regex', () => {
-    it.each([['/hug'], [' /hug'], ['/hug @odin-bot'], ['@odin-bot /hug']])(
+    it.each([['!hug'], [' !hug'], ['!hug @odin-bot'], ['@odin-bot !hug']])(
       'correct strings trigger the callback',
       (string) => {
         expect(commands.hug.regex.test(string)).toBeTruthy();
@@ -10,43 +10,43 @@ describe('/hug', () => {
     );
 
     it.each([
-      ['/hg'],
+      ['!hg'],
       ['hug'],
-      ['/hu'],
-      ['/hugs'],
-      ['```function("/hug", () => {}```'],
-      ['/Hug'],
+      ['!hu'],
+      ['!hugs'],
+      ['```function("!hug", () => {}```'],
+      ['!Hug'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / hug'],
-      ['/hu&g'],
-      ['/hu^g'],
-      ['/hug!'],
-      ['@odin-bot/ hug'],
-      ['https://hug.com'],
+      [' !'],
+      ['@odin-bot ! hug'],
+      ['!hu&g'],
+      ['!hu^g'],
+      ['!hug!'],
+      ['@odin-bot! hug'],
+      ['https:!!hug.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.hug.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /hug'],
-      ["Don't worry about /hug"],
-      ['Hey @odin-bot, /hug'],
-      ['/@odin-bot ^ /me /hug /tests$*'],
+      ['Check this out! !hug'],
+      ["Don't worry about !hug"],
+      ['Hey @odin-bot, !hug'],
+      ['!@odin-bot ^ !me !hug !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.hug.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/hug'],
-      ["it's about/hug"],
-      ['/hugisanillusion'],
-      ['/hug/'],
-      ['/hug*'],
-      ['/hug...'],
+      ['@user!hug'],
+      ["it's about!hug"],
+      ['!hugisanillusion'],
+      ['!hug!'],
+      ['!hug*'],
+      ['!hug...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.hug.regex.test(string)).toBeFalsy();
       },
@@ -60,55 +60,55 @@ describe('/hug', () => {
   });
 });
 
-describe('/smart', () => {
+describe('!smart', () => {
   describe('regex', () => {
     it.each([
-      ['/smart'],
-      [' /smart'],
-      ['/smart @odin-bot'],
-      ['@odin-bot /smart'],
+      ['!smart'],
+      [' !smart'],
+      ['!smart @odin-bot'],
+      ['@odin-bot !smart'],
     ])('correct strings trigger the callback', (string) => {
       expect(commands.smart.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/smar'],
+      ['!smar'],
       ['smart'],
-      ['/smrt'],
-      ['/smarts'],
-      ['```function("/smart", () => {}```'],
-      ['/smarta'],
+      ['!smrt'],
+      ['!smarts'],
+      ['```function("!smart", () => {}```'],
+      ['!smarta'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / smart'],
-      ['/sma&rt'],
-      ['/sma^rt'],
-      ['/smart!'],
-      ['@odin-bot/ smart'],
-      ['https://smart.com'],
+      [' !'],
+      ['@odin-bot ! smart'],
+      ['!sma&rt'],
+      ['!sma^rt'],
+      ['!smart!'],
+      ['@odin-bot! smart'],
+      ['https:!!smart.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.smart.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /smart'],
-      ["Don't worry about /smart"],
-      ['Hey @odin-bot, /smart'],
-      ['/@odin-bot ^ /me /smart /tests$*'],
+      ['Check this out! !smart'],
+      ["Don't worry about !smart"],
+      ['Hey @odin-bot, !smart'],
+      ['!@odin-bot ^ !me !smart !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.smart.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/smart'],
-      ["it's about/smart"],
-      ['/smartisanillusion'],
-      ['/smart/'],
-      ['/smart*'],
-      ['/smart...'],
+      ['@user!smart'],
+      ["it's about!smart"],
+      ['!smartisanillusion'],
+      ['!smart!'],
+      ['!smart*'],
+      ['!smart...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.smart.regex.test(string)).toBeFalsy();
       },
@@ -122,55 +122,55 @@ describe('/smart', () => {
   });
 });
 
-describe('/lenny', () => {
+describe('!lenny', () => {
   describe('regex', () => {
     it.each([
-      ['/lenny'],
-      [' /lenny'],
-      ['/lenny @odin-bot'],
-      ['@odin-bot /lenny'],
+      ['!lenny'],
+      [' !lenny'],
+      ['!lenny @odin-bot'],
+      ['@odin-bot !lenny'],
     ])('correct strings trigger the callback', (string) => {
       expect(commands.lenny.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/hg'],
+      ['!hg'],
       ['lenny'],
-      ['/hu'],
-      ['/lennys'],
-      ['```function("/lenny", () => {}```'],
-      ['/lennya'],
+      ['!hu'],
+      ['!lennys'],
+      ['```function("!lenny", () => {}```'],
+      ['!lennya'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / lenny'],
-      ['/hu&g'],
-      ['/hu^g'],
-      ['/lenny!'],
-      ['@odin-bot/ lenny'],
-      ['https://lenny.com'],
+      [' !'],
+      ['@odin-bot ! lenny'],
+      ['!hu&g'],
+      ['!hu^g'],
+      ['!lenny!'],
+      ['@odin-bot! lenny'],
+      ['https:!!lenny.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.lenny.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /lenny'],
-      ["Don't worry about /lenny"],
-      ['Hey @odin-bot, /lenny'],
-      ['/@odin-bot ^ /me /lenny /tests$*'],
+      ['Check this out! !lenny'],
+      ["Don't worry about !lenny"],
+      ['Hey @odin-bot, !lenny'],
+      ['!@odin-bot ^ !me !lenny !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.lenny.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/lenny'],
-      ["it's about/lenny"],
-      ['/lennyisanillusion'],
-      ['/lenny/'],
-      ['/lenny*'],
-      ['/lenny...'],
+      ['@user!lenny'],
+      ["it's about!lenny"],
+      ['!lennyisanillusion'],
+      ['!lenny!'],
+      ['!lenny*'],
+      ['!lenny...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.lenny.regex.test(string)).toBeFalsy();
       },
@@ -184,9 +184,9 @@ describe('/lenny', () => {
   });
 });
 
-describe('/fu', () => {
+describe('!fu', () => {
   describe('regex', () => {
-    it.each([['/fu'], [' /fu'], ['/fu @odin-bot'], ['@odin-bot /fu']])(
+    it.each([['!fu'], [' !fu'], ['!fu @odin-bot'], ['@odin-bot !fu']])(
       'correct strings trigger the callback',
       (string) => {
         expect(commands.fu.regex.test(string)).toBeTruthy();
@@ -194,43 +194,43 @@ describe('/fu', () => {
     );
 
     it.each([
-      ['/f'],
+      ['!f'],
       ['fu'],
-      ['/fuu'],
-      ['/fus'],
-      ['```function("/fu", () => {}```'],
-      ['/fua'],
+      ['!fuu'],
+      ['!fus'],
+      ['```function("!fu", () => {}```'],
+      ['!fua'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / fu'],
-      ['/f&u'],
-      ['/f^u'],
-      ['/fu!'],
-      ['@odin-bot/ fu'],
-      ['https://fu.com'],
+      [' !'],
+      ['@odin-bot ! fu'],
+      ['!f&u'],
+      ['!f^u'],
+      ['!fu!'],
+      ['@odin-bot! fu'],
+      ['https:!!fu.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.fu.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /fu'],
-      ["Don't worry about /fu"],
-      ['Hey @odin-bot, /fu'],
-      ['/@odin-bot ^ /me /fu /tests$*'],
+      ['Check this out! !fu'],
+      ["Don't worry about !fu"],
+      ['Hey @odin-bot, !fu'],
+      ['!@odin-bot ^ !me !fu !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.fu.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/fu'],
-      ["it's about/fu"],
-      ['/fuisanillusion'],
-      ['/fu/'],
-      ['/fu*'],
-      ['/fu...'],
+      ['@user!fu'],
+      ["it's about!fu"],
+      ['!fuisanillusion'],
+      ['!fu!'],
+      ['!fu*'],
+      ['!fu...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.fu.regex.test(string)).toBeFalsy();
       },
@@ -240,62 +240,62 @@ describe('/fu', () => {
   describe('callback', () => {
     it('returns correct output', () => {
       const fu = jest.fn(
-        () => 'http://media.riffsy.com/images/636a97aa416ad674eb2b72d4a6e9ad6c/tenor.gif',
+        () => 'http:!!media.riffsy.com!images!636a97aa416ad674eb2b72d4a6e9ad6c!tenor.gif',
       );
       expect(fu(':fu:')).toMatchSnapshot();
     });
   });
 });
 
-describe('/question', () => {
+describe('!question', () => {
   describe('regex', () => {
     it.each([
-      ['/question'],
-      [' /question'],
-      ['/question @odin-bot'],
-      ['@odin-bot /question'],
+      ['!question'],
+      [' !question'],
+      ['!question @odin-bot'],
+      ['@odin-bot !question'],
     ])('correct strings trigger the callback', (string) => {
       expect(commands.question.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/quest'],
+      ['!quest'],
       ['question'],
-      ['/questio'],
-      ['/questions'],
-      ['```function("/question", () => {}```'],
-      ['/questiona'],
+      ['!questio'],
+      ['!questions'],
+      ['```function("!question", () => {}```'],
+      ['!questiona'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / question'],
-      ['/ques&tion'],
-      ['/quest^ion'],
-      ['/question!'],
-      ['@odin-bot/ question'],
-      ['https://question.com'],
+      [' !'],
+      ['@odin-bot ! question'],
+      ['!ques&tion'],
+      ['!quest^ion'],
+      ['!question!'],
+      ['@odin-bot! question'],
+      ['https:!!question.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.question.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /question'],
-      ["Don't worry about /question"],
-      ['Hey @odin-bot, /question'],
-      ['/@odin-bot ^ /me /question /tests$*'],
+      ['Check this out! !question'],
+      ["Don't worry about !question"],
+      ['Hey @odin-bot, !question'],
+      ['!@odin-bot ^ !me !question !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.question.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/question'],
-      ["it's about/question"],
-      ['/questionisanillusion'],
-      ['/question/'],
-      ['/question*'],
-      ['/question...'],
+      ['@user!question'],
+      ["it's about!question"],
+      ['!questionisanillusion'],
+      ['!question!'],
+      ['!question*'],
+      ['!question...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.question.regex.test(string)).toBeFalsy();
       },
@@ -309,9 +309,9 @@ describe('/question', () => {
   });
 });
 
-describe('/data', () => {
+describe('!data', () => {
   describe('regex', () => {
-    it.each([['/data'], [' /data'], ['/data @odin-bot'], ['@odin-bot /data']])(
+    it.each([['!data'], [' !data'], ['!data @odin-bot'], ['@odin-bot !data']])(
       'correct strings trigger the callback',
       (string) => {
         expect(commands.data.regex.test(string)).toBeTruthy();
@@ -319,43 +319,43 @@ describe('/data', () => {
     );
 
     it.each([
-      ['/dat'],
+      ['!dat'],
       ['data'],
-      ['/daa'],
-      ['/datas'],
-      ['```function("/data", () => {}```'],
-      ['/dataa'],
+      ['!daa'],
+      ['!datas'],
+      ['```function("!data", () => {}```'],
+      ['!dataa'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / data'],
-      ['/da&ta'],
-      ['/da^ta'],
-      ['/data!'],
-      ['@odin-bot/ data'],
-      ['https://data.com'],
+      [' !'],
+      ['@odin-bot ! data'],
+      ['!da&ta'],
+      ['!da^ta'],
+      ['!data!'],
+      ['@odin-bot! data'],
+      ['https:!!data.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.data.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /data'],
-      ["Don't worry about /data"],
-      ['Hey @odin-bot, /data'],
-      ['/@odin-bot ^ /me /data /tests$*'],
+      ['Check this out! !data'],
+      ["Don't worry about !data"],
+      ['Hey @odin-bot, !data'],
+      ['!@odin-bot ^ !me !data !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.data.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/data'],
-      ["it's about/data"],
-      ['/dataisanillusion'],
-      ['/data/'],
-      ['/data*'],
-      ['/data...'],
+      ['@user!data'],
+      ["it's about!data"],
+      ['!dataisanillusion'],
+      ['!data!'],
+      ['!data*'],
+      ['!data...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.data.regex.test(string)).toBeFalsy();
       },
@@ -369,55 +369,55 @@ describe('/data', () => {
   });
 });
 
-describe('/google', () => {
+describe('!google', () => {
   describe('regex', () => {
     it.each([
-      ['/google query'],
-      [' /google query'],
-      ['/google query @odin-bot'],
-      ['@odin-bot /google query'],
+      ['!google query'],
+      [' !google query'],
+      ['!google query @odin-bot'],
+      ['@odin-bot !google query'],
     ])('correct strings trigger the callback', (string) => {
       expect(commands.google.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/googl'],
+      ['!googl'],
       ['google'],
-      ['/goog'],
-      ['/googless'],
-      ['```function("/google", () => {}```'],
-      ['/googles'],
+      ['!goog'],
+      ['!googless'],
+      ['```function("!google", () => {}```'],
+      ['!googles'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / google'],
-      ['/goo&gle'],
-      ['/goo^gle'],
-      ['/google!'],
-      ['@odin-bot/ google'],
-      ['https://google.com'],
+      [' !'],
+      ['@odin-bot ! google'],
+      ['!goo&gle'],
+      ['!goo^gle'],
+      ['!google!'],
+      ['@odin-bot! google'],
+      ['https:!!google.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.google.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /google query'],
-      ["Don't worry about /google query"],
-      ['Hey @odin-bot, /google query'],
-      ['/@odin-bot ^ /me /google /tests$*'],
+      ['Check this out! !google query'],
+      ["Don't worry about !google query"],
+      ['Hey @odin-bot, !google query'],
+      ['!@odin-bot ^ !me !google !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.google.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/google'],
-      ["it's about/google"],
-      ['/googleisanillusion'],
-      ['/google/'],
-      ['/google*'],
-      ['/google...'],
+      ['@user!google'],
+      ["it's about!google"],
+      ['!googleisanillusion'],
+      ['!google!'],
+      ['!google*'],
+      ['!google...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.google.regex.test(string)).toBeFalsy();
       },
@@ -427,15 +427,15 @@ describe('/google', () => {
   describe('callback', () => {
     it('returns correct output', () => {
       expect(
-        commands.google.cb({ content: '/google The Odin Project' }),
+        commands.google.cb({ content: '!google The Odin Project' }),
       ).toMatchSnapshot();
     });
   });
 });
 
-describe('/dab', () => {
+describe('!dab', () => {
   describe('regex', () => {
-    it.each([['/dab'], [' /dab'], ['/dab @odin-bot'], ['@odin-bot /dab']])(
+    it.each([['!dab'], [' !dab'], ['!dab @odin-bot'], ['@odin-bot !dab']])(
       'correct strings trigger the callback',
       (string) => {
         expect(commands.dab.regex.test(string)).toBeTruthy();
@@ -443,43 +443,43 @@ describe('/dab', () => {
     );
 
     it.each([
-      ['/da'],
+      ['!da'],
       ['dab'],
-      ['/daa'],
-      ['/dabs'],
-      ['```function("/dab", () => {}```'],
-      ['/d'],
+      ['!daa'],
+      ['!dabs'],
+      ['```function("!dab", () => {}```'],
+      ['!d'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / dab'],
-      ['/da&b'],
-      ['/da^b'],
-      ['/dab!'],
-      ['@odin-bot/ dab'],
-      ['https://dab.com'],
+      [' !'],
+      ['@odin-bot ! dab'],
+      ['!da&b'],
+      ['!da^b'],
+      ['!dab!'],
+      ['@odin-bot! dab'],
+      ['https:!!dab.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.dab.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /dab'],
-      ["Don't worry about /dab"],
-      ['Hey @odin-bot, /dab'],
-      ['/@odin-bot ^ /me /dab /tests$*'],
+      ['Check this out! !dab'],
+      ["Don't worry about !dab"],
+      ['Hey @odin-bot, !dab'],
+      ['!@odin-bot ^ !me !dab !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.dab.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/dab'],
-      ["it's about/dab"],
-      ['/dabisanillusion'],
-      ['/dab/'],
-      ['/dab*'],
-      ['/dab...'],
+      ['@user!dab'],
+      ["it's about!dab"],
+      ['!dabisanillusion'],
+      ['!dab!'],
+      ['!dab*'],
+      ['!dab...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.dab.regex.test(string)).toBeFalsy();
       },
@@ -493,55 +493,55 @@ describe('/dab', () => {
   });
 });
 
-describe('/motivate', () => {
+describe('!motivate', () => {
   describe('regex', () => {
     it.each([
-      ['/motivate'],
-      [' /motivate'],
-      ['/motivate @odin-bot'],
-      ['@odin-bot /motivate'],
+      ['!motivate'],
+      [' !motivate'],
+      ['!motivate @odin-bot'],
+      ['@odin-bot !motivate'],
     ])('correct strings trigger the callback', (string) => {
       expect(commands.motivate.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/motivae'],
+      ['!motivae'],
       ['motivate'],
-      ['/motiv'],
-      ['/motivates'],
-      ['```function("/motivate", () => {}```'],
-      ['/motive'],
+      ['!motiv'],
+      ['!motivates'],
+      ['```function("!motivate", () => {}```'],
+      ['!motive'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / motivate'],
-      ['/motiv&ate'],
-      ['/motiva^te'],
-      ['/motivate!'],
-      ['@odin-bot/ motivate'],
-      ['https://motivate.com'],
+      [' !'],
+      ['@odin-bot ! motivate'],
+      ['!motiv&ate'],
+      ['!motiva^te'],
+      ['!motivate!'],
+      ['@odin-bot! motivate'],
+      ['https:!!motivate.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.motivate.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /motivate'],
-      ["Don't worry about /motivate"],
-      ['Hey @odin-bot, /motivate'],
-      ['/@odin-bot ^ /me /motivate /tests$*'],
+      ['Check this out! !motivate'],
+      ["Don't worry about !motivate"],
+      ['Hey @odin-bot, !motivate'],
+      ['!@odin-bot ^ !me !motivate !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.motivate.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/motivate'],
-      ["it's about/motivate"],
-      ['/motivateisanillusion'],
-      ['/motivate/'],
-      ['/motivate*'],
-      ['/motivate...'],
+      ['@user!motivate'],
+      ["it's about!motivate"],
+      ['!motivateisanillusion'],
+      ['!motivate!'],
+      ['!motivate*'],
+      ['!motivate...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.motivate.regex.test(string)).toBeFalsy();
       },
@@ -555,55 +555,55 @@ describe('/motivate', () => {
   });
 });
 
-describe('/justdoit', () => {
+describe('!justdoit', () => {
   describe('regex', () => {
     it.each([
-      ['/justdoit'],
-      [' /justdoit'],
-      ['/justdoit @odin-bot'],
-      ['@odin-bot /justdoit'],
+      ['!justdoit'],
+      [' !justdoit'],
+      ['!justdoit @odin-bot'],
+      ['@odin-bot !justdoit'],
     ])('correct strings trigger the callback', (string) => {
       expect(commands.justDoIt.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/justdoi'],
+      ['!justdoi'],
       ['justdoit'],
-      ['/justdo'],
-      ['/justdoits'],
-      ['```function("/justdoit", () => {}```'],
-      ['/d'],
+      ['!justdo'],
+      ['!justdoits'],
+      ['```function("!justdoit", () => {}```'],
+      ['!d'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / justdoit'],
-      ['/just&doit'],
-      ['/justdo^it'],
-      ['/justDoIt!'],
-      ['@odin-bot/ justdoit'],
-      ['https://justdoit.com'],
+      [' !'],
+      ['@odin-bot ! justdoit'],
+      ['!just&doit'],
+      ['!justdo^it'],
+      ['!justDoIt!'],
+      ['@odin-bot! justdoit'],
+      ['https:!!justdoit.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.justDoIt.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /justdoit'],
-      ["Don't worry about /justdoit"],
-      ['Hey @odin-bot, /justdoit'],
-      ['/@odin-bot ^ /me /justdoit /tests$*'],
+      ['Check this out! !justdoit'],
+      ["Don't worry about !justdoit"],
+      ['Hey @odin-bot, !justdoit'],
+      ['!@odin-bot ^ !me !justdoit !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.justDoIt.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/justdoit'],
-      ["it's about/justdoit"],
-      ['/dabisanillusion'],
-      ['/justdoit/'],
-      ['/justdoit*'],
-      ['/justdoit...'],
+      ['@user!justdoit'],
+      ["it's about!justdoit"],
+      ['!dabisanillusion'],
+      ['!justdoit!'],
+      ['!justdoit*'],
+      ['!justdoit...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(commands.justDoIt.regex.test(string)).toBeFalsy();
       },
@@ -617,9 +617,9 @@ describe('/justdoit', () => {
   });
 });
 
-describe('/xy', () => {
+describe('!xy', () => {
   describe('regex', () => {
-    it.each([['/xy'], [' /xy'], ['/xy @odin-bot'], ['@odin-bot /xy']])(
+    it.each([['!xy'], [' !xy'], ['!xy @odin-bot'], ['@odin-bot !xy']])(
       'correct strings trigger the callback',
       (string) => {
         expect(commands.xy.regex.test(string)).toBeTruthy();
@@ -627,42 +627,42 @@ describe('/xy', () => {
     );
 
     it.each([
-      ['/yx'],
+      ['!yx'],
       ['xy'],
-      ['/x'],
-      ['/xs'],
-      ['```function("/xy", () => {}```'],
-      ['/d'],
+      ['!x'],
+      ['!xs'],
+      ['```function("!xy", () => {}```'],
+      ['!d'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / xy'],
-      ['/x&y'],
-      ['/x^y'],
-      ['/xy!'],
-      ['@odin-bot/ xy'],
-      ['https://xy.com'],
+      [' !'],
+      ['@odin-bot ! xy'],
+      ['!x&y'],
+      ['!x^y'],
+      ['!xy!'],
+      ['@odin-bot! xy'],
+      ['https:!!xy.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(commands.xy.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /xy'],
-      ["Don't worry about /xy"],
-      ['Hey @odin-bot, /xy'],
-      ['/@odin-bot ^ /me /xy /tests$*'],
+      ['Check this out! !xy'],
+      ["Don't worry about !xy"],
+      ['Hey @odin-bot, !xy'],
+      ['!@odin-bot ^ !me !xy !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(commands.xy.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/xy'],
-      ["it's about/xy"],
-      ['/xyisanillusion'],
-      ['/xy/'],
-      ['/xy*'],
-      ['/xy...'],
-    ])("'%s' - command should be its own word/group - no leading or trailing characters", (string) => {
+      ['@user!xy'],
+      ["it's about!xy"],
+      ['!xyisanillusion'],
+      ['!xy!'],
+      ['!xy*'],
+      ['!xy...'],
+    ])("'%s' - command should be its own word!group - no leading or trailing characters", (string) => {
       expect(commands.xy.regex.test(string)).toBeFalsy();
     });
   });
diff --git a/botCommands/time.test.js b/botCommands/time.test.js
index d09dcfc..7946332 100644
--- a/botCommands/time.test.js
+++ b/botCommands/time.test.js
@@ -1,54 +1,54 @@
 const command = require('./time');
 const { generateMentions } = require('./mockData');
 
-describe('/time', () => {
+describe('!time', () => {
   describe('regex', () => {
     it.each([
-      ['/time'],
-      [' /time'],
-      ['/time @odin-bot'],
-      ['@odin-bot /time'],
+      ['!time'],
+      [' !time'],
+      ['!time @odin-bot'],
+      ['@odin-bot !time'],
     ])('correct strings trigger the callback', (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['/tim'],
+      ['!tim'],
       ['tie'],
-      ['/ti'],
-      ['/times'],
-      ['```function("/time", () => {}```'],
-      ['/timea'],
+      ['!ti'],
+      ['!times'],
+      ['```function("!time", () => {}```'],
+      ['!timea'],
       [''],
       [' '],
-      [' /'],
-      ['@odin-bot / time'],
-      ['/tim&e'],
-      ['/tim^e'],
-      ['/time!'],
-      ['@odin-bot/ time'],
-      ['https://time.com'],
+      [' !'],
+      ['@odin-bot ! time'],
+      ['!tim&e'],
+      ['!tim^e'],
+      ['!time!'],
+      ['@odin-bot! time'],
+      ['https:!!time.com'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /time'],
-      ['Don\'t worry about /time'],
-      ['Hey @odin-bot, /time'],
-      ['/@odin-bot ^ /me /time /tests$*'],
+      ['Check this out! !time'],
+      ['Don\'t worry about !time'],
+      ['Hey @odin-bot, !time'],
+      ['!@odin-bot ^ !me !time !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/time'],
-      ['it\'s about/time'],
-      ['/timeisanillusion'],
-      ['/time/'],
-      ['/time*'],
-      ['/time...'],
-    ])("'%s' - command should be its own word/group - no leading or trailing characters", (string) => {
+      ['@user!time'],
+      ['it\'s about!time'],
+      ['!timeisanillusion'],
+      ['!time!'],
+      ['!time*'],
+      ['!time...'],
+    ])("'%s' - command should be its own word!group - no leading or trailing characters", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
   });
diff --git a/botCommands/top.test.js b/botCommands/top.test.js
index b8af24e..50e2507 100644
--- a/botCommands/top.test.js
+++ b/botCommands/top.test.js
@@ -1,15 +1,15 @@
 const command = require('./top');
 
-describe('/top', () => {
+describe('!top', () => {
   describe('regex', () => {
-    it.each([['/top'], [' /top'], ['/top @odin-bot'], ['@odin-bot /top']])(
+    it.each([['!top'], [' !top'], ['!top @odin-bot'], ['@odin-bot !top']])(
       'correct strings trigger the callback',
       (string) => {
         expect(command.regex.test(string)).toBeTruthy();
       },
     );
 
-    it.each([['tp'], ['toop'], ['topp'], ['/ top'], ['/atop']])(
+    it.each([['tp'], ['toop'], ['topp'], ['! top'], ['!atop']])(
       "'%s' does not trigger the callback",
       (string) => {
         expect(command.regex.test(string)).toBeFalsy();
@@ -17,23 +17,23 @@ describe('/top', () => {
     );
 
     it.each([
-      ['Check this out! /top'],
-      ["Don't worry about /top"],
-      ['Hey @odin-bot, /top'],
-      ['/@odin-bot ^ /me /top /tests$*'],
+      ['Check this out! !top'],
+      ["Don't worry about !top"],
+      ['Hey @odin-bot, !top'],
+      ['!@odin-bot ^ !me !top !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/top'],
-      ["it's about/top"],
-      ['/topanillusion'],
-      ['/top/'],
-      ['/top*'],
-      ['/top...'],
+      ['@user!top'],
+      ["it's about!top"],
+      ['!topanillusion'],
+      ['!top!'],
+      ['!top*'],
+      ['!top...'],
     ])(
-      "'%s' - command should be its own word/group - no leading or trailing characters",
+      "'%s' - command should be its own word!group - no leading or trailing characters",
       (string) => {
         expect(command.regex.test(string)).toBeFalsy();
       },
diff --git a/botCommands/windows.test.js b/botCommands/windows.test.js
index caa62f8..883b2a0 100644
--- a/botCommands/windows.test.js
+++ b/botCommands/windows.test.js
@@ -1,12 +1,12 @@
 const command = require('./windows');
 
-describe('/windows', () => {
+describe('!windows', () => {
   describe('regex', () => {
     it.each([
-      ['/windows'],
-      [' /windows'],
-      ['/windows @odin-bot'],
-      ['@odin-bot /windows'],
+      ['!windows'],
+      [' !windows'],
+      ['!windows @odin-bot'],
+      ['@odin-bot !windows'],
     ])('correct strings trigger the callback', (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
@@ -15,31 +15,31 @@ describe('/windows', () => {
       ['wndows'],
       ['windows'],
       ['window'],
-      ['/wndows'],
-      ['/window'],
-      ['/ windows'],
-      ['/awindows'],
+      ['!wndows'],
+      ['!window'],
+      ['! windows'],
+      ['!awindows'],
     ])("'%s' does not trigger the callback", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
 
     it.each([
-      ['Check this out! /windows'],
-      ['Don\'t worry about /windows'],
-      ['Hey @odin-bot, /windows'],
-      ['/@odin-bot ^ /me /windows /tests$*'],
+      ['Check this out! !windows'],
+      ['Don\'t worry about !windows'],
+      ['Hey @odin-bot, !windows'],
+      ['!@odin-bot ^ !me !windows !tests$*'],
     ])("'%s' - command can be anywhere in the string", (string) => {
       expect(command.regex.test(string)).toBeTruthy();
     });
 
     it.each([
-      ['@user/windows'],
-      ['it\'s about/windows'],
-      ['/windowsanillusion'],
-      ['/windows/'],
-      ['/windows*'],
-      ['/windows...'],
-    ])("'%s' - command should be its own word/group - no leading or trailing characters", (string) => {
+      ['@user!windows'],
+      ['it\'s about!windows'],
+      ['!windowsanillusion'],
+      ['!windows!'],
+      ['!windows*'],
+      ['!windows...'],
+    ])("'%s' - command should be its own word!group - no leading or trailing characters", (string) => {
       expect(command.regex.test(string)).toBeFalsy();
     });
   });