Update to latest development (#23) (#38)

diff --git a/package.json b/package.json
index 2f63ea6..6457877 100644
--- a/package.json
+++ b/package.json
@@ -1,13 +1,16 @@
 {
     "dependencies": {
-        "@discordjs/rest": "^0.2.0-canary.0",
         "@hokify/agenda": "^6.2.12",
+        "@tensorflow/tfjs": "^4.0.0",
+        "@tensorflow/tfjs-node": "^4.2.0",
         "@total-typescript/ts-reset": "^0.3.7",
         "@tsconfig/node18-strictest-esm": "^1.0.0",
         "@types/node": "^18.14.6",
         "@ungap/structured-clone": "^1.0.1",
         "agenda": "^4.3.0",
         "body-parser": "^1.20.0",
+        "canvas": "^2.11.0",
+        "clamscan": "^2.1.2",
         "discord.js": "^14.7.1",
         "eslint": "^8.21.0",
         "express": "^4.18.1",
@@ -18,12 +21,11 @@
         "mongodb": "^4.7.0",
         "node-fetch": "^3.3.0",
         "node-tesseract-ocr": "^2.2.1",
+        "nsfwjs": "2.4.2",
+        "seedrandom": "^3.0.5",
         "structured-clone": "^0.2.2",
         "systeminformation": "^5.17.3"
     },
-    "resolutions": {
-        "discord-api-types": "0.37.23"
-    },
     "name": "nucleus",
     "version": "0.0.1",
     "description": "Nucleus: The core of your server",
@@ -38,7 +40,8 @@
         "lint-list": "echo 'Style checking...'; prettier --check .; echo 'Linting...'; eslint src; echo 'To view errors in more detail, please run `yarn lint`'; true",
         "lint-ci": "echo 'Style checking...' && prettier --check . && echo 'Linting...' && eslint src",
         "setup": "node Installer.js",
-        "win-force-build": "clear | rm -r dist | tsc-suppress"
+        "win-force-build": "clear | rm -r dist | tsc-suppress",
+        "audit-fix": "yarn-audit-fix"
     },
     "repository": {
         "type": "git",
@@ -57,6 +60,7 @@
     "private": false,
     "type": "module",
     "devDependencies": {
+        "@types/clamscan": "^2.0.4",
         "@types/lodash": "^4.14.191",
         "@typescript-eslint/eslint-plugin": "^5.32.0",
         "@typescript-eslint/parser": "^5.32.0",
@@ -64,6 +68,7 @@
         "prettier": "^2.7.1",
         "prettier-eslint": "^15.0.1",
         "tsc-suppress": "^1.0.7",
-        "typescript": "^4.9.4"
+        "typescript": "^4.9.4",
+        "yarn-audit-fix": "^9.3.9"
     }
 }
diff --git a/src/reflex/scanners.ts b/src/reflex/scanners.ts
index 71e63b4..450a4af 100644
--- a/src/reflex/scanners.ts
+++ b/src/reflex/scanners.ts
@@ -5,6 +5,9 @@
 import type Discord from "discord.js";
 import client from "../utils/client.js";
 import { createHash } from "crypto";
+import * as nsfwjs from 'nsfwjs';
+import * as clamscan from 'clamscan'
+import * as tf from "@tensorflow/tfjs-node";
 
 interface NSFWSchema {
     nsfw: boolean;
@@ -15,32 +18,18 @@
     errored?: boolean;
 }
 
+const model = await nsfwjs.load();
+
 export async function testNSFW(link: string): Promise<NSFWSchema> {
-    const [p, hash] = await saveAttachment(link);
+    const [fileName, hash] = await saveAttachment(link);
     const alreadyHaveCheck = await client.database.scanCache.read(hash);
     if (alreadyHaveCheck) return { nsfw: alreadyHaveCheck.data };
-    const data = new URLSearchParams();
-    const r = createReadStream(p);
-    data.append("file", r.read(fs.statSync(p).size));
-    const result = await fetch("https://unscan.p.rapidapi.com/", {
-        method: "POST",
-        headers: {
-            "X-RapidAPI-Key": client.config.rapidApiKey,
-            "X-RapidAPI-Host": "unscan.p.rapidapi.com"
-        },
-        body: data
-    })
-        .then((response) =>
-            response.status === 200 ? (response.json() as Promise<NSFWSchema>) : { nsfw: false, errored: true }
-        )
-        .catch((err) => {
-            console.error(err);
-            return { nsfw: false, errored: true };
-        });
-    if (!result.errored) {
-        client.database.scanCache.write(hash, result.nsfw);
-    }
-    return { nsfw: result.nsfw };
+
+    // const image = tf.node.decodePng()
+
+    // const result = await model.classify(image)
+
+    return { nsfw: false };
 }
 
 export async function testMalware(link: string): Promise<MalwareSchema> {