diff --git a/bot.js b/bot.js
index d6d72ed..9d169d8 100644
--- a/bot.js
+++ b/bot.js
@@ -1,11 +1,13 @@
 var config = require('./config/config.json')
 var irc = require("irc");
-var fs = require("fs");
-var readline = require('readline');
-var path = require('path');
-var randomext = require('./lib/randomnum');
 const { Worker } = require('worker_threads');
-//var randomWords = require('better-random-words');
+
+warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
+errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
+const msgTimeout = new Set();
+const msgTimeoutMsg = new Set();
+const timer = ms => new Promise(res => setTimeout(res, ms))
+var hostmask = null
 
 var bot = new irc.Client(config.irc.server, config.irc.nickname, {
     channels: config.irc.channels,
@@ -18,56 +20,28 @@ var bot = new irc.Client(config.irc.server, config.irc.nickname, {
     floodProtectionDelay: config.floodprotect.flood_protection_delay
 });
 
-const msgTimeout = new Set();
-const msgTimeoutMsg = new Set();
-
-const timer = ms => new Promise(res => setTimeout(res, ms))
-
-const generateRandomString = (amt) => {
-    const chars =
-        "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890`!@#$%^&*()_+{}|\"\',./ᘈᷞኬᲡ᩶ᐨᅚ⸗⡳ᾟⓅᤲ⧛ሥ⸰⯠ᬨ⧻Შ⼷ᢕ᭄◁ⱉጻ៾᪅⎑ᘂᏤ⛰⃡";
-    const randomArray = Array.from(
-        { length: amt },
-        (v, k) => chars[Math.floor(Math.random() * chars.length)]
-    );
-    const randomString = randomArray.join("");
-    return randomString;
-}
-
-async function help(chan) {
-    bot.say(chan, 'Fascinus - https://git.supernets.org/hogwart7/fascinus')
-    bot.say(chan, "$flood [AMOUNT (max=10000)] [TEXT] - Floods the channel with a specific line x amount of times")
-    bot.say(chan, "$ctcpflood [TARGET] [TEXT (one word)] [AMOUNT] - Sends x amount of CTCP requests to a target.")
-    bot.say(chan, "$sneed - Pastes the Sneed's Feed and Seed copypasta.")
-    bot.say(chan, "$rspam [LINES (def=100, max=10000)] - Spams x lines of random characters")
-    bot.say(chan, "$uspam [LINES (def=100, max=10000)] - Spams x lines of random unicode characters of varying length")
-    bot.say(chan, "$art [IMAGE URL (png/jpg/webp/jpeg)] - Creates IRC art using a source image.")
-    bot.say(chan, "$godwords [AMOUNT (def=50, max=100000)] - Generate x amount of random words. Inspired by TempleOS.")
-}
-
-async function flood(chan, arg) {
-    arg.shift() //$flood
-    let amt = arg.shift() //number
-    var text = arg.join(" ")
-    if (amt > 100000) {
-        bot.say(chan, "no");
+function consoleLog(log) {
+    if (config.misc.logging === "true") {
+        console.log(log)
     } else {
-        for(var i=0; i < amt; i++){
-            bot.say(chan, text);
-        }
+        return;
     }
 }
 
-async function sneed(chan) {
-    bot.say(chan, 'THE SIGN IS A SUBTLE JOKE. THE SHOP IS CALLED \"SNEED\'S FEED & SEED\", WHERE')
-    bot.say(chan, 'FEED AND SEED BOTH END IN THE SOUND "-EED", THUS RHYMING WITH THE NAME OF')
-    bot.say(chan, 'THE OWNER, SNEED. THE SIGN SAYS THAT THE SHOP WAS "FORMERLY CHUCK\'S", IMPLYING')
-    bot.say(chan, 'THAT THE TWO WORDS BEGINNING WITH "F" AND "S" WOULD HAVE ENDED WITH "-UCK",')
-    bot.say(chan, 'RHYMING WITH "CHUCK". SO, WHEN CHUCK OWNED THE SHOP, IT WOULD HAVE BEEN CALLED')
-    bot.say(chan, '"CHUCK\'S FUCK AND SUCK".')
+function openPostWorker(chan, command, d1, d2, d3, d4, d5, d6) {
+    consoleLog(`[bot.openPostWorker] Opening ${command} worker`)
+    const worker = new Worker(`./commands/${command}.js`, { 
+        workerData: {
+        d1, d2, d3, d4, d5, d6 //d1-d6 equate to variables you can pass in to a worker, see  the example1 block below for an example (var1 there is d1 here). Further defined in individual command files.
+        }
+    });
+    worker.once('message', (string) => {
+        consoleLog(`[bot.openPostWorker.finalising] Got output from ${command}, sending to `+chan);
+        bot.say(chan, string);
+    });
 }
 
-async function ctcp(target, text, amt) {
+async function ctcp(target, text, amt) { //This can not be moved to its own file due to the nature of how it works
     if (amt > 10000) {
         bot.say(chan, "no");
     } else {
@@ -78,123 +52,37 @@ async function ctcp(target, text, amt) {
     }
 }
 
+async function help(chan) {
+    openPostWorker(chan, 'help')
+}
+
+async function flood(chan, arg) {
+    openPostWorker(chan, 'flood', arg)
+}
+
+async function sneed(chan) {
+    openPostWorker(chan, 'sneed')
+}
+
 async function uspam(chan, amt) {
-    var arr = [];
-    if (amt > 10000) {
-        bot.say(chan, "no")
-    } else {
-        if (amt === undefined) {
-            var amt = 100
-        }
-        for(var i=0; i < amt; i++){
-            var string = "" + randomext.integer(9,0) + "," + randomext.integer(9,0) + randomext.uString(120,60);
-            await timer(2);
-            arr.push(string)
-        }
-        var output = arr.join("\n")
-        bot.say(chan, output);  
-    }
+    openPostWorker(chan, 'uspam', amt)
 }
 
 async function rspam(chan, amt) {
-    var arr = []
-    if (amt > 10000) {
-        bot.say(chan, "no")
-    } else {
-        if (amt === undefined) {
-            var amt = 100
-        }
-        for(var i=0; i < amt; i++){
-            var string = generateRandomString(70);
-            await timer(2);
-            arr.push(string)
-        }
-        var output = arr.join("\n")
-        bot.say(chan, output);
-    }
+    openPostWorker(chan, 'rspam', amt)
 }
 
 async function art(chan, url) {
-    var ext = path.extname(url)
-    if (ext === ".png") { 
-        var filetype = "png"
-    } else if (ext === ".jpg") {
-        var filetype = "jpg"
-    } else if (ext === ".webp") {
-        var filetype = "webp"
-    } else if (ext === ".jpeg") {
-        var filetype = "jpeg"
-    } else {
-        bot.say(chan, "Image must be PNG, JPG, JPEG, WEBP");
-        return
-    }
-    console.log("Starting Banter")
-    const spawn = require("child_process").spawn;
-    const pythonProcess = spawn('python3', ["lib/banter/banter.py", url, "-t", filetype]) 
-    pythonProcess.stdout.on('data', (data) => {
-        console.log(data.toString())
-    });
-    await timer(5000);
-    fs.stat('output.txt', function(err, stat) {
-        if (err == null) {
-            console.log('File exists');
-            const rl = readline.createInterface({
-                input: fs.createReadStream('output.txt'),
-                crlfDelay: Infinity,
-            });
-            rl.on('line', (line) => {
-                bot.say(chan, line);
-            });   
-        } else if (err.code === 'ENOENT') {
-            console.log(err);
-            bot.say(chan, "Error")
-        } else {
-            bot.say(chan, "Other Error")
-        }
-    });
+    openPostWorker(chan, 'art', url)
 }
 
 async function godwords(chan, amt) {
-    if (amt > 100000) {
-        bot.say(chan, "no")
-    } else {
-        if (amt === undefined) {
-            var amt = 50
-        }
-        const worker = new Worker('./commands/godwords.js', { 
-            workerData: {
-                amt
-            }
-        });
-        worker.once('message', (string) => {
-            console.log('Received string from worker, posting.');
-            bot.say(chan, string);
-        });
-    }
+    openPostWorker(chan, 'godwords', amt)
 }
 
-bot.addListener('message', function(nick, to, text, from) {
-    var args = text.split(' ');
-    if (args[0] === '$help') {
-        help(to);
-    } else if (args[0] === '$flood') {
-        flood(to, args)
-    } else if (args[0] === '$sneed') {
-        sneed(to);
-    } else if (args[0] === '$ctcpflood') {
-        ctcp(args[1], args[2], args[3]);
-    } else if (args[0] === '$rspam') {
-        rspam(to, args[1])
-    } else if (args[0] === '$uspam') {
-        uspam(to, args[1]);
-    } else if (args[0] === '$art') {
-        art(to, args[1]);
-    } else if (args[0] === 'fart') {
-        art(to, args[1]);
-    } else if (args[0] === '$godwords') {
-        godwords(to, args[1]);
-    }
-});
+async function phish(chan, height, width) {
+    openPostWorker(chan, 'phish', height, width)
+}
 
 bot.addListener('message', function(nick, to, text, from) {
     if (text.startsWith(config.irc.prefix)) {
@@ -225,11 +113,11 @@ bot.addListener('message', function(nick, to, text, from) {
                 uspam(to, args[1]);
             } else if (command === config.irc.prefix+'art') {
                 art(to, args[1]);
-            } else if (command === config.irc.prefix+'fart') {
-                art(to, args[1]);
             } else if (command === config.irc.prefix+'godwords') {
                 godwords(to, args[1]);
-            }      
+            } else if (command === config.irc.prefix+'phish') {
+                phish(to, args[1], args[2])
+            }     
             msgTimeout.add(to);
             setTimeout(() => {
                 msgTimeout.delete(to);
@@ -240,7 +128,14 @@ bot.addListener('message', function(nick, to, text, from) {
 
 
 bot.addListener('error', function(message) {
-	console.log('error: ', message);
+    consoleLog('[ERROR]' +message) //Dump errors to console
 });
 
-console.log('Starting Fascinus');
\ No newline at end of file
+process.on('uncaughtException', function (err) {
+    console.error(err);
+    if (config.errorhandling.log_errors_to_irc == 'true') { //If logging errors to IRC is enabled then we send the error to that, otherwise we only consoleLog it
+        bot.say(config.errorhandling.error_channel, errorMsg+" "+err.stack.split('\n',1).join(" "))
+    }
+}); 
+
+consoleLog('Starting Fascinus');
\ No newline at end of file
diff --git a/commands/art.js b/commands/art.js
new file mode 100644
index 0000000..b2fdd8a
--- /dev/null
+++ b/commands/art.js
@@ -0,0 +1,60 @@
+const config = require('../config/config.json')
+const { parentPort, workerData } = require('worker_threads');
+const { d1 } = workerData;
+var url = d1
+var path = require('path');
+const timer = ms => new Promise(res => setTimeout(res, ms))
+
+warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
+errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
+
+function consoleLog(log) {
+    if (config.misc.logging === "true") {
+        console.log(log)
+    } else {
+        return;
+    }
+}
+
+function errorMessage(error, code, extra) {
+    consoleLog('[art.errorMessage] '+error.code)
+    if (code == "ENOENT") {
+        var error = errorMsg+"  ENOENT"
+    } else {
+        var error = errorMsg+" Unknown error"
+    }
+    parentPort.postMessage(error);
+    process.exit()
+}
+
+async function sendUpstream(content) {
+    parentPort.postMessage(content);
+    process.exit()
+}
+
+async function generate(url) {
+    output = []
+    var ext = path.extname(url)
+    if (ext === ".png") { 
+        var filetype = "png"
+    } else if (ext === ".jpg") {
+        var filetype = "jpg"
+    } else if (ext === ".webp") {
+        var filetype = "webp"
+    } else if (ext === ".jpeg") {
+        var filetype = "jpeg"
+    } else {
+        consoleLog('[art] Invalid image passed')
+        sendUpstream(errorMsg+" Image must be PNG, JPG, JPEG, WEBP");
+    }
+    consoleLog("[art] Starting banter.py process")
+    const spawn = require("child_process").spawn;
+    const pythonProcess = spawn('python3', ["/home/node/app/lib/banter/banter.py", url, "-t", filetype]) 
+    pythonProcess.stdout.on('data', (data) => {
+        output.push(data.toString())
+    });
+    await timer(5000);
+    sendUpstream(output.join('\n'))
+}
+
+generate(url)
\ No newline at end of file
diff --git a/commands/flood.js b/commands/flood.js
new file mode 100644
index 0000000..75aa759
--- /dev/null
+++ b/commands/flood.js
@@ -0,0 +1,50 @@
+const { error } = require('console');
+const config = require('../config/config.json')
+const { parentPort, workerData } = require('worker_threads');
+const { d1 } = workerData; //Declare all used variables here (if you only pass 1 variable to this command you only really need d1 in here, but it doesnt matter)
+var arg = d1; // Declaring d1 as var1, just for consistancy with the last file but again, this may not be necessary in all cases.
+const timer = ms => new Promise(res => setTimeout(res, ms))
+
+warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
+errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
+
+function consoleLog(log) {
+    if (config.misc.logging === "true") {
+        console.log(log)
+    } else {
+        return;
+    }
+}
+
+function errorMessage(error, code, extra) {
+    consoleLog('[uspam.errorMessage] '+error.code)
+    if (code == "BAD") {
+        var error = errorMsg+" SHITS_FUCKED_MAN: " + extra + " not found"
+    } else if (code == "TOOLARGE") {
+        var error = errorMsg+" Your request is too large (Maximum is 100000)"
+    } else {
+        var error = errorMsg+" Unknown error"
+    }
+    parentPort.postMessage(error);
+    process.exit()
+}
+
+async function sendUpstream(content) {
+    parentPort.postMessage(content);
+    process.exit()
+}
+
+var arr = []
+arg.shift() //$flood
+var amt = arg.shift() //number
+var text = arg.join(" ")
+if (amt > 100000) {
+    consoleLog('[flood] Request too large was made, killing worker')
+    errorMessage("error", "TOOLARGE")
+} else {
+    for(var i=0; i < amt; i++){
+        arr.push(text)
+    }
+}
+var output = arr.join("\n")
+sendUpstream(output)
\ No newline at end of file
diff --git a/commands/godwords.js b/commands/godwords.js
index 9cbabc7..af0dff7 100644
--- a/commands/godwords.js
+++ b/commands/godwords.js
@@ -1,16 +1,59 @@
+const config = require('../config/config.json')
 const { parentPort, workerData } = require('worker_threads');
-const { amt } = workerData;
+const { d1 } = workerData;
+var amt = d1
 var randomWords = require('../lib/randomword');
+const timer = ms => new Promise(res => setTimeout(res, ms))
 
-var output = [];
-var string = [];
-var text = [];
-for(var i=0; i < amt; i++){
-    var word = randomWords({ exactly: 1 });
-    text.push(word);
+warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
+errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
+
+function consoleLog(log) {
+    if (config.misc.logging === "true") {
+        console.log(log)
+    } else {
+        return;
+    }
 }
-var string = text.join(" ")
 
-output.push(string);
-parentPort.postMessage(output);
-process.exit()
\ No newline at end of file
+function errorMessage(error, code, extra) {
+    consoleLog('[godwords.errorMessage] '+error.code)
+    if (code == "BAD") {
+        var error = errorMsg+" SHITS_FUCKED_MAN: " + extra + " not found"
+    } else if (code == "TOOLARGE") {
+        var error = errorMsg+" Your request is too large (Maximum is 10000)"
+    } else {
+        var error = errorMsg+" Unknown error"
+    }
+    parentPort.postMessage(error);
+    process.exit()
+}
+
+async function sendUpstream(content) {
+    parentPort.postMessage(content);
+    process.exit()
+}
+
+function gen(amt) {
+    consoleLog('[godwords.gen] Generating godwords output')
+    var output = [];
+    var string = [];
+    var text = [];
+    for(var i=0; i < amt; i++){
+        var word = randomWords({ exactly: 1 });
+        text.push(word);
+    }
+    var string = text.join(" ")
+    output.push(string);
+    sendUpstream(output);
+}
+
+if (amt > 10000) {
+    consoleLog('[godwords] Request too large was made, killing worker')
+    errorMessage("error", "TOOLARGE")
+} else {
+    if (amt === undefined) {
+        var amt = 50
+    }
+    gen(amt)
+}
\ No newline at end of file
diff --git a/commands/help.js b/commands/help.js
new file mode 100644
index 0000000..7d699e1
--- /dev/null
+++ b/commands/help.js
@@ -0,0 +1,43 @@
+const config = require('../config/config.json')
+const { parentPort, workerData } = require('worker_threads');
+const timer = ms => new Promise(res => setTimeout(res, ms))
+
+warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
+errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
+
+function consoleLog(log) {
+    if (config.misc.logging === "true") {
+        console.log(log)
+    } else {
+        return;
+    }
+}
+
+function errorMessage(error, code, extra) {
+    consoleLog('[help.errorMessage] '+error.code)
+    if (code == "BAD") {
+        var error = errorMsg+" SHITS_FUCKED_MAN: " + extra + " not found"
+    } else {
+        var error = errorMsg+" Unknown error"
+    }
+    parentPort.postMessage(error);
+    process.exit()
+}
+
+async function sendUpstream(content) {
+    parentPort.postMessage(content);
+    process.exit()
+}
+
+var output = []
+output.push('Fascinus - https://git.supernets.org/hgw/fascinus')
+output.push("$flood [AMOUNT (max=10000)] [TEXT] - Floods the channel with a specific line x amount of times")
+output.push("$ctcpflood [TARGET] [TEXT (one word)] [AMOUNT] - Sends x amount of CTCP requests to a target.")
+output.push("$sneed - Pastes the Sneed's Feed and Seed copypasta.")
+output.push("$rspam [LINES (def=100, max=10000)] - Spams x lines of random characters")
+output.push("$uspam [LINES (def=100, max=10000)] - Spams x lines of random unicode characters of varying length")
+output.push("$art [IMAGE URL (png/jpg/webp/jpeg)] - Creates IRC art using a source image.")
+output.push("$godwords [AMOUNT (def=50, max=100000)] - Generate x amount of random words. Inspired by TempleOS.")
+output.push("$phish [HEIGHT (opt, max=100)] [WIDTH (opt, max=100)] - Generate an aquarium")
+
+sendUpstream(output.join('\n'))
\ No newline at end of file
diff --git a/commands/rspam.js b/commands/rspam.js
new file mode 100644
index 0000000..5431e00
--- /dev/null
+++ b/commands/rspam.js
@@ -0,0 +1,64 @@
+const { error } = require('console');
+const config = require('../config/config.json')
+const { parentPort, workerData } = require('worker_threads');
+const { d1 } = workerData; //Declare all used variables here (if you only pass 1 variable to this command you only really need d1 in here, but it doesnt matter)
+var amt = d1; // Declaring d1 as var1, just for consistancy with the last file but again, this may not be necessary in all cases.
+const timer = ms => new Promise(res => setTimeout(res, ms))
+
+warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
+errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
+
+function consoleLog(log) {
+    if (config.misc.logging === "true") {
+        console.log(log)
+    } else {
+        return;
+    }
+}
+
+function errorMessage(error, code, extra) {
+    consoleLog('[rspam.errorMessage] '+error.code)
+    if (code == "BAD") {
+        var error = errorMsg+" SHITS_FUCKED_MAN: " + extra + " not found"
+    } else if (code == "TOOLARGE") {
+        var error = errorMsg+" Your request is too large (Maximum is 10000)"
+    } else {
+        var error = errorMsg+" Unknown error"
+    }
+    parentPort.postMessage(error);
+    process.exit()
+}
+
+async function sendUpstream(content) {
+    parentPort.postMessage(content);
+    process.exit()
+}
+
+const generateRandomString = (amt) => {
+    const chars =
+        "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890`!@#$%^&*()_+{}|\"\',./ᘈᷞኬᲡ᩶ᐨᅚ⸗⡳ᾟⓅᤲ⧛ሥ⸰⯠ᬨ⧻Შ⼷ᢕ᭄◁ⱉጻ៾᪅⎑ᘂᏤ⛰⃡";
+    const randomArray = Array.from(
+        { length: amt },
+        (v, k) => chars[Math.floor(Math.random() * chars.length)]
+    );
+    const randomString = randomArray.join("");
+    return randomString;
+}
+
+var arr = []
+if (amt > 10000) {
+    consoleLog('[rpsam] Request too large was made, killing worker')
+    errorMessage("error", "TOOLARGE")
+} else {
+    if (amt === undefined) {
+        consoleLog('[rspam] Amount was not defined, defaulting to 100')
+        var amt = 100
+    }
+    for(var i=0; i < amt; i++){
+        var string = generateRandomString(70);
+        timer(2);
+        arr.push(string)
+    }
+    var output = arr.join("\n")
+    sendUpstream(output)
+}
\ No newline at end of file
diff --git a/commands/sneed.js b/commands/sneed.js
new file mode 100644
index 0000000..9aafcd0
--- /dev/null
+++ b/commands/sneed.js
@@ -0,0 +1,39 @@
+const config = require('../config/config.json')
+const { parentPort, workerData } = require('worker_threads');
+const timer = ms => new Promise(res => setTimeout(res, ms))
+
+warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
+errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
+
+function consoleLog(log) {
+    if (config.misc.logging === "true") {
+        console.log(log)
+    } else {
+        return;
+    }
+}
+
+function errorMessage(error, code, extra) {
+    consoleLog('[sneed.errorMessage] '+error.code)
+    if (code == "BAD") {
+        var error = errorMsg+" SHITS_FUCKED_MAN: " + extra + " not found"
+    } else {
+        var error = errorMsg+" Unknown error"
+    }
+    parentPort.postMessage(error);
+    process.exit()
+}
+
+async function sendUpstream(content) {
+    parentPort.postMessage(content);
+    process.exit()
+}
+
+output = []
+output.push('THE SIGN IS A SUBTLE JOKE. THE SHOP IS CALLED \"SNEED\'S FEED & SEED\", WHERE')
+output.push('FEED AND SEED BOTH END IN THE SOUND "-EED", THUS RHYMING WITH THE NAME OF')
+output.push('THE OWNER, SNEED. THE SIGN SAYS THAT THE SHOP WAS "FORMERLY CHUCK\'S", IMPLYING')
+output.push('THAT THE TWO WORDS BEGINNING WITH "F" AND "S" WOULD HAVE ENDED WITH "-UCK",')
+output.push('RHYMING WITH "CHUCK". SO, WHEN CHUCK OWNED THE SHOP, IT WOULD HAVE BEEN CALLED')
+output.push('"CHUCK\'S FUCK AND SUCK".')
+sendUpstream(output.join("\n"))
\ No newline at end of file
diff --git a/commands/uspam.js b/commands/uspam.js
new file mode 100644
index 0000000..ee26797
--- /dev/null
+++ b/commands/uspam.js
@@ -0,0 +1,65 @@
+const { error } = require('console');
+const config = require('../config/config.json')
+const { parentPort, workerData } = require('worker_threads');
+const { d1 } = workerData; //Declare all used variables here (if you only pass 1 variable to this command you only really need d1 in here, but it doesnt matter)
+var amt = d1; // Declaring d1 as var1, just for consistancy with the last file but again, this may not be necessary in all cases.
+const timer = ms => new Promise(res => setTimeout(res, ms))
+var randomext = require('../lib/randomnum');
+
+warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
+errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
+
+function consoleLog(log) {
+    if (config.misc.logging === "true") {
+        console.log(log)
+    } else {
+        return;
+    }
+}
+
+function errorMessage(error, code, extra) {
+    consoleLog('[uspam.errorMessage] '+error.code)
+    if (code == "BAD") {
+        var error = errorMsg+" SHITS_FUCKED_MAN: " + extra + " not found"
+    } else if (code == "TOOLARGE") {
+        var error = errorMsg+" Your request is too large (Maximum is 10000)"
+    } else {
+        var error = errorMsg+" Unknown error"
+    }
+    parentPort.postMessage(error);
+    process.exit()
+}
+
+async function sendUpstream(content) {
+    parentPort.postMessage(content);
+    process.exit()
+}
+
+const generateRandomString = (amt) => {
+    const chars =
+        "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890`!@#$%^&*()_+{}|\"\',./ᘈᷞኬᲡ᩶ᐨᅚ⸗⡳ᾟⓅᤲ⧛ሥ⸰⯠ᬨ⧻Შ⼷ᢕ᭄◁ⱉጻ៾᪅⎑ᘂᏤ⛰⃡";
+    const randomArray = Array.from(
+        { length: amt },
+        (v, k) => chars[Math.floor(Math.random() * chars.length)]
+    );
+    const randomString = randomArray.join("");
+    return randomString;
+}
+
+var arr = []
+if (amt > 10000) {
+    consoleLog('[uspam] Request too large was made, killing worker')
+    errorMessage("error", "TOOLARGE")
+} else {
+    if (amt === undefined) {
+        consoleLog('[uspam] Amount was not defined, defaulting to 100')
+        var amt = 100
+    }
+    for(var i=0; i < amt; i++){
+        var string = "" + randomext.integer(9,0) + "," + randomext.integer(9,0) + randomext.uString(120,60);
+        timer(2);
+        arr.push(string)
+    }
+    var output = arr.join("\n")
+    sendUpstream(output)
+}
\ No newline at end of file
