diff --git a/src/commands/add.cpp b/src/commands/add.cpp
new file mode 100644
index 0000000..2a77ebb
--- /dev/null
+++ b/src/commands/add.cpp
@@ -0,0 +1,32 @@
+#include "add.h"
+#include "api/util.h"
+#include <mariadb/conncpp.hpp>
+
+using namespace sql;
+using json = nlohmann::json;
+
+void add::execute(sql::Connection &con, dpp::cluster &bot, const dpp::slashcommand_t &event) {
+    ResultSet *res = util::getResultSet(con, "SELECT * FROM channels WHERE guildId = ? AND channelId = ?",
+                                        {event.command.guild_id.str(), event.command.channel_id.str()});
+    if (res->next()) {
+        util::sendError(event, "This channel is already registered.");
+        return;
+    }
+
+    dpp::webhook newWebhook = dpp::webhook();
+    newWebhook.name = "Sheepstar";
+    newWebhook.channel_id = event.command.channel_id;
+
+    bot.create_webhook(newWebhook, [&con, event](const dpp::confirmation_callback_t &res) {
+        if (res.is_error()) {
+            util::sendError(event, "An error occurred while creating the webhook.");
+            return;
+        }
+
+        std::string url =  json::parse(res.http_info.body)["url"].get<std::string>();
+        util::executeQuery(con, "INSERT INTO channels (guildId, channelId, webhookToken, cachedName) VALUES (?, ?, ?, ?)",
+                           {event.command.guild_id.str(), event.command.channel_id.str(), url, event.command.channel.name});
+
+        util::sendSuccess(event, "This channel has been registered.");
+    });
+}