pull/100/head
TheCodedProf 3 years ago
parent 9b6992a7a6
commit 3021937052
No known key found for this signature in database
GPG Key ID: 803E7CCB5577E6A2

2
.gitmodules vendored

@ -1,4 +1,4 @@
[submodule "src/reflex/nsfwjs"]
path = src/reflex/nsfwjs
url = https://github.com/infinitered/nsfwjs
url = https://github.com/clicksminuteper/nsfwjs
shallow = true

@ -191,11 +191,11 @@
]
},
"locked": {
"lastModified": 1686173255,
"narHash": "sha256-G9HiMDCnK+YeIb+lpLxsRg+/Kk2pz/PSlEtFe8Yi138=",
"lastModified": 1686323589,
"narHash": "sha256-XADn6eWl3670Oj38p0GiN1PaPKvTmDQRQErGLXYjZQU=",
"ref": "refs/heads/master",
"rev": "f91bc86c6d2b1c2c3c4f476835b5ec01b750e898",
"revCount": 98,
"rev": "aa1dc4ff5759f04cc383a5b38a163b3a7b6ac601",
"revCount": 102,
"type": "git",
"url": "ssh://git@github.com/clicksminuteper/pnpm2nix"
},

@ -8,64 +8,120 @@
inputs.pnpm2nix.inputs.nixpkgs.follows = "nixpkgs";
outputs = { self, nixpkgs, flake-utils, clicks-server, pnpm2nix }:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = nixpkgs.legacyPackages.${system};
nodejs = pkgs.nodejs_20;
nodePackages = pkgs.nodePackages_latest;
lib = pkgs.lib;
in rec {
devShells.default = pkgs.mkShell {
packages = [ nodejs nodePackages.pnpm pkgs.pkg-config pkgs.fontconfig.dev ];
shellHook = ''
unset name
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${lib.makeSearchPath "/lib/pkgconfig" [
pkgs.pixman
pkgs.cairo.dev
pkgs.libpng.dev
pkgs.gnome2.pango.dev
pkgs.glib.dev
pkgs.harfbuzz.dev
pkgs.freetype.dev
]}
'';
};
flake-utils.lib.eachDefaultSystem
(system:
let
pkgs = nixpkgs.legacyPackages.${system};
nodejs = pkgs.nodejs_20;
nodePackages = pkgs.nodePackages_latest;
lib = pkgs.lib;
in
rec {
devShells.default = pkgs.mkShell {
packages = [ nodejs nodePackages.pnpm pkgs.pkg-config pkgs.fontconfig.dev ];
shellHook = ''
unset name
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${lib.makeSearchPath "/lib/pkgconfig" [
pkgs.pixman
pkgs.cairo.dev
pkgs.libpng.dev
pkgs.gnome2.pango.dev
pkgs.glib.dev
pkgs.harfbuzz.dev
pkgs.freetype.dev
]}
'';
};
}) // {
packages.x86_64-linux =
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
nodejs = pkgs.nodejs_20;
nodePackages = pkgs.nodePackages_latest;
lib = pkgs.lib;
in
rec {
node_modules = lib.pipe
{
src = ./.;
linkDevDependencies = true;
overrides = pnpm2nix.defaultPnpmOverrides.x86_64-linux // {
canvas = (drv: drv.overrideAttrs (oldAttrs: {
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ pkgs.pkg-config ];
buildInputs = oldAttrs.buildInputs ++ [
pkgs.pixman
pkgs.cairo.dev
pkgs.libpng.dev
pkgs.gnome2.pango.dev
pkgs.glib.dev
pkgs.harfbuzz.dev
pkgs.freetype.dev
];
}));
packages.env = lib.pipe {
src = ./.;
} [
(pnpm2nix.mkPnpmPackage.${system})
(pnpm2nix.mkPnpmEnv.${system})
];
"@tensorflow/tfjs-node" = (drv: drv.overrideAttrs (oldAttrs: {
buildInputs = oldAttrs.buildInputs ++ [
pkgs.libtensorflow
];
packages.default = let
packageJSON = (builtins.fromJSON (builtins.readFile ./package.json));
in pkgs.stdenv.mkDerivation {
pname = "nucleus";
version = packageJSON.version;
preBuild = ''
mkdir -p node_modules/@tensorflow/tfjs-node/deps/lib
ln -s ${pkgs.libtensorflow}/lib/libtensorflow.so.2 node_modules/@tensorflow/tfjs-node/deps/lib/libtensorflow.so.2.9.1
'';
}));
};
} [
(pnpm2nix.mkPnpmPackage.x86_64-linux)
(drv: builtins.readFile "${drv}/nix-support/propagated-build-inputs")
(path: "${path}/node_modules")
];
src = ./.;
nucleus =
let
packageJSON = (builtins.fromJSON (builtins.readFile ./package.json));
in
pkgs.stdenv.mkDerivation {
pname = "nucleus";
version = packageJSON.version;
buildInputs = [ packages.env nodejs nodePackages.pnpm ];
nativeBuildInputs = [ packages.env nodePackages.pnpm ];
src = ./.;
buildPhase = ''
pnpm run build
'';
buildInputs = [ nodejs nodePackages.pnpm ];
nativeBuildInputs = [ nodePackages.pnpm nodePackages.typescript pkgs.python3 ];
installPhase = ''
cp dist $out
mkdir -p $out/bin
echo "#!/usr/bin/env bash\ncd $out\n${packageJSON.scripts.start}" > $out/bin/nucleus
'';
};
buildPhase = ''
${pkgs.python3}/bin/python3 ${./scripts/fix-pnpm-bin.py} ${node_modules} ./bin
export PATH=$PATH:./bin
ln -s ${node_modules} node_modules
pnpm run build
'';
dockerImage = let
nucleus = packages.default;
in pkgs.dockerTools.streamLayeredImage {
name = "nucleus";
tag = "latest";
contents = [ nucleus ];
config.Cmd = [ "${nucleus}/bin/nucleus" ];
};
});
installPhase = ''
mkdir -p $out
cp dist $out -r
cp node_modules $out -r
cp bin $out/.bin -r
cp package.json $out
cp LICENSE $out
mkdir -p $out/bin
echo "#!/usr/bin/env bash" > $out/bin/nucleus
echo "cd $out" >> $out/bin/nucleus
echo "export PATH=$PATH:$out/node_modules/.bin" >> $out/bin/nucleus
echo "${packageJSON.scripts.start}" >> $out/bin/nucleus
chmod +x $out/bin/nucleus
'';
};
dockerImage = pkgs.dockerTools.streamLayeredImage {
name = "nucleus";
tag = "latest";
contents = [ nucleus ];
config.Cmd = [ "${nucleus}/bin/nucleus" ];
};
default = nucleus;
};
};
}

@ -1,6 +1,6 @@
{
"dependencies": {
"@clicks/nsfwjs": "^3.0.2",
"@clicks/nsfwjs": "^3.0.3",
"@hokify/agenda": "^6.3.0",
"@octokit/graphql": "^5.0.6",
"@tensorflow/tfjs": "^4.7.0",
@ -29,6 +29,11 @@
"structured-clone": "^0.2.2",
"systeminformation": "^5.18.2"
},
"pnpm": {
"overrides": {
"@hokify/agenda>mongodb": "$mongodb"
}
},
"name": "nucleus",
"version": "1.1.0",
"description": "Nucleus: The core of your server",

@ -1,9 +1,12 @@
lockfileVersion: '6.0'
overrides:
'@hokify/agenda>mongodb': ^5.6.0
dependencies:
'@clicks/nsfwjs':
specifier: ^3.0.2
version: 3.0.2(@tensorflow/tfjs@4.7.0)
specifier: ^3.0.3
version: 3.0.3(@tensorflow/tfjs@4.7.0)
'@hokify/agenda':
specifier: ^6.3.0
version: 6.3.0
@ -987,8 +990,8 @@ packages:
multi-integer-range: 3.0.0
dev: false
/@clicks/nsfwjs@3.0.2(@tensorflow/tfjs@4.7.0):
resolution: {integrity: sha512-noih81vGmar/HJ89fHfKbcFSLchfiXuASCUlNp+fidzLtoxCBRbcTNoYe3JpNPnpn9dl6ktD0m16P8DcAnWWsg==}
/@clicks/nsfwjs@3.0.3(@tensorflow/tfjs@4.7.0):
resolution: {integrity: sha512-sQicaEck0PfxgDTukGCAiL0naS5XpxMbFFhQwOaLiGQSfzcLia720GIYc3NK3KlVoctsJ/2t+QeRDveAc0Ukmw==}
peerDependencies:
'@tensorflow/tfjs': ^4.6.0
dependencies:
@ -1100,9 +1103,11 @@ packages:
debug: 4.3.4
human-interval: 2.0.1
luxon: 3.3.0
mongodb: 4.16.0
mongodb: 5.6.0
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-providers'
- mongodb-client-encryption
- snappy
- supports-color
dev: false

@ -0,0 +1 @@
/nix/store/fmvzckvxnqrfbgv0mvzghgi87602pgcm-nucleus-1.1.0

@ -0,0 +1,50 @@
import sys
import os
import json
node_modules = sys.argv[1]
bin_dir = sys.argv[2]
def collect_packages_in(_node_modules, packages: set[str] | None = None):
_packages: set[str] = packages or set()
for path in os.listdir(_node_modules):
if not os.path.isdir(os.path.join(_node_modules, path)) or os.path.join(_node_modules, path) in _packages:
continue
_packages.add(os.path.join(_node_modules, path))
if os.path.exists(os.path.join(_node_modules, path, "node_modules")):
collect_packages_in(os.path.join(_node_modules, path, "node_modules"), _packages)
return _packages
def get_binaries_in(package):
package_json = os.path.join(package, "package.json")
if not os.path.exists(package_json):
return []
with open(package_json) as f:
package_json_contents = json.load(f)
if "bin" not in package_json_contents:
return []
if type(package_json_contents["bin"]) == str:
return [[os.path.basename(package_json_contents["name"]), os.path.join(package, package_json_contents["bin"])]]
return [[name, os.path.join(package, bin)] for name, bin in package_json_contents["bin"].items()]
def main():
packages = collect_packages_in(node_modules)
binaries = []
for package in packages:
binaries += get_binaries_in(package)
os.makedirs(bin_dir, exist_ok=True)
for binary in binaries:
if os.path.exists(os.path.join(bin_dir, binary[0])):
os.remove(os.path.join(bin_dir, binary[0]))
os.symlink(os.path.realpath(binary[1]), os.path.join(bin_dir, binary[0]))
if __name__ == "__main__":
main()

@ -0,0 +1 @@
Subproject commit 9b0e45c13996b1b6bc96a3af3d3c4b67ad4e971f

@ -5,7 +5,7 @@ import Tesseract from "node-tesseract-ocr";
import type Discord from "discord.js";
import client from "../utils/client.js";
import { createHash } from "crypto";
import * as nsfwjs from "nsfwjs";
import * as nsfwjs from "@clicks/nsfwjs";
import ClamScan from "clamscan";
import * as tf from "@tensorflow/tfjs-node";
import EmojiEmbed from "../utils/generateEmojiEmbed.js";

Loading…
Cancel
Save