diff options
| author | uakci <git@uakci.space> | 2022-11-07 02:29:51 +0100 |
|---|---|---|
| committer | uakci <git@uakci.space> | 2022-11-07 02:35:47 +0100 |
| commit | 79268b48e784b789f98408df2ba8916dd02dbd11 (patch) | |
| tree | 84d2bf7498aaa97ee6947d6b2454515c3b74bb31 | |
| parent | add overflow protection on send (diff) | |
| download | nuogai-79268b48e784b789f98408df2ba8916dd02dbd11.tar.gz nuogai-79268b48e784b789f98408df2ba8916dd02dbd11.zip | |
replace spe and nui with zugai’s lil serial tool
| -rw-r--r-- | bot.go | 40 | ||||
| -rw-r--r-- | flake.lock | 54 | ||||
| -rw-r--r-- | flake.nix | 61 | ||||
| -rw-r--r-- | module.nix | 57 |
4 files changed, 85 insertions, 127 deletions
@@ -28,15 +28,16 @@ const ( wikiHelpUrl = "https://toaq.me/Nuogaı" wikiPageUrl = "https://toaq.me/%s" wikiCommandsUrl = "https://toaq.me/Discord/Help_text?action=render" + toaduaUrl = "%s/api" + zugaiUrl = "%s/zugai?to=%s&text=%s" lozenge = '▯' ) var ( - markdownLinkRe = regexp.MustCompile(`!?\[(.*)\]\((.*)\)`) - alphaHyphenRe = regexp.MustCompile(`^[a-z-]+$`) - ports struct { - toa, spe, nui string - } + markdownLinkRe = regexp.MustCompile(`!?\[(.*)\]\((.*)\)`) + alphaHyphenRe = regexp.MustCompile(`^[a-z-]+$`) + toaduaCmdRe = regexp.MustCompile(`^%([1-9][0-9]*)?$`) + toaduaHost, zugaiHost string ) func mustGetenv(name string) (env string) { @@ -48,9 +49,8 @@ func mustGetenv(name string) (env string) { } func init() { - ports.spe = mustGetenv("SPE_PORT") - ports.nui = mustGetenv("NUI_PORT") - ports.toa = mustGetenv("TOA_PORT") + toaduaHost = mustGetenv("TOADUA_HOST") + zugaiHost = mustGetenv("ZUGAI_HOST") } func min(a, b int) int { @@ -263,15 +263,13 @@ func respond(message string, callback func(Response)) { returnText("please supply input") return } - returnFromRequest(get(fmt.Sprintf("http://localhost:%s/query?%s", ports.spe, restQuery))) - case "%nui": - if len(rest) == 0 { - returnText("please supply input") + out, err := exec.Command("expand-serial", rest).Output() + if err != nil { + log.Print(err) + returnText("lủı sa tủoı") return } - u, _ := url.Parse(fmt.Sprintf("http://localhost:%s", ports.nui)) - returnFromRequest(post(u.String(), "application/octet-stream", - bytes.NewBufferString(rest))) + returnText(string(out)) case "%help": returnText(fmt.Sprintf("<%s>", wikiHelpUrl)) case "%)": @@ -344,9 +342,9 @@ func respond(message string, callback func(Response)) { } returnText(parse + math) case "%english", "%logic", "%structure": - returnFromRequest(get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=%s&text=%s", cmd[1:], restQuery))) + returnFromRequest(get(fmt.Sprintf(zugaiUrl, zugaiHost, cmd[1:], restQuery))) case "%tree": - file, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=xbar-png&text=%s", restQuery)) + file, err := get(fmt.Sprintf(zugaiUrl, zugaiHost, "xbar-png", restQuery)) if err != nil { log.Println(err) returnText(fmt.Sprintf("diagram not available: %s", err.Error())) @@ -358,7 +356,7 @@ func respond(message string, callback func(Response)) { case "%all": sb := &strings.Builder{} for i, name := range []string{"english", "structure", "logic"} { - res, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=%s&text=%s", name, restQuery)) + res, err := get(fmt.Sprintf(zugaiUrl, zugaiHost, name, restQuery)) if err != nil { log.Println(err) returnText(err.Error()) @@ -369,7 +367,7 @@ func respond(message string, callback func(Response)) { } sb.WriteString(strings.TrimSpace(string(res))) } - file, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=xbar-png&text=%s", restQuery)) + file, err := get(fmt.Sprintf(zugaiUrl, zugaiHost, "xbar-png", restQuery)) if err != nil { log.Println(err) fmt.Fprintf(sb, "\ndiagram not available: %v", err.Error()) @@ -405,7 +403,7 @@ func Toadua(args []string, returnText func(string), howMany int, showNotes bool) returnText("error") return } - raw, err := http.Post(fmt.Sprintf(`http://localhost:%s/api`, ports.toa), + raw, err := http.Post(fmt.Sprintf(toaduaUrl, toaduaHost), "application/json", bytes.NewReader(mars)) if err != nil { log.Print(err) @@ -589,7 +587,7 @@ func Hoekai(s string) string { } func main() { - dg, err := discordgo.New("Bot " + os.Getenv("TOKEN")) + dg, err := discordgo.New("Bot " + os.Getenv("NUOGAI_TOKEN")) if err != nil { panic(err) } @@ -66,46 +66,29 @@ "type": "indirect" } }, - "nuigui-upstream": { - "flake": false, - "locked": { - "lastModified": 1551541396, - "narHash": "sha256-PZUzgumsvIpzEgODVpiBKlZzZQHXKhS+3lOB+2EDeeQ=", - "owner": "uakci", - "repo": "nuigui", - "rev": "87d41886f7c4693dfc5e3016799232c7e15e4c81", - "type": "github" - }, - "original": { - "owner": "uakci", - "ref": "master", - "repo": "nuigui", - "type": "github" - } - }, "root": { "inputs": { "flake-utils": "flake-utils", "gomod2nix": "gomod2nix", "nixpkgs": "nixpkgs_2", - "nuigui-upstream": "nuigui-upstream", - "serial-predicate-engine-upstream": "serial-predicate-engine-upstream" + "toaq-dictionary": "toaq-dictionary", + "zugai": "zugai" } }, - "serial-predicate-engine-upstream": { + "toaq-dictionary": { "flake": false, "locked": { - "lastModified": 1546479877, - "narHash": "sha256-jVDNyfYWlk5qYsZSQjcGdI4hdEKKdSciz6QK0nAqKGs=", - "owner": "acotis", - "repo": "serial-predicate-engine", - "rev": "9e02baf711c0b7402da2eeb50b8644bf7b6e415f", + "lastModified": 1660491489, + "narHash": "sha256-H/e9i0Y6ugFQhqKxasJQoSBlSNU8xUOuF5H/vpxnTiQ=", + "owner": "toaq", + "repo": "dictionary", + "rev": "aa22bbb6b5e4b898143b3a66bfee9890a640aca5", "type": "github" }, "original": { - "owner": "acotis", + "owner": "toaq", "ref": "master", - "repo": "serial-predicate-engine", + "repo": "dictionary", "type": "github" } }, @@ -123,6 +106,23 @@ "repo": "flake-utils", "type": "github" } + }, + "zugai": { + "flake": false, + "locked": { + "lastModified": 1667776834, + "narHash": "sha256-RATF7x6V2a1IKZGAU6NcM0KrKFL4MgGu4Jas/d/IWFQ=", + "owner": "toaq", + "repo": "zugai", + "rev": "38646646b34bb72d1ef01c8d37fcab3d238c5f0b", + "type": "github" + }, + "original": { + "owner": "toaq", + "ref": "main", + "repo": "zugai", + "type": "github" + } } }, "root": "root", @@ -2,15 +2,17 @@ inputs = { flake-utils.url = "github:numtide/flake-utils/master"; gomod2nix.url = "github:tweag/gomod2nix/master"; - nuigui-upstream.url = "github:uakci/nuigui/master"; - nuigui-upstream.flake = false; - serial-predicate-engine-upstream.url = - "github:acotis/serial-predicate-engine/master"; - serial-predicate-engine-upstream.flake = false; + toaq-dictionary = { + url = "github:toaq/dictionary/master"; + flake = false; + }; + zugai = { + url = "github:toaq/zugai/main"; + flake = false; + }; }; - outputs = { self, nixpkgs, gomod2nix, nuigui-upstream - , serial-predicate-engine-upstream, flake-utils, ... }: + outputs = { self, nixpkgs, gomod2nix, flake-utils, zugai, toaq-dictionary, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = (import nixpkgs { @@ -26,55 +28,32 @@ ''; imagemagickWithPango = imagemagick.overrideAttrs (a: { buildInputs = a.buildInputs ++ [ pango ]; }); - schemePkgs = lib.mapAttrs (name: - { src, install, patches }: - pkgs.stdenv.mkDerivation { - inherit src name patches; - buildInputs = [ guile ]; - installPhase = '' - mkdir -p $out/bin - cp -r ./* $out - cp "${writers.writeBash "${name}-start" install}" $out/bin/${name} - ''; - }) { - nuigui = { - src = nuigui-upstream; - patches = [ ./patches/nui.patch ]; - install = '' - cd $(dirname $0)/../ - ${guile}/bin/guile web.scm - ''; - }; - serial-predicate-engine = { - src = serial-predicate-engine-upstream; - patches = [ ./patches/spe.patch ]; - install = '' - cd $(dirname $0)/../web/ - ${guile}/bin/guile webservice.scm - ''; - }; - }; + expand-serial = runCommand "expand-serial" { } '' + mkdir -p $out/bin + tee >$out/bin/expand-serial <<EOF + #!/bin/sh + ${pkgs.python3}/bin/python ${zugai}/src/expand_serial.py ${toaq-dictionary}/dictionary.json \$@ + EOF + chmod +x $out/bin/expand-serial + ''; nuogai = buildGoApplication { vendorSha256 = null; runVend = true; name = "nuogai"; src = ./.; modules = ./gomod2nix.toml; - buildInputs = builtins.attrValues schemePkgs; nativeBuildInputs = [ makeWrapper ]; postFixup = '' wrapProgram $out/bin/nuogai --prefix PATH : ${ - lib.makeBinPath [ imagemagickWithPango ] + lib.makeBinPath [ imagemagickWithPango expand-serial ] } ''; }; in { - defaultPackage = nuogai; - packages = schemePkgs // { - inherit toaqScript nuogai imagemagickWithPango; - }; nixosModule = { config, pkgs, lib, ... }@args: import ./module.nix (args // { inherit self system; }); devShells.${system} = gomod2nix.devShells.${system}; + defaultPackage = nuogai; + packages = { inherit nuogai expand-serial toaqScript; }; }); } @@ -3,45 +3,26 @@ let cfg = config.services.nuogai; in with lib; { options.services.nuogai = { enable = mkEnableOption "Enables the nuogaı Discord Bot"; - ports = listToAttrs - (map (flip attrsets.nameValuePair (mkOption { type = types.port; })) [ - "nuigui" - "serial-predicate-engine" - "toadua" - ]); + toaduaHost = mkOption { type = types.str; }; + zugaiHost = mkOption { type = types.str; }; tokenPath = mkOption { type = types.path; }; }; - config = let enable = cfg.enable; - in { - fonts.fonts = optionals enable [ self.packages.${system}.toaqScript ]; - systemd.services = optionalAttrs enable (mapAttrs (k: v: - { - wants = [ "network-online.target" ]; - } // (v self.packages.${system}.${k})) { - nuogai = pkg: { - description = "Toaq Discord bot"; - wantedBy = [ "multi-user.target" ]; - wants = [ "nuigui.service" "serial-predicate-engine.service" ]; - environment = { - NUI_PORT = toString cfg.ports.nuigui; - SPE_PORT = toString cfg.ports.serial-predicate-engine; - TOA_PORT = toString cfg.ports.toadua; - }; - script = '' - export TOKEN=$(cat ${cfg.tokenPath}) - ${pkg}/bin/nuogai - ''; - }; - nuigui = pkg: { - serviceConfig.WorkingDirectory = pkg; - serviceConfig.ExecStart = "${pkg}/bin/nuigui"; - environment.PORT = toString cfg.ports.nuigui; - }; - serial-predicate-engine = pkg: { - serviceConfig.WorkingDirectory = pkg; - serviceConfig.ExecStart = "${pkg}/bin/serial-predicate-engine"; - environment.PORT = toString cfg.ports.serial-predicate-engine; - }; - }); + config = { + fonts.fonts = optionals cfg.enable [ self.packages.${system}.toaqScript ]; + services.nuogai.zugaiHost = lib.mkDefault "https://zugai.toaq.me"; + systemd.services.nuogai = { + inherit (cfg) enable; + description = "Toaq Discord bot"; + wantedBy = [ "multi-user.target" ]; + wants = [ "network-online.target" ]; + environment = { + TOADUA_HOST = cfg.toaduaHost; + ZUGAI_HOST = cfg.zugaiHost; + }; + script = '' + export NUOGAI_TOKEN=$(cat ${cfg.tokenPath}) + ${self.packages.${system}.nuogai}/bin/nuogai + ''; + }; }; } |
